まず結論

科目Bの擬似コード問題は「トレース表」を書きながら解くのが唯一の確実な方法です。全ての変数を列にして、1行ずつ実行するたびに値を書き込む。頭だけで追おうとすると必ず間違えます。これが科目B突破の核心スキルです。

トレース表のイメージ

例:goukei←0 / i を 1 から 3 まで繰り返す / goukei ← goukei + i
i
goukei
初期
0
i=1
1
0+1=1
i=2
2
1+2=3
i=3
3
3+3=6 ✅
変化した値を都度書き込む。変わっていない変数は前の行の値をそのまま引き継ぐ。

トレース表の書き方(手順)

1
登場する変数を全て列挙する
コードを最初に流し読みして変数名を全部書き出す(i, j, tmp, max, count…)
2
表の列に変数名を並べる
「行番号」「実行内容」「変数1」「変数2」…という列の表を紙に書く
3
初期値を1行目に記入する
「←」による代入文で初期値が確定したらすぐに書く
4
1行ずつ実行して変化した変数だけ更新する
変わった値を書き込み、変わっていない変数は前の行の値をそのまま使う
5
ループ終了条件を毎回確認する
ループ条件が偽になった瞬間を見逃さない。そこがループの出口

実例1:フィボナッチ数列

a1 b1 i を 1 から 5 まで繰り返す ca + b ab bc 繰り返し終わり b を表示する
ic = a+ba ← bb ← c
(初期)11
11+1=212
21+2=323
32+3=535
43+5=858
55+8=13813
出力は13(フィボナッチ数列の8番目の値)

実例2:最大値と最大インデックスを求める

a ← {3, 8, 2, 9, 5} maxa[1] maxIdx1 i を 2 から 5 まで繰り返す もし a[i] > max ならば maxa[i] maxIdxi もし終わり 繰り返し終わり maxIdx を表示する
ia[i]a[i]>max?maxmaxIdx
(初期)31
288>3 真82
322>8 偽82
499>8 真94
555>9 偽94
出力は4(最大値9がインデックス4にある)

実例3:二重ループのトレース

count0 i を 1 から 3 まで繰り返す j を 1 から i まで繰り返す countcount + 1 繰り返し終わり 繰り返し終わり count を表示する
ij(範囲)内ループ実行回数count
11〜1(1回)1回1
21〜2(2回)2回3
31〜3(3回)3回6
ポイント:内ループの回数が外ループのiに依存している。1+2+3=6回。このように内ループ境界が変わる二重ループは慎重にトレースする。

🎯 試験での出方

⚠️ よくある間違い

✍️ 確認クイズ

Q1. a←3, b←5として「c←a / a←b / b←c」を実行後のaとbの値はどれか。
✅ 正解は②。c←3(aの値を退避)→a←5(bの値をaに)→b←3(cの値=元のaをbに)。これがtmpを使った変数交換の典型パターン。
Q2. x←1として「x が 100 未満の間, 繰り返す / x ← x × 2」の終了時のxの値はどれか。
✅ 正解は②。1→2→4→8→16→32→64→128。x=64のとき64<100は真でループ実行→x=128。128<100は偽→終了。終了時x=128。
Q3. トレース表で「変化していない変数」はどう記入するか。
✅ 正解は②。変化していない変数は前の行と同じ値のまま。空白にすると読み返したとき混乱するので、値を書くか矢印で示す。表が読みやすくなります。
Q4. 以下のコードで a=10, b=3 のとき、r ← a mod b の値はどれか。「(mod は剰余演算、整数除算)」
✅ 正解は②。「mod」は剰余演算(割り算の余り)。10 ÷ 3 = 商3 余り1。よって10 mod 3 = 1。よく使われるmod演算の例:偶数判定(n mod 2 = 0)、循環インデックス(i mod n)。ユークリッドの互除法でもmod演算が核心です。
Q5. 以下の擬似コードの実行後のresultの値はどれか。「result ← 0 / i を 1 から 5 まで繰り返す / もし i mod 2 = 0 ならば / result ← result + i / もし終わり / 繰り返し終わり」
✅ 正解は②。i mod 2 = 0 は偶数のとき真。i=1(奇数):スキップ、i=2(偶数):result=2、i=3(奇数):スキップ、i=4(偶数):result=6、i=5(奇数):スキップ。1〜5の偶数(2+4)=6。条件付きループはmodと組み合わせた問題が頻出です。

Sponsor Link