地方政府公務人員四等-電信工程類科計算機概要113 年第 30 題單選題
C 函數 bar()的執行,產生下列何輸出結果?
void bar(void) {
int i, j;
for ( i = 0 ; i < 5 ; i++ ) {
for ( j = 0 ; j < i+1 ; j ++) printf("*");
printf(" ");
}
}
A***** ***** ***** ***** *****
B***** **** *** ** *
C* ** *** **** *****正確答案
D* ** *** ** *
C正確答案
雙層迴圈追蹤題:外層迴圈控制執行次數,內層迴圈依賴外層變數 i,使印出的星號數量逐次遞增。
為什麼答案是 C
i 從 0 到 4,內層迴圈分別執行 1, 2, 3, 4, 5 次,印出遞增的星號並以空格隔開,完全符合程式碼邏輯。
載入中…
完整詳解
Pro · 無限重點 雙層迴圈追蹤題:外層迴圈控制執行次數,內層迴圈依賴外層變數 i,使印出的星號數量逐次遞增。
觀察內層迴圈條件 `j < i+1`,當 i 變大時,印出的星號數量也會變多,因此輸出必定是「遞增」的星號,秒選 C。
逐選項分析
A✕
若內層迴圈條件為固定的 `j < 5`,才會每次都印出 5 個星號。
B✕ 陷阱
這是星號數量遞減的結果,對應的內層迴圈條件應類似 `j < 5-i`。
C✓ 正確
i 從 0 到 4,內層迴圈分別執行 1, 2, 3, 4, 5 次,印出遞增的星號並以空格隔開,完全符合程式碼邏輯。
D✕
這是先遞增後遞減的結果,與題目單純遞增的邏輯不符。
程式碼執行追蹤表
| 外層 i 值 | 內層 j 的條件 (j < i+1) | 印出星號數 | 該次迴圈完整輸出 |
|---|
| 0 | j < 1 (執行 1 次) | 1 | * |
| 1 | j < 2 (執行 2 次) | 2 | ** |
| 2 | j < 3 (執行 3 次) | 3 | *** |
| 3 | j < 4 (執行 4 次) | 4 | **** |
| 4 | j < 5 (執行 5 次) | 5 | ***** |
在雙層迴圈中,初學者容易忽略內層迴圈的條件(如本題的 j < i+1)是動態依賴外層變數的,可能會誤以為每次都印出固定數量的星號,或者把遞增看成遞減。