CO-P29|情報Ⅰ 対策問題
次のプログラムは、変数 a を2倍にする計算を4回繰り返しながら、a の値を表示する。実行したとき、表示される値の並びはどれか。 (1) a = 1 (2) i を 1 から 4 まで 1 ずつ増やしながら繰り返す: (3) | a = a × 2 (4) ⎿ 表示する(a)
解答・解説を見る
正解: 1
正答
1
この問題のポイント
表示のタイミング(更新後に表示) を問う問題です。
解説
ループの中の順番は「(3)で a を2倍に更新 →(4)で表示」。つまり毎周、表示されるのは更新した後の値です。この「どの時点の値が表示されるか」がこの問題の核心です。
a の変化を1ステップずつトレースします(初期値 a=1)。
i=1のとき: a = 1×2 = 2 → 2を表示。
i=2のとき: a = 2×2 = 4 → 4を表示。
i=3のとき: a = 4×2 = 8 → 8を表示。
i=4のとき: a = 8×2 = 16 → 16を表示。
よって出力は 2 4 8 16 です。
もし(3)と(4)の順序が逆(表示→更新)なら、出力は「1 2 4 8」——中身は同じ計算でも、行の順序だけで出力が1周分ずれます。共通テストのトレース問題では、この「表示が更新の前か後か」を取り違えるミスが非常に多いので、トレース表に「更新後の値」と「表示した値」を分けて書くのが安全です。
また、出力の 2, 4, 8, 16 は2のべき乗の列です。2倍を繰り返すと指数的に増える——この感覚は、nビットで2のn乗通り、半分にすると log₂n 回で終わる(二分探索)といった情報Ⅰ全体の計算感覚と直結します。
選択肢の確認
1.○ 2倍してから表示するので、更新後の 2 4 8 16 が並ぶ。
2.× 1 2 4 8 は「表示→更新」の順のときの出力。1周ずれている。
3.× 2 4 6 8 は×2ではなく+2にした場合。
4.× 1 2 3 4 はループ変数 i を表示した場合。
ここだけは覚えよう
表示されるのは「その時点」の値 — 更新と表示の順序で出力がずれる — 2倍の繰り返しは2のべき乗の列。