原住民族考試四等考試-電子工程類科計算機概要106 年第 18 題單選題
執行下列指令的輸出為何? int a[3][3]={0},i,j; for (i=0,j=i;i<3;i++,j=i) for (;j<3;j++) { if (i==j) a[i][j]=1; printf("%d ",a[i][j]); }
A1 0 0 1 0 0 0 1 0 0 0 1
B1 0 0 1 0 1 1 1 1
C1 0 0 1 0 1正確答案
D0 0 0
C正確答案
外迴圈 i 每輪將 j 重設為 i,內迴圈從 j 跑到 2,僅對角線 a[i][i] 設 1,共輸出 6 個數字。
為什麼答案是 C
i=0: j=0,1,2 → 印 1 0 0;i=1: j=1,2 → 印 1 0;i=2: j=2 → 印 1。合起來為 1 0 0 1 0 1,共 6 個數字,正解。
載入中…
完整詳解
Pro · 無限重點 外迴圈 i 每輪將 j 重設為 i,內迴圈從 j 跑到 2,僅對角線 a[i][i] 設 1,共輸出 6 個數字。
追蹤 (i,j) 走訪格:(0,0)(0,1)(0,2)→(1,1)(1,2)→(2,2),對角線印 1 其餘印 0。
逐選項分析
A✕
這是「每格都走」的 3x3 共 9 格再加多印的錯誤想像,但本題 j 每輪從 i 開始,不會回到 0,故不會有 12 個輸出。
B✕ 陷阱
誤以為 j 每次都重置為 0,印出 9 格。但 for 第三式 j=i 讓 j 從對角線開始,上三角才會被走訪,共 6 格。
C✓ 正確
i=0: j=0,1,2 → 印 1 0 0;i=1: j=1,2 → 印 1 0;i=2: j=2 → 印 1。合起來為 1 0 0 1 0 1,共 6 個數字,正解。
D✕
誤以為只印對角線三個。但內迴圈 j 會繼續遞增直到 3,每輪會多印非對角線的 0,不只三個輸出。
逐輪走訪追蹤
| i | j 起始 | 走訪 (i,j) | 印出 |
|---|
| 0 | 0 | (0,0)(0,1)(0,2) | 1 0 0 |
| 1 | 1 | (1,1)(1,2) | 1 0 |
| 2 | 2 | (2,2) | 1 |
for 第三式 `i++,j=i` 利用逗號運算子讓 j 在每輪外迴圈後同步到新的 i,而非歸零。許多考生誤以為 j 從 0 重新跑,就會選到 B(9 格)或 A(12 格)。關鍵是 j 隨 i 前進,形成上三角走訪。