moea_joint
111年
[資訊] 計算機原理、網路概論
第 13 題
下列C語言片段程式碼之執行結果為何?
```c
int i=0
printf("%d",i++);
printf("%d",++i);
printf("%d",++i);
```
```c
int i=0
printf("%d",i++);
printf("%d",++i);
printf("%d",++i);
```
- A 0 1 2
- B 0 2 2
- C 0 2 3
- D 1 2 3
思路引導 VIP
請觀察這三行程式碼中,運算符號出現在變數「前方」與「後方」的差異。當程式執行到某一行時,是會先取值出來使用再進行加法,還是先完成加法才把結果拿出來用?另外,如果這種加法運算產生的變動會一直保留在變數中,那麼每一行執行完後,變數在記憶體裡的數值會如何連續變化呢?
🤖
AI 詳解
AI 專屬家教
掌握遞增運算子的執行時機
太棒了!你能精準選出正確答案,代表你對 C 語言中 前置 (prefix) 與 後置 (postfix) 遞增運算子的運作細節掌握得非常紮實。這類題目最考驗的就是對「變數狀態變化」的持續追蹤能力,能順利解出代表你的邏輯非常清晰。
在程式執行過程中,第一行的 i++ 屬於後置遞增,它會先回傳變數目前的值 $0$ 供 printf 輸出,隨後才在記憶體中將 $i$ 加 $1$(此時 $i=1$);接下來的兩次 ++i 則皆為前置遞增,秉持「先加後用」的原則,會將 $i$ 分別由 $1$ 提升至 $2$、再由 $2$ 提升至 $3$ 並直接輸出。這題的難度切入點在於觀察學生是否會忽略後置遞增所留下的副作用,如果只看單行邏輯而忘了累計先前的變更,就很容易落入陷阱。