情報Ⅰプログラミング問題|トレース・条件分岐・繰り返しを練習

情報Ⅰのプログラミングは、コードを暗記するより、変数の値を一行ずつ追い、条件が真か偽かを判定し、繰り返しごとの状態変化を表にする練習が重要です。このページでは、実際に手を動かして解く問題を中心にします。

問題1:代入の順序を追う

a ← 4
b ← 2
a ← a + b
b ← a * 2

最後のaとbはいくつでしょう。

1行目でa=4、2行目でb=2。3行目でa=6。4行目では更新後のa=6を使うのでb=12です。

答え:a=6、b=12。古いa=4を使ってb=8にしないようにします。

問題2:条件分岐

x ← 7
if x mod 2 = 0
    result ← "even"
else
    result ← "odd"
end

7を2で割った余りは1なので条件は偽です。答えはoddです。

mod は余りを扱う演算として、偶数・奇数の判定によく使われます。

問題3:andとor

a ← 5
b ← -2

if a > 0 and b > 0
    result ← 1
else
    result ← 0
end

a>0は真、b>0は偽です。andは両方が真のときだけ真なので、結果は0です。orならどちらか一方が真なら条件全体が真になります。

問題4:for文の合計

total ← 0
for i = 1 to 5
    total ← total + i
end
i total
1 1
2 3
3 6
4 10
5 15

答えは15です。total は「これまでの合計」を保存する変数です。

問題5:条件付きで数える

count ← 0
data = [3, 8, 5, 10, 2]

for each x in data
    if x >= 6
        count ← count + 1
    end
end

6以上なのは8と10の2個です。答えはcount=2です。

このタイプでは、count は値の合計ではなく条件を満たした個数を保存しています。

問題6:最大値探索

data = [4, 9, 3, 12, 7]
max ← data[0]

for each x in data
    if x > max
        max ← x
    end
end

maxの変化は 4 → 9 → 12。答えは12です。

「現在までの最大値」という役割を理解すれば、データが変わっても同じアルゴリズムを追えます。

問題7:入れ子の条件分岐

score ← 72
if score >= 80
    grade ← "A"
else
    if score >= 60
        grade ← "B"
    else
        grade ← "C"
    end
end

72は80以上ではないので最初のifは偽。次の72>=60は真なのでBです。

最初から全部の条件を同時に見るのではなく、実際に通った枝だけを追うと混乱しません。

問題8:繰り返しの回数

x ← 1
for i = 1 to 4
    x ← x * 2
end

初期値1から 1 → 2 → 4 → 8 → 16 となります。答えは16です。

「4回だから2×4=8」としないようにします。同じ更新を繰り返すとき、前回の結果を次回に使います。

問題9:平均を求める

data = [6, 8, 10, 12]
sum ← 0
for each x in data
    sum ← sum + x
end
avg ← sum / 4

sum=36、avg=9です。

ここでは「合計を作る処理」と「要素数で割る処理」を分けます。

問題10:条件を変えると答えはどう変わるか

問題5の条件を x >= 6 から x > 6 に変えます。

データ [3,8,5,10,2] には6がないので、答えは同じ2です。もしデータに6が含まれていれば結果は変わります。

記号一つの変更がどのデータに影響するかを考えるのがポイントです。

よくある誤りは頭の中だけで実行すること

コードが短いと「見れば分かる」と思いがちですが、更新が3回以上あると古い値を使うミスが増えます。

問題用紙に 行番号|変数a|変数b|条件結果 のような表を書きます。

書く量を増やすことが目的ではなく、状態を外に出して混同を防ぐことが目的です。

練習11:自分でトレース表を作る

n ← 5
result ← 1
for i = 1 to n
    result ← result * i
end

i=1から5まで、1→2→6→24→120と変わります。答えは120です。

このコードが何を計算しているか、一文で説明してみてください。「1からnまでを順に掛けた積」です。

値が同じでも処理の意味は同じとは限らない

二つのコードがたまたま同じ入力で同じ答えを出しても、条件や更新規則が違えば別のアルゴリズムかもしれません。

一つのテストデータだけで「同じプログラム」と判断せず、条件を変えた入力でも動きを比べます。

問題12:入れ替え処理は一時変数が必要なことがある

二つの値aとbを入れ替えたいとします。

a ← 3
b ← 8
temp ← a
a ← b
b ← temp

この順なら最後はa=8、b=3です。

もし

a ← b
b ← a

と書くと、最初の代入でaが8になり、その後bにも8が入ってしまいます。

上書きされる前の値をどこかへ保存する必要があるかを確認することも、状態追跡の一部です。

次は「値」だけでなく「役割」を答える

トレース問題が解けたら、変数ごとに、カウンタ、合計、最大値、条件を満たした個数、一時的な値などの役割を書きます。

コード中の数字や変数名が変わっても、同じ役割を持つ変数と更新パターンを見抜くことが、初見問題への対応につながります。

参考資料

  • 文部科学省「高等学校学習指導要領 情報編」
おすすめの記事