応用情報技術者試験(AP) 平成23年秋期試験 問22

応用情報技術者試験(AP) 平成23年秋期試験一覧

HOME年度別に解く分野から選んで解く参考書受験についてその他の情報処理試験リンク集

応用情報技術者試験(AP) 平成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







答え イ


【解説】
プログラム中で使われる変数には静的割当てと動的割当ての2種類があります。

静的割当て変数
全域的変数とも呼ばれ、プログラム全体を通して領域を確保され、関数が終了しても解放されず値を保持し続ける変数。

動的割当て変数
局所的変数とも呼ばれ、関数内だけで自動的(auto)に領域が確保され、関数が終了するとその変数は一度解放される変数。
このプログラムでは特に、関数 g(u)の中の静的変数v に注意して答えを出すことがポイントになります。

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

[f(2) 1回目]
 auto int u; //u=0
 auto int v = 1; //v=1
 v = 1 + 2; //v=3
 return v; //3を返す
[f(2) 2回目]
1回目と同じです。
 auto int u; //u=0
 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=0
 static int v = 1; //v=1
 v = 1 + 2; //v=3
 return v; //3を返す
[g(2) 2回目]
 auto int u; //u=0
 static int v = 1; //vはすでに確保済みなので3のまま
 v = 3 + 2; //v=5
 return v; //5を返す
つまりメインプログラムの yは 3 + 5 = 8となります。






◀戻る

 一覧へ  次へ▶                                               






Copyright (C) 応用情報技術者試験(AP)~午前過去問題解説ガイド. All Rights Reserved.