平成16年春期試験問題 午前問44

次のメインプログラムを実行した結果はどれか。ここで,static は静的割当てを,auto は動的割当てを表す。
44.gif

  • x=6,y=6
  • x=6,y=8
  • x=8,y=6
  • x=8,y=8
正解 問題へ
分野:テクノロジ系
中分類:アルゴリズムとプログラミング
小分類:プログラム言語
解説
プログラム中で使われる変数には「静的割当て」と「動的割当て」という2種類のメモリ割り当て方式があります。
静的割当て変数
全域的変数とも呼ばれ、プログラム全体を通して領域を確保され、関数が終了しても解放されず値を保持し続ける変数。
動的割当て変数
局所的変数とも呼ばれ、関数内だけで自動的(auto)に領域が確保され、関数が終了するとその変数は一度解放される変数。
このプログラムでは特に、関数g(u)の中の静的変数vに注意して答えを出すことがポイントになります。

x=ƒ(2)+ƒ(2) の部分は、

[ƒ(2) 1回目]
auto int u;//u=2
auto int v=1;//v=1
v=1+2;//v=3
return v;//3を返す
[ƒ(2) 2回目]1回目と同じです。
auto int u;//u=2
auto int v=1;//v=1
v=1+2;//v=3
return v;//3を返す
メインプログラム中の変数xは、3+3=6となります。

[g(2) 1回目]
auto int u;//u=2
static int v=1;//v=1
v=1+2;//v=3
return v;//3を返す
[g(2) 2回目]
auto int u;//u=2
static int v=1;//vはすでに確保済みなので3のまま
v=3+2;//v=5
return v;//5を返す
メインプログラム中の変数yは、3+5=8となります。

したがって正しい組合せは「イ」です。

この問題の出題歴


Pagetop