IPA過去問ドリル

平成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; (注:本サイトでは原問題の表を文字表記に変換しています)

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

正解:イ

解説

add(X,Y)内でX=X+Y(4)となりますが,Xは値呼出しなのでこの変更はメインのXには反映されず,メインのXは2のままです。Yは参照呼出しなので,Y=X+Y(手続内のX=4とメインのYの現在値2の和=6)がメインのYに反映され,最終的にY=6になります。

選択肢ごとの解説

  • 誤り。Y=4は手続内のXへの加算だけを行った場合の値で,2回目の代入Y=X+Yの計算が反映されていません。
  • 正しい。値呼出しのXはメインに影響せずX=2のまま,参照呼出しのYは手続内でY=4+2=6に更新されメインにも反映されます。
  • 誤り。X=4はメインのXにも変更が反映されると誤解した場合の値で,値呼出しの性質と矛盾します。
  • 誤り。X=4,Y=6はXも書き換わると誤解した場合の値で,値呼出しであるXがメインに影響しない点を見落としています。
応用情報技術者の過去問を演習モードで解く