二つの変数 x と y に対して,次の手続を (1) から順に実行する。処理が終了したとき,x の値は幾らになるか。 〔手続〕 (1) x に 2 を代入し,y に 3 を代入する。 (2) y の値から 1 を引いたものを y に代入する。 (3) x の値と y の値を加えたものを x に代入する。 (4) y≠1 なら手続 (2) に戻り,y=1 なら処理を終了する。
平成22年度 秋期 ITパスポート試験 問69
この問題の解説と、これまでの解答の記録です。
問 69
不正解ア
4 は 1 周目が終わった時点 (x=4, y=2) の途中経過の値です。この時点では y=2 で 1 ではないため、(4) の判定により手続 (2) へ戻り、もう 1 周実行されます。ループの終了条件 y=1 を確認せずに 1 周で打ち切ってしまうと 4 を選んでしまいます。
- イ
正解 手順を 1 行ずつトレースするだけで答えが出る問題です。(1) で x=2、y=3 になります。〔1 周目〕(2) で y は 3-1=2、(3) で x は 2+2=4、(4) は y=2 で 1 ではないので (2) に戻ります。〔2 周目〕(2) で y は 2-1=1、(3) で x は 4+1=5、(4) は y=1 になったので処理を終了します。終了時点の x は 5 なので、正解は「イ」です。ポイントは (4) の判定が (3) の後にあるため、y が 1 になるまでループが 2 回まわり、x に y=2 と y=1 の 2 つが順に加算される点です。表にすると 〔x, y〕は (2,3) → (4,2) → (5,1) と変化します。
不正解ウ
7 は手続 (2) と (3) の順序を取り違え、先に加算してから y を減らした場合の値です。その誤った順序では x=2+3=5、y=2 → x=5+2=7、y=1 で終了となり 7 になります。実際の手続では毎回「y を 1 減らしてから加算する」ので、加算される y は 3 ではなく 2 と 1 です。
不正解エ
8 は初期値 y=3 も加算に含めてしまった場合の値 (2+3+2+1=8) です。手続 (3) が実行されるのは必ず (2) で y を 1 減らした後なので、y=3 のまま加算される機会はありません。x に加えられるのは y=2 と y=1 の 2 回だけです。
- 繰返し (ループ) 問題は、変数ごとの値の変化を 1 行ずつ表にして追跡するのが確実。ここでは〔x, y〕= (2,3) → (4,2) → (5,1) と辿れば答えが出る。
- 終了条件の判定位置に注意する。判定 (4) が処理 (2)(3) の後ろにあるため、本体は必ず 1 回は実行され、条件 y=1 が成立するまで繰り返される (後判定型の繰返し)。代入は右辺を計算してから左辺の変数を上書きする、という代入の基本も押さえる。