🔍 人間がコンピュータになる訓練
🎯 条件の真偽を判定し、通った道だけをトレース表に残せるようになる
次は道が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つずつ計算します。
点 >= 80 → 72 >= 80 → 偽点 != 0 → 72 != 0 → 真(!= は「等しくない」)点 >= 60 かつ 点 < 80 → 真 かつ 真 → 真まず変数を今の値に置き換えて、それから比べる。この2段階を口に出すと、勘違いが激減します。
通らなかった行が、いちばん怪しい
分岐のバグには特徴があります。通ってほしい行が通っていないという形で現れるのです。
>= と <= を書き間違えた)> 80 と書き、80点が落ちる)どれも、表を見れば「条件の列がずっと偽」という形で目に見えます。プログラムが黙って何もしないときは、たいていここです。エラーが出ないぶん、かえって気づきにくい種類のバグでもあります。
多段の分岐
else if が連なる形では、上から順に判定して、最初に成り立ったものだけを実行し、残りは見もしないという性質があります。
if (点 >= 80) { 評価 = 'A'; }
else if (点 >= 60) { 評価 = 'B'; }
else { 評価 = 'C'; }点が90のとき、1つ目が真なので 'A' が入り、2つ目の 点 >= 60 は判定すらされません。トレース表にも書きません。この「見もしない」感覚は、条件の順番を間違えたときのバグ(たとえば >= 60 を先に書いてしまう)を見抜く目になります。
プログラムを1行ずつ実行したときの、各変数の値の変化を表にまとめたもの。頭の中でコンピュータになりきって処理を追いかける道具にあたる。変数の値がどう変わっていくかを紙の上で追うことで、頭の中の実行イメージがはっきりする。
値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。