CO-S20情報Ⅰ 対策問題

コンピュータとプログラミング思考・計算

次のプログラムを実行したとき、表示される値はどれか。 (1) kazu = 27 (2) kaisu = 0 (3) kazu > 1 の間繰り返す: (4) | kazu = kazu ÷ 3 (5) ⎿ kaisu = kaisu + 1 (6) 表示する(kaisu) ※ ÷は整数の商を求める演算とする。

解答・解説を見る

正解: 1

正答

1

この問題のポイント

条件付き繰り返し(while型)のトレース を問う問題です。「条件が偽になった瞬間に終了」を正しく追えるかがカギです。

解説

「〜の間繰り返す」は、回数が決まっていない繰り返し(while型)です。毎回、繰り返しの先頭で条件(kazu > 1)を確かめ、真なら中身を実行し、偽になったら繰り返しを抜けます。回数指定のfor型と違い、「いつ終わるか」は変数の変化を追わないと分かりません。

kazuとkaisuの変化を表のつもりで1回ずつ追います。

  1. 開始: kazu=27、kaisu=0。条件 27>1 は真 → 実行
  2. 1回目: kazu = 27÷3 = 9、kaisu=1。条件 9>1 は真 → 続行
  3. 2回目: kazu = 9÷3 = 3、kaisu=2。条件 3>1 は真 → 続行
  4. 3回目: kazu = 3÷3 = 1、kaisu=3。条件 1>1 は偽 → 繰り返し終了
  5. (6)で kaisu=3 を表示

27は3を3回掛けた数(3³=27)なので、3で3回割ると1になる——という見方もできます。条件「kazu > 1」は1を含まないため、kazuが1になった時点で終わることに注意してください(1>1は偽)。

この型の問題では「最後の1回を数え忘れる」「条件の境界(>と>=)を読み違える」のが定番のミスです。また、もしループ内でkazuを減らす処理がなければ条件が永遠に真のままの無限ループになります。「何回で終わるか」は必ず変数の変化を表にして数えましょう。

選択肢の確認

1.○ 27→9→3→1 と3回割ったところで条件が偽になる。
2.× 9は1回割ったあとの途中のkazuの値。
3.× 27はkazuの初期値。
4.× 2は最後の1回(3→1)を数え漏らした値。

ここだけは覚えよう

while型は「条件が偽になるまで」 — 変数の変化を表に書き、境界(>か>=か)に注意して数える。

関連問題

CO-S19CO-S21