平成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 の中の動きを追います。
- X = X + Y = 2 + 2 = 4(手続内の X だけが 4 になる)
- 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