地方政府公務人員四等-電信工程類科計算機概要113 年第 29 題單選題
執行下列 C++ 程式碼後,螢幕印出的數字為何?
int f(int m){
static int n=0;
n++;
return (m+n);
}
int main( ) {
cout << f(f(f(3))) << endl;
return 0;
}
C正確答案
static 變數 n 在每次呼叫 f 時遞增且保留值,由內而外計算三層巢狀呼叫即可。
為什麼答案是 C
由內而外:f(3) 時 n=1,回傳 4;f(4) 時 n=2,回傳 6;f(6) 時 n=3,回傳 6+3=9。static n 跨呼叫累積。
載入中…
完整詳解
Pro · 無限重點 static 變數 n 在每次呼叫 f 時遞增且保留值,由內而外計算三層巢狀呼叫即可。
靜態變數累積:第1次n=1回傳3+1=4;第2次n=2回傳4+2=6;第3次n=3回傳6+3=9。
逐選項分析
A✕ 陷阱
誤以為 n 每次都從 0 開始,算成 3+1+1+1=6 或其他錯誤累加。忽略 static 的「保留前次值」特性。
B✕ 陷阱
可能算成 3+1+2+2=8 或其他組合錯誤,沒有正確追蹤每層 m 與 n 的更新順序。
C✓ 正確
由內而外:f(3) 時 n=1,回傳 4;f(4) 時 n=2,回傳 6;f(6) 時 n=3,回傳 6+3=9。static n 跨呼叫累積。
D✕
若誤把 n 起始值算為 1(而非 0),會得到 3+2+3+4=... 這類偏大結果,但非本題正解。
三層呼叫追蹤表
| 呼叫順序 | 傳入 m | n (累積) | 回傳值 m+n |
|---|
| 第1次 f(3) | 3 | 1 | 4 |
| 第2次 f(4) | 4 | 2 | 6 |
| 第3次 f(6) | 6 | 3 | 9 |
static int n=0 只在「程式第一次執行到此行」時初始化一次,之後每次進入函式 n 都保留上次的值。考生若把它當成普通區域變數,每次都重設為 0,就會算錯。巢狀呼叫由內而外,每呼叫一次 n 就 +1。