🇯🇵 日本語

STEP 2 総合復習 ― 算術演算子・代入・インクリメント

第8〜11回までの要点を チートシート でおさらいし、コード読み取り6問「よくあるミス」チェックリスト で定着度を確認します。

① 要点チートシート

STEP 2 で押さえておきたい要点を、表で一気に 見直しましょう。

🧮 算術演算子の基本

記号意味結果
+足し算3 + 25
-引き算3 - 21
*掛け算3 * 26
/割り算7 / 23
%あまり7 % 21
  • 優先順位は * / % が +/- より先
  • カッコ ( ) で順序を明示できる

⚠️ 整数 ÷ 整数 = 整数(切り捨て)

printf("%d", 7 / 2);       // 3 (小数は消える)
printf("%f", 7.0 / 2);     // 3.500000
printf("%f", (double)7 / 2); // 3.500000 (キャスト)
  • 片方を実数に すれば実数除算になる
  • キャスト (double)x で型を強制変換

🔄 短縮代入

短縮展開
a += 5a = a + 5
a -= 5a = a - 5
a *= 5a = a * 5
a /= 5a = a / 5
a %= 5a = a % 5
  • 変数自身を更新する」典型パターン

⏫ インクリメント / デクリメント

int a = 5;
a++;   // a = 6 (a に 1 を足す)
a--;   // a = 5 (a から 1 を引く)

// 前置 vs 後置(式の中で違う)
int x = 5, y;
y = x++; // y=5, x=6 (y に入れた "後" で x を増やす)
y = ++x; // y=7, x=7 ("先" に増やしてから y に入れる)
  • 単独行 a++; なら前置・後置どちらでも同じ
  • 式の中で使うとき だけ前置・後置の違いに注意

🐞 printf デバッグの基本

int a = 10, b = 3;
printf("a=%d b=%d\n", a, b);
int avg = (a + b) / 2;
printf("avg=%d\n", avg); // 期待:6.5 結果:6 ←整数除算!
  • 「思った値と違う」と感じたら その手前で値を出す
  • 変数名 + 値 をセットで出すと追いやすい

② コード読み取り 6問

頭の中で実行 してから選択肢をクリック。間違えても解説を読めば必ず腑に落ちます。

Q1. 整数同士の割り算

printf("%d\n", 17 / 5);

出力は?

3.4
3
4(四捨五入)
3.400000
解説: 整数 ÷ 整数 は 整数。小数点以下は 切り捨て される。
17 / 5 は数学的には 3.4 だが、C言語では 3 になる(四捨五入ではない)。
小数点以下が欲しければ、片方を実数にする:17.0 / 5 または (double)17 / 5

Q2. キャストで実数除算

int a = 17, b = 5;
printf("%f\n", (double)a / b);

出力は?

3.000000
3.400000
3
コンパイルエラー
解説: (double)a で a が 17.0 として扱われ、続く割り算は実数除算に。
17.0 / 5 = 3.4%f なので 3.400000 と表示される。
キャストの優先順位は通常の演算子より高いので、(double)a / b((double)a) / b の意味。

Q3. あまり (%) を使った判定

int n = 17;
printf("%d %d\n", n / 5, n % 5);

出力は?

3 2
3.4 0
3 5
2 3
解説: n / 5 は商(整数)で 3n % 5 は余りで 2
17 = 5 × 3 + 2 という関係。% は「割り切れるかどうかの判定」によく使われる(偶数判定 n % 2 == 0 など)。

Q4. 短縮代入

int a = 10;
a += 5;
a *= 2;
printf("%d\n", a);

出力は?

25
30
20
15
解説: 上から順に追う。
① a = 10
② a += 5 → a = a + 5 = 15
③ a *= 2 → a = a * 2 = 30
30

Q5. 後置インクリメント

int x = 5;
int y = x++;
printf("x=%d y=%d\n", x, y);

出力は?

x=5 y=6
x=6 y=5
x=6 y=6
x=5 y=5
解説: x++後置(後で増やす)。
y = x++ → 先に y に x の値(5)を入れて、その後 x を 1 増やす
② y = 5、x = 6 になる
前置 ++x なら先に x を増やすので y も 6 になる。

Q6. 演算子の優先順位

printf("%d\n", 2 + 3 * 4);

出力は?

20
14
9
24
解説: *+ より 優先順位が高い(数学と同じ)。
① 3 * 4 = 12
② 2 + 12 = 14
20 にしたければ (2 + 3) * 4 とカッコで囲む。

③ よくあるミス・難所チェックリスト

読みながら「やったことある…」と思ったら、その項目はもう一度元のページに戻って確認しておきましょう。
  1. 1
    整数同士の割り算で小数が消えた
    7 / 23。小数を残したいなら 7.0 / 2(double)x / y でキャストする。
  2. 2
    平均を整数で計算してしまった
    (a + b) / 2 で a, b が int だと答えも int。(double)(a + b) / 2 のようにキャストする。
  3. 3
    前置 ++x と後置 x++ の違いを誤った
    単独行ならどちらも同じだが、式の中で使う と先に増やすか後で増やすかで結果が変わる。迷ったら別行に分ける。
  4. 4
    演算子の優先順位を取り違えた
    2 + 3 * 414(* が先)。カッコで明示 すれば事故が減る。
  5. 5
    代入 = と比較 == を取り違えた
    if 文の条件で if (x = 5) と書くと「x に 5 を代入し、結果が 0 でないので真」になる。比較は ==
  6. 6
    printf で表示する変数の順番を間違えた
    printf("a=%d b=%d", b, a) のように、書式と引数の順を取り違えて値が入れ替わるミス。
  7. 7
    printf デバッグの後始末を忘れた
    デバッグ用 printf を消さずに残すと、本番出力が汚くなる。commit 前に必ず確認

④ 戻るページ ― つまずいたらここに戻る

特定の項目で迷ったら、対応する元ページにすぐ戻れるよう一覧にしました。
第8回 算術演算子整数除算・キャスト・優先順位が曖昧な時に 第9回 確認問題(算術)類題で別アングルから理解を確認 第10回 代入・インクリメント+= や ++ の動きが曖昧な時に 第11回 printf で変数を追う「期待と違う」を切り分けたい時に チートシート(早見表)演算子優先順位を1ページで再確認