初考-統計資料處理大意110 年第 12 題單選題
依據下列 C 語言的程式片段,那一行程式碼可能永遠不會被執行到?
$$
\text {while } (a < 1 0)
$$
$$
\mathrm{a} = \mathrm{a} + 5;
$$
$$
\text {if} (a < 1 2)
$$
$$
\mathrm{a} = \mathrm{a} + 2;
$$
$$
\text {if} (a < = 1 1)
$$
$$
\mathrm{a} = 5;
$$
Aa = a + 5;
Ba = a + 2;
Ca = 5;正確答案
D每一行都可能會執行
C正確答案
追蹤變數 a 的數值變化,發現進入第二個 if 時 a 必為 10 或 15,條件 a<=11 僅在 a=10 成立,但此時 a+2=12 已不滿足 <=11,故 C 永不執行。
為什麼答案是 C
若 a=10,經 a=a+2 後變 12,不滿足 a<=11;若 a>=15,直接不滿足 a<=11。無論何種路徑,a=5 這行永遠無法被執行,是本題正解。
載入中…
完整詳解
Pro · 無限重點 追蹤變數 a 的數值變化,發現進入第二個 if 時 a 必為 10 或 15,條件 a<=11 僅在 a=10 成立,但此時 a+2=12 已不滿足 <=11,故 C 永不執行。
模擬迴圈:a<10 時 +5 → a 變 10 或 15;接著判斷 a<12 才 +2;最後判斷 a<=11 才賦值 5。發現 a=10 時 +2 變 12,已無法觸發 a=5。
逐選項分析
A✕
while (a<10) 迴圈內第一行,只要初始 a<10 就會執行。即使 a>=10 不進迴圈,此敘述仍屬「可能」被執行的範圍(取決於輸入),並非永遠不執行。
B✕
if (a<12) 在迴圈結束後判斷。當 a=10 時條件成立,a=a+2 會被執行。因此此行有可能被執行到,非正確答案。
C✓ 正確
若 a=10,經 a=a+2 後變 12,不滿足 a<=11;若 a>=15,直接不滿足 a<=11。無論何種路徑,a=5 這行永遠無法被執行,是本題正解。
D✕ 陷阱
誘答選項。考生若未實際追蹤變數值,容易直覺認為所有程式碼都有機會執行。但透過邏輯推演可證明 C 選項為不可達程式碼(Unreachable Code)。
變數 a 狀態追蹤表
| 階段 | 條件判斷 | a 的可能值 | 備註 |
|---|
| While 迴圈 | a < 10 | 10, 15, 20... | 每次 +5,離開時 a≥10 |
| 第一個 If | a < 12 | 10 (執行+2), ≥15 (跳過) | 僅 a=10 會進入 |
| 第二個 If | a <= 11 | 無 (12>11, 15>11) | 條件永遠為 False |
考生常分別看每個 if 條件覺得「都有可能」,卻忽略上一個 if 內的賦值 (a=a+2) 會改變下一個 if 的判斷基礎。必須將程式視為連續的狀態機來追蹤,而非獨立片段。