原住民族考試四等考試-電子工程類科計算機概要106 年第 21 題單選題
執行下列 C++程式碼後,螢幕印出的數字為何? int f2(int x){ static int y=3; y++; return (x+y); } int main() { cout<< f2(1)+f2(2)+f2(3) <<endl; return 0; }
D正確答案
static 變數只初始化一次,跨呼叫保留值。y 依序變 4,5,6,加上 x=1,2,3 得 5+7+9=21。
為什麼答案是 D
static int y=3 只在首次呼叫初始化。第1次:y=4, 回傳 1+4=5;第2次:y=5, 回傳 2+5=7;第3次:y=6, 回傳 3+6=9。總和 5+7+9=21。
載入中…
完整詳解
Pro · 無限重點 static 變數只初始化一次,跨呼叫保留值。y 依序變 4,5,6,加上 x=1,2,3 得 5+7+9=21。
認出 static → y 持續累加。三次呼叫 y=4,5,6,結果 (1+4)+(2+5)+(3+6)=21。
逐選項分析
A✕ 陷阱
誤把 y 當一般區域變數每次都重設為 3,算成 (1+4)+(2+4)+(3+4)=18... 其實連這也不是 15。此選項為混淆干擾。
B✕ 陷阱
若 y 每次都重置為 3,y++ 後為 4,則 (1+4)+(2+4)+(3+4)=18。這是最常見誤解:沒意識到 static 的跨呼叫記憶性。
C✕
若誤算 y 初值從 4 開始或順序錯置可能得 20,但正確計算為 21,非此答案。
D✓ 正確
static int y=3 只在首次呼叫初始化。第1次:y=4, 回傳 1+4=5;第2次:y=5, 回傳 2+5=7;第3次:y=6, 回傳 3+6=9。總和 5+7+9=21。
三次呼叫追蹤
| 呼叫 | x | y++ 後 | 回傳 x+y |
|---|
| f2(1) | 1 | 4 | 5 |
| f2(2) | 2 | 5 | 7 |
| f2(3) | 3 | 6 | 9 |
陷阱在於 static 關鍵字。考生若忽略 static,誤以為 y 每次呼叫都重設為 3,會算出 18(選項 B)。考選部最愛這樣考:用 static 測試你對變數生命週期與儲存類別的理解。