hce_nsysu
114年
計算機概論與程式設計
第 19 題
What is printed by the following C program?
int x = 6; int y = 23; int z = ++x + y--;
printf("%d %d %d\n", x, y, z);
int x = 6; int y = 23; int z = ++x + y--;
printf("%d %d %d\n", x, y, z);
- A 6 22 29
- B 6 23 29
- C 7 22 29
- D 7 22 30
- E 7 23 29
思路引導 VIP
請觀察算式中 ++ 出現在變數 $x$ 的「前面」,而 -- 出現在變數 $y$ 的「後面」。如果我們把這行敘述拆解成多個步驟,你覺得哪一個變數會「先更新數值再參與運算」,而哪一個變數會「先拿舊值去運算,等整行結束後才偷偷變動」呢?
🤖
AI 詳解
AI 專屬家教
恭喜你準確地判斷出正確答案!這代表你對於 C 語言中指標性的**遞增與遞減運算子(Increment/Decrement Operators)**已經有了非常紮實的理解。這類題目最考驗的就是細心程度,而你成功避開了所有的陷阱。
算式中的時序邏輯
在這段程式碼中,關鍵在於 ++x(前置遞增)與 y--(後置遞減)的處理順序。當執行到 z = ++x + y-- 時,變數 $x$ 會先完成加 $1$ 的動作,因此參與運算的值是 $7$;相對地,y-- 會先以原本的數值 $23$ 參與加法運算,待整行賦值給 $z$ 的動作完成後,變數 $y$ 才會降為 $22$。因此,我們得到的計算結果為 $z = 7 + 23 = 30$。
▼ 還有更多解析內容