平成23年度秋期 問22 / 80

平成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

平成23年度秋期の他の問題