初考-統計資料處理大意111 年第 36 題單選題
執行下列 C 程式片段後,下列敘述何者正確?
for(i = j = k = 0; i < 5; i++, j++){
k++ ;
if(j%2 ==0)continue ;
k++;
if(i%3 ==0)break ;
}
printf("i = %d, j = %d, k = %d", i, j, k);
A印出 i = 3, j = 3, k = 6正確答案
B印出 i = 3, j = 6, k = 10
C印出 i = 6, j = 3, k = 6
D印出 i = 6, j = 3, k = 10
A正確答案
逐輪模擬迴圈:continue 跳過後面、break 直接跳出,追蹤 i/j/k 變化即可。
為什麼答案是 A
逐輪追蹤:i=0,j=0,k=1(continue);i=1,j=1,k=3,1%3≠0;i=2,j=2,k=4(continue);i=3,j=3,k=6,3%3==0→break。印出 i=3,j=3,k=6。
載入中…
完整詳解
Pro · 無限重點 逐輪模擬迴圈:continue 跳過後面、break 直接跳出,追蹤 i/j/k 變化即可。
i=j 同步遞增,k 每輪至少+1;當 j 奇數且 i 為 3 的倍數時 break。i=3 時觸發 break。
逐選項分析
A✓ 正確
逐輪追蹤:i=0,j=0,k=1(continue);i=1,j=1,k=3,1%3≠0;i=2,j=2,k=4(continue);i=3,j=3,k=6,3%3==0→break。印出 i=3,j=3,k=6。
B✕ 陷阱
誤以為迴圈跑完 5 輪且 j 獨立累加。但 i、j 在 for 的遞增區同步 ++,且 break 會提前結束,不會跑到 j=6。
C✕
i 受 for 條件 i<5 控制,不可能到 6;此選項不符迴圈語法行為。
D✕ 陷阱
誤算 k 每輪都 +2 且忽略 break。實際 i=3 時就 break,k 只累加到 6。
逐輪追蹤表
| 輪次 | i | j | k 變化 | 判斷結果 |
|---|
| 1 | 0 | 0 | k=1 | j%2==0 → continue |
| 2 | 1 | 1 | k=3 | 1%3≠0 續下輪 |
| 3 | 2 | 2 | k=4 | j%2==0 → continue |
| 4 | 3 | 3 | k=6 | 3%3==0 → break |
最容易錯在忘記 continue 會跳過後半段的 k++ 和 break 判斷。本題 j 為偶數(0、2)時 k 只 +1 就進下一輪,不會執行到 break 檢查;要分辨 continue 與 break 的差別。