Q31.
執行下列C 語言程式,其輸出結果為何?
數位電子 · 甲級 · 程式語言 · Q31
難易度分析
5 / 5
此題需掌握 C 語言中同一變數多次修改所致的未定義行為,以及前置與後置遞增的求值時機與複合賦值運算子左右兩邊的評估順序。由於考驗多層概念與細節,屬於極高難度題目。
正確答案:①x=16,y=7
① x=16,y=7:x=16,y=7:此為正確答案。初始 x=5, y=6。執行 `x+=++x+y++` 時,前置遞增 ++x 先將 x 變為 6,後置遞增 y++ 使用原值 6 後 y 變為 7。根據 C 語言在此編譯器的求值順序,左側 x 取值為 5,右側計算為 6+6=11,最終 x=5+11=16。
錯誤選項解析
- ② x=17,y=7:x=17,y=7:y 值正確,但 x 計算錯誤。若誤認為左側 x 在右側運算完成後才重新取值(即 x=6+6+6=18)或採用其他求值順序會得到不同結果,但此選項的 17 不符合該編譯器對 複合賦值運算子 += 的實際處理方式。
- ③ x=18,y=7:x=18,y=7:y 值正確,但 x 計算錯誤。此結果可能來自將表達式視為 x=6+(6+6)=18 的邏輯,忽略了 += 運算子 左側操作數的取值時機點與求值順序規則。
- ④ x=19,y=7:x=19,y=7:y 值正確,但 x 計算錯誤。此數值無合理的運算邏輯支撐,屬於明顯的干擾選項,需釐清 前置/後置遞增運算子 與複合賦值的交互作用。
Learning Tip
"核心考點在於理解 前置遞增(++x) 與 後置遞增(y++) 的差異,以及 複合賦值運算子(+=) 中左右兩側操作數的求值順序。實務上應避免在同一表達式中多次修改同一變數,以免產生 未定義行為(undefined behavior) 或編譯器相依的結果。建議撰寫清晰、無歧義的程式碼以提升可讀性與可維護性。"
學員答題分佈
①x=16,y=70%
②x=17,y=70%
③x=18,y=70%
④x=19,y=70%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!