平成23年度 秋期 応用情報技術者試験 午前 問22
メインプログラムを実行した結果はどれか。ここで,staticは静的割当てを,autoは動的割当てを表す。
メインプログラム
auto int x, y;
x = f(2) + f(2);
y = g(2) + g(2);
関数f(u)
auto int u;
auto int v = 1;
v = v + u;
return v;
関数g(u)
auto int u;
static int v = 1;
v = v + u;
return v;
| x | y | |
|---|---|---|
| ア | 6 | 6 |
| イ | 6 | 8 |
| ウ | 8 | 6 |
| エ | 8 | 8 |
キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:イ
- auto(動的割当て):関数が呼び出されるたびに領域が確保され,初期化されます。
- static(静的割当て):初期化はプログラム開始時の1回だけで,値は関数の呼出しをまたいで保持されます。
x の計算
f(u) の v は auto なので,呼出しのたびに v=1 から始まります。
- 1回目の f(2):v=1+2=3
- 2回目の f(2):v=1+2=3
- x=3+3=6
y の計算
g(u) の v は static なので,前回の値が残ります。
- 1回目の g(2):v=1+2=3
- 2回目の g(2):v=3+2=5
- y=3+5=8
-
ア: x=6,y=6
誤り。g の v は static なので,2回目の呼出しでは前回の値3から計算され,y は8になります。 -
イ: x=6,y=8
正しい。f は毎回 v=1 から計算し,g は前回の値を引き継いで計算した結果です。 -
ウ: x=8,y=6
誤り。auto と static の扱いを逆にした結果です。 -
エ: x=8,y=8
誤り。f の v は auto なので,呼出しのたびに1に初期化され,x は6になります。
答え
イ: x=6,y=8
出典:平成23年度 秋期 応用情報技術者試験 午前 問22