免費開始練習
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?
  • 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$。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題