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

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

代入をトレースする

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

🎯 代入が「右辺を計算して左辺に上書きする」動作だと理解し、値の推移を正確に追える

まずは一番やさしい形、代入だけのプログラムをトレースします。ここを完璧にしておくと、あとがずいぶん楽になります。

代入は「上書き」である

C言語の = は、数学のイコールではありません。右側を計算して、左側の箱に入れるという命令です。読むときは右から左へ、と覚えてください。

int a = 3;
a = 5;

2行目のあと、a の値は5です。3はどこかに残っているのではなく、消えています。箱に入るものは常に1つだけ。これが変数の基本的な性質です。

自分自身を使う代入

初心者がつまずく形がこれです。

a = a + 1;

数学として読むと成り立たない式ですが、命令として読めば何も不思議はありません。

  1. まず右辺を計算する(今の a が3なら 3 + 1 で 4)
  2. その結果を左辺の a に入れる(a が4になる)

右辺の a は「古い値」、左辺の a は「新しい入れ物」です。この順番さえ守れば、絶対に間違えません。

ビット右を計算してから、左に入れる。この順番だけ覚えれば大丈夫だよ。

動かして確かめる

下のビジュアライザで、1ステップずつ進めてみてください。行が進むたびに、箱の中身が書き換わっていく様子が見えます。

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

進めながら、次の行を実行する前に自分の答えを口に出すのがおすすめです。当たれば理解できている、外れればそこが弱点です。ただ眺めるのと、予想してから確かめるのとでは、身につき方がまったく違います。

トレース表で書くとこうなる

int a = 3; のあとに a = a + 1; を実行した場合をトレース表にすると、変化が一目で分かります。

行 | a | 説明
---+---+--------------------------
 1 | 3 | aが作られ、3が入る
 2 | 4 | 右辺 3+1 を計算して代入

たった2行ですが、この「1行進むごとに1行書く」動作が全部の土台です。変数が5個に増えても、ループが100周しても、やることは同じです。

古典的な難問: 値の交換

2つの変数の中身を入れ替えたい、という場面を考えます。素直にこう書くと失敗します。

a = b;
b = a;

a が3、b が7のとき、1行目で a は7になります。すると2行目の右辺 a はもう7なので、b にも7が入ります。3が消えてしまいました。上書きは取り消せないからです。

正しくは、一時的な置き場をもう1つ用意します。

tmp = a;
a = b;
b = tmp;

これは、両手がふさがっている人が物を持ち替えるとき、いったん机に置くのと同じです。この形は今後あらゆる場面で出てくる定番なので、トレース表で必ず自分の手で確認しておいてください。ちなみに、なぜ失敗するのかを説明できるようになると、代入の理解は完成です。「上書きされた値は取り戻せない」——この一文がすべての理由になっています。

要点まとめ

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

この項目に出てくる用語

変数へんすう

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

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

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

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

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

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

完全版(BOOTH)を見る

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

Web版 / BOOTH