平成25年度春期 問20 / 80

平成25年度 春期 応用情報技術者試験 午前 問20

メインプログラムを実行した後,メインプログラムの変数 X,Y の値は幾つになるか。ここで,仮引数 X は値呼出し(call by value),仮引数 Y は参照呼出し(call by reference)であるとする。

メインプログラム

X=2;
Y=2;
add(X,Y);

手続 add(X,Y)

X=X+Y;
Y=X+Y;
return;
X Y
ア 2 4
イ 2 6
ウ 4 2
エ 4 6

キーボード:1〜4 で解答 → 次の問題 ← 前の問題

正解と解説を見る

正解:イ

  • 値呼出し:実引数の値のコピーを渡すので,手続内で仮引数を変更しても呼出し元の変数は変わりません。
  • 参照呼出し:実引数の参照(アドレス)を渡すので,手続内での変更が呼出し元の変数に反映されます。

手続 add の中の動きを追います。

  1. X = X + Y = 2 + 2 = 4(手続内の X だけが 4 になる)
  2. Y = X + Y = 4 + 2 = 6(参照呼出しなのでメインの Y も 6 になる)

したがって,実行後のメインプログラムの値は X = 2,Y = 6 です。

  • ア: X = 2,Y = 4
    誤り。Y は手続の中で X + Y = 4 + 2 = 6 になるので,4 ではありません。

  • イ: X = 2,Y = 6
    正しい。値呼出しの X は手続内で変更されてもメインプログラムの X は 2 のまま,参照呼出しの Y は手続内での変更が反映されて 6 になります。

  • ウ: X = 4,Y = 2
    誤り。値呼出しの X の変更はメインプログラムに反映されず,参照呼出しの Y の変更は反映されるので,逆になっています。

  • エ: X = 4,Y = 6
    誤り。X は値呼出しなので,手続内で 4 になってもメインプログラムの X は 2 のままです。


答え

イ: X = 2,Y = 6

出典:平成25年度 春期 応用情報技術者試験 午前 問20

平成25年度春期の他の問題