農會 資訊管理類程式設計110 年第 30 題單選題
以下為C語言程式片段,請問輸出為何?
int i=5, a=2;
while (i>1) {
a++;
i--;
}
cout<<a;
B正確答案
追蹤 while 迴圈執行次數,i 從 5 每次減 1,當 i>1 條件成立時執行,共執行 4 次;a 從 2 累加 4 次,最終輸出 6。
為什麼答案是 B
正確追蹤變數,迴圈執行 4 次 (i=5,4,3,2),a 從 2 累加 4 次,最終結果為 6。
考點:迴圈次數計算考點:變數追蹤考點:邊界值陷阱考點:初始值與邊界
載入中…
完整詳解
Pro · 無限重點 追蹤 while 迴圈執行次數,i 從 5 每次減 1,當 i>1 條件成立時執行,共執行 4 次;a 從 2 累加 4 次,最終輸出 6。
秒解:i 從 5 遞減,條件 i>1 成立時執行,即 i=5,4,3,2 共執行 4 次。a 初始為 2,累加 4 次即為 2+4=6。
逐選項分析
A迴圈次數計算✕
計算錯誤,可能誤以為迴圈只執行 2 次 (2+2=4),或對迴圈次數判斷有誤。
B變數追蹤✓ 正確
正確追蹤變數,迴圈執行 4 次 (i=5,4,3,2),a 從 2 累加 4 次,最終結果為 6。
C邊界值陷阱✕ 陷阱
邊界值計算錯誤,誤將 i=1 的情況也計入迴圈 (以為條件是 i>=1),多執行 1 次得出 7。
D初始值與邊界✕
邊界值與次數計算雙重錯誤,可能誤以為 i 會減到 0 甚至更多,導致執行 6 次而得出偏大結果。
while 迴圈變數追蹤表
| 執行階段 | 進入迴圈前 i 值 (i>1?) | a 的值 | i 的值 |
|---|
| 初始狀態 | - | 2 | 5 |
| 第 1 次執行 | i=5 (True) | 3 | 4 |
| 第 2 次執行 | i=4 (True) | 4 | 3 |
| 第 3 次執行 | i=3 (True) | 5 | 2 |
| 第 4 次執行 | i=2 (True) | 6 | 1 |
| 結束判斷 | i=1 (False) | 6 | 1 |
考生極易在邊界值 i=1 時出錯,誤將條件看作 i>=1 而多算一次得出 7;此外也常忘記 a 的初始值為 2 而非 0,導致計算結果偏差,務必仔細追蹤每次迴圈的變數變化。