Q80.
C 語言程式中,a=13,b=6,num=0,下列敘述何者正確?
數位電子 · 乙級 · 程式語言 · Q80
難易度分析
3 / 5
此題屬於複選題型,考生需同時掌握前置與後置遞增/遞減運算子的作用順序,以及複合指定運算子的展開規則。由於必須精確判斷多個敘述的正誤,且選項間存在易混淆的運算邏輯陷阱,故評定為中等難度。
正確答案 (複選):①, ③
- ① 執行num=(++a)+(++b)後,num=21、a=14、b=7:前置遞增運算子 (++a) 會先將變數值加 1 再參與運算。a 由 13 變為 14,b 由 6 變為 7,故 num = 14 + 7 = 21,結果正確。
- ③ 執行a+=a+(b++)後,num=0、a=32、b=7:複合指定運算子 (+=) 展開為 a = a + a + (b++)。b++ 先取值 6 後遞增為 7,故 a = 13 + 13 + 6 = 32,num 未被異動仍為 0,結果正確。
錯誤選項解析
- ② 執行num=(a++)+(b++)後,num=21、a=14、b=7:後置遞增運算子 (a++) 會先使用原始值參與運算後才遞增。應為 num = 13 + 6 = 19,而非 21,故敘述錯誤。
- ④ 執行a*=b--後,num=0、a=65、b=5:複合指定運算子 (*=) 展開為 a = a * (b--)。b-- 先取值 6 後遞減為 5,故 a = 13 × 6 = 78,而非 65,故敘述錯誤。
Learning Tip
"本題核心考點為 C 語言遞增/遞減運算子的前置與後置差異 及 複合指定運算子的展開規則。前置型(++a)先加後用,後置型(a++)先用後加,此為檢定常考陷阱。另需注意複合指定運算子如 `a+=b` 等價於 `a=a+b`,運算順序不可混淆。實務撰寫程式時,應避免在同一運算式中對同一變數多次遞增/遞減,以免產生 未定義行為 (Undefined Behavior)。"
學員答題分佈
①執行num=(++a)+(++b)後,num=21、a=14、b=70%
②執行num=(a++)+(b++)後,num=21、a=14、b=70%
③執行a+=a+(b++)後,num=0、a=32、b=70%
④執行a*=b--後,num=0、a=65、b=50%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!