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

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

分岐をトレースする

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

🎯 条件の真偽を判定し、通った道だけをトレース表に残せるようになる

次は道が2つに分かれる形、分岐のトレースです。ここでトレース表の書き方に1つ工夫を加えます。

条件の結果を列に足す

分岐があるプログラムでは、変数の値だけでなく「条件がどう判定されたか」を残します。列を1つ増やして、真(成り立った)か偽(成り立たなかった)かを書きましょう。

int 点 = 72;
if (点 >= 80) {
    合格 = 1;
} else {
    合格 = 0;
}

※ 実際のC言語では変数名に日本語は使いませんが、ここでは読みやすさを優先しています。

トレース表はこうなります。

行 | 点 | 合格 | 条件 | 出力
---+----+------+------+-----
 1 | 72 | ー  |      |
 2 | 72 | ー  | 偽   |
 5 | 72 | 0   |      |

3行目と4行目がないことに注目してください。条件が偽だったので、合格 = 1; の行は実行されていません。実行されていない行は、表に書きません。これがルール3です。

ビット表に残っている行が、実際に通った道そのものなんだ。地図に足跡をつけていく感じだね。

よくある間違い: 両方書いてしまう

初心者のトレース表を見ると、if と else の両方の行が書かれていることがあります。気持ちは分かります。目に入っているからです。

ですが機械は、片方しか実行しません。両方書いてしまうと、実際には起きない値の変化が表に残り、そのあとの行が全部ずれます。「見えているもの」ではなく「実行されたもの」だけを書く。この線引きが分岐トレースの肝です。

条件の判定を丁寧にやる

条件そのものも、あわてず1つずつ計算します。

まず変数を今の値に置き換えて、それから比べる。この2段階を口に出すと、勘違いが激減します。

通らなかった行が、いちばん怪しい

分岐のバグには特徴があります。通ってほしい行が通っていないという形で現れるのです。

どれも、表を見れば「条件の列がずっと偽」という形で目に見えます。プログラムが黙って何もしないときは、たいていここです。エラーが出ないぶん、かえって気づきにくい種類のバグでもあります。

多段の分岐

else if が連なる形では、上から順に判定して、最初に成り立ったものだけを実行し、残りは見もしないという性質があります。

if (点 >= 80) { 評価 = 'A'; }
else if (点 >= 60) { 評価 = 'B'; }
else { 評価 = 'C'; }

点が90のとき、1つ目が真なので 'A' が入り、2つ目の 点 >= 60 は判定すらされません。トレース表にも書きません。この「見もしない」感覚は、条件の順番を間違えたときのバグ(たとえば >= 60 を先に書いてしまう)を見抜く目になります。

要点まとめ

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

この項目に出てくる用語

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

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

変数へんすう

値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。

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

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

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

完全版(BOOTH)を見る

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

Web版 / BOOTH