hce_nsysu
112年
計算機概論與程式設計
第 39 題
Consider the following code in C program.
#include
int guess(int a, int b){
if (a>b) return ++a * --b;
return --b*--a;
}
int main() {
int i = 3, j = 9;
int h = guess(i,j)+ (--j);
printf("h=%d\n", h);
return 0;
}
Which of the following output is correct?
#include
int guess(int a, int b){
if (a>b) return ++a * --b;
return --b*--a;
}
int main() {
int i = 3, j = 9;
int h = guess(i,j)+ (--j);
printf("h=%d\n", h);
return 0;
}
Which of the following output is correct?
- A 24
- B 27
- C 33
- D 16
- E None of the above
思路引導 VIP
如果在處理一個加法算式 f(x) + (--x) 時,假設 x 的初始值是 9,而 f(x) 只是把當時傳進去的 x 拿去做運算。請你想想看,『把資料丟進函式的一瞬間』與『在算式後面把變數減一』這兩件事,誰會先決定數值的大小?這對最終的加法結果會有什麼影響?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精準計算出 24 這個正確答案,代表你對於 C 語言中的函式呼叫機制以及前置增量/減量運算子(Prefix operators)的執行順序掌握得非常扎實。
函式邏輯與運算子行為
在 main 函式中,變數 i 為 3,j 為 9。首先分析 guess(i, j) 的執行過程:傳入參數為 (3, 9),在函式內部,條件 a > b ($3 > 9$) 不成立,因此執行 return --b * --a。由於是前置減量,系統會先將 b 減 1 變為 8,將 a 減 1 變為 2,再進行乘法,因此函式回傳值為 $8 \times 2 = 16$。
▼ 還有更多解析內容