C言語学習ポータル(無料版) 学習コンテンツ 人間がコンピュータになる訓練 ループをトレースする

🔍 人間がコンピュータになる訓練

ループをトレースする

無料公開版に収録・読む目安 14分

🎯 繰り返しの1周ごとに条件判定・本体・更新を追い、ループ終了後の値まで正しく求められる

トレースの本番はここです。繰り返しが入るとトレース表は一気に縦へ伸びますが、やることは今までと1ミリも変わりません。1行ずつ書くだけです。

1周は3つの部分でできている

繰り返しは、次の3つが順番に回っています。

  1. 条件判定 — 続けるか、抜けるか
  2. 本体 — 中身の処理
  3. 更新 — 次の周に向けて値を変える
int i = 1;
int sum = 0;
while (i <= 3) {
    sum = sum + i;
    i = i + 1;
}

このプログラムを、下のビジュアライザで1ステップずつ追ってみてください。条件判定に戻るたび、i が増えているのが見えます。

🧪 ここはメモリの中身を1ステップずつ追う「メモリビジュアライザ」の場面です(アプリ本体で動きます)。

周回番号の列を足すと迷わない

ループのトレース表には、「何周目か」の列を足すと見通しが良くなります。

周 | 行 | i | sum | 条件
---+----+---+-----+------
 1 |  3 | 1 |  0  | 真
 1 |  4 | 1 |  1  |
 1 |  5 | 2 |  1  |
 2 |  3 | 2 |  1  | 真
 2 |  4 | 2 |  3  |

同じ行番号が何度も出てくるのがループの特徴です。周の列があると、どこを見ているか見失いません。

ビット同じ行が何回も出てくるけど、値は毎回ちがう。そこが面白いところだよ。

最重要: 抜けた瞬間の値

トレース問題でいちばん狙われるのが、ループを抜けたあとの変数の値です。上の例では、i が4になったところで 4 <= 3 が偽になり、ループを抜けます。

つまり終了後の i は3ではなく4です。「3回まわったから3」と答えてしまう人が非常に多い箇所です。条件を偽にした値まで進んでいるからこそ、ループが終わったのだと考えてください。

繰り返しの回数を数え間違える罠

1つずれる間違いは、プログラミングで最も多いバグの一つで、英語圏では「オフ・バイ・ワン誤り」という専用の名前まで付いています。迷ったら数えず、トレース表を3行だけ書く。それが最短の解決法です。

全部書かなくてよい

100周するループを100行書く必要はありません。実務でも次のようにします。

  1. 最初の2〜3周をきちんと書く(始まり方を確かめる)
  2. 途中は「同じことが続く」と判断して飛ばす
  3. 最後の1〜2周と、抜けた直後を必ず書く(終わり方を確かめる)

バグは、たいてい始まりと終わりに潜んでいます。真ん中の繰り返しは、最初の数周が正しければ同じ形が続くだけです。この省略ができるようになると、トレースは驚くほど速くなります。

終わらないループの見つけ方

表を書いていて、何周しても条件の値が変わらないことに気づいたら、それは無限ループです。原因はほぼ決まっていて、更新(i = i + 1)を書き忘れたか、更新の向きが条件と逆かのどちらかです。実行する前に、紙の上で発見できます。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

トレース表とれーすひょう

プログラムを1行ずつ実行したときの、各変数の値の変化を表にまとめたもの。頭の中でコンピュータになりきって処理を追いかける道具にあたる。変数の値がどう変わっていくかを紙の上で追うことで、頭の中の実行イメージがはっきりする。

同じトラックのほかの項目

トレース表とは——実行を目で見る道具トレース表の作り方と書き進め方のルールを覚え、自分で表を用意できるようになる 代入をトレースする代入が「右辺を計算して左辺に上書きする」動作だと理解し、値の推移を正確に追える 分岐をトレースする条件の真偽を判定し、通った道だけをトレース表に残せるようになる バグを見つける思考法——仮説と検証バグの原因を絞り込む手順(再現→範囲を狭める→仮説→1つずつ検証)を身につける ラバーダック・デバッグコードを声に出して説明することで、自分の理解の穴を見つけられるようになる エラーメッセージは敵ではないエラーメッセージの構造を知り、英語のまま読んで対処できるようになる 総仕上げ——紙上プログラム実行代入・分岐・繰り返しが混ざったプログラムを、最後まで自力でトレースできる
‹ 分岐をトレースする バグを見つける思考法——仮説と検証 ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH