CO-S32情報Ⅰ 対策問題

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

次のプログラムを実行したとき、表示される値はどれか。 (1) kazu = 1 (2) kaisu = 0 (3) kazu < 100 の間繰り返す: (4) | kazu = kazu × 2 (5) ⎿ kaisu = kaisu + 1 (6) 表示する(kaisu)

解答・解説を見る

正解: 1

正答

1

この問題のポイント

倍々に増える反復のトレース を問う問題です。最後の1回(64→128)を数え忘れないことがカギです。

解説

「kazu < 100 の間繰り返す」は、毎回ループの先頭で条件を確かめ、真なら実行、偽なら終了するwhile型の繰り返しです。kazuは毎回2倍になるので、1, 2, 4, 8, … と2のべき乗の列をたどります。

kazuとkaisuを1回ずつ追います。

  1. 開始: kazu=1、kaisu=0。1<100は真 → 実行
  2. 1回目: kazu=2、kaisu=1。2<100は真
  3. 2回目: kazu=4、kaisu=2。4<100は真
  4. 3回目: kazu=8、kaisu=3。8<100は真
  5. 4回目: kazu=16、kaisu=4。16<100は真
  6. 5回目: kazu=32、kaisu=5。32<100は真
  7. 6回目: kazu=64、kaisu=6。64<100はまだ真 → もう1回実行
  8. 7回目: kazu=128、kaisu=7。128<100は偽 → 終了
  9. 表示: kaisu=7

最大の落とし穴は6回目の後です。kazu=64はまだ100未満なので、ループはもう1回実行されます。「64で止めて6回」と答えるのが典型的なミスで、条件判定はkazuを更新したの値で行われる点に注意してください。

2倍ずつの増加は2のべき乗そのもので、2⁷=128が初めて100を超えます。「何回で100を超えるか」は対数の感覚(log₂100≒6.6、切り上げて7)につながり、二分探索が「何回半分にすれば1になるか」の裏返しです。共通テストの回数を問う問題は、この表を書く方法で確実に得点できます。

選択肢の確認

1.○ 2⁷=128で初めて100以上になるので7回。
2.× 2⁶=64はまだ100未満なので、ループはもう1回まわる。
3.× 100は条件式に書かれた値そのもので回数ではない。
4.× 128は終了時のkazuの値で、回数ではない。

ここだけは覚えよう

倍々の反復は2のべき乗の列 — 「条件がまだ真か」を毎回確認し、最後の1回を数え忘れない。

関連問題

CO-S31CO-S33