IPA過去問ドリル

平成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;

出典:平成23年度 秋期 応用情報技術者試験 午前 問22

正解:イ

解説

fの変数vはauto(動的)割当てのため呼出しのたびにv=1から再初期化され,f(2)は毎回1+2=3を返すのでx=3+3=6です。gの変数vはstatic(静的)割当てのため値が呼出しをまたいで保持され,1回目は1+2=3,2回目は前回のv=3を引き継いで3+2=5となるのでy=3+5=8です。

選択肢ごとの解説

  • 誤り。yについてstatic変数の値が呼出し間で保持されることを考慮せず,g(2)を毎回3と計算した場合の値です。
  • 正しい。x=3+3=6,y=3+5=8です。
  • 誤り。xとyの計算結果が入れ替わっています。
  • 誤り。xについてauto変数がリセットされずに値を引き継ぐと誤って計算した場合の値です。
応用情報技術者の過去問を演習モードで解く