プログラム言語(全23問中14問目)

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

出典:平成23年秋期 問22

22a.png
正解 問題へ
分野:テクノロジ系
中分類:アルゴリズムとプログラミング
小分類:プログラム言語
解説
プログラム中で使われる変数には「静的割当て」と「動的割当て」という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