平成28年度 春期 応用情報技術者試験 午前 問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 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:イ
- 値呼出しの X は,手続の中で値を変えてもメインプログラムの X には影響しません。
- 参照呼出しの Y は,手続の中で値を変えるとメインプログラムの Y も変わります。
手続 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(= 4)を加えて 6 になります。 -
イ: X = 2,Y = 6
正しい。X は値呼出しなので 2 のまま,Y は参照呼出しなので 6 に変わります。 -
ウ: X = 4,Y = 2
誤り。X は値呼出しなのでメインプログラムの X は変わらず,Y は参照呼出しなので変わります。逆になっています。 -
エ: X = 4,Y = 6
誤り。X は値呼出しなので,メインプログラムの X は 2 のままです。
答え
イ: X = 2,Y = 6
出典:平成28年度 春期 応用情報技術者試験 午前 問20