ソフトウェア開発技術者平成16年春期 午前問44

問44

次のメインプログラムを実行した結果はどれか。ここで,static は静的割当てを,auto は動的割当てを表す。
44.png/image-size:394×224
  • x=6,y=6
  • x=6,y=8
  • x=8,y=6
  • x=8,y=8
  • [出題歴]
  • 応用情報技術者 H23秋期 問22

分類

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

正解

解説

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