応用情報技術者平成23年秋期 午前問22

問22

メインプログラムを実行した結果はどれか。ここで,staticは静的割当てを,autoは動的割当てを表す。
22.png/image-size:352×199
  • 22a.png/image-size:130×124

            
  • [出題歴]
  • ソフトウェア開発技術者 H16春期 問44

分類

テクノロジ系 » アルゴリズムとプログラミング » プログラム言語

正解

解説

プログラム中で使われる変数には「静的割当て」と「動的割当て」という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となります。

したがって正しい組合せは「イ」です。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop