🇯🇵 日本語

STEP 3 総合復習 ― if文・比較/論理演算子・switch文

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

① 要点チートシート

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

🌳 if / else if / else の骨格

if (score >= 80) {
    printf("優\n");
} else if (score >= 60) {
    printf("良\n");
} else {
    printf("再履修\n");
}
  • 条件は 上から順 に評価。最初に真になった分岐に入ったら、残りはスキップ
  • else は 「上のどれにも当たらない時」

⚖️ 比較演算子

記号意味
==等しいa == 5
!=等しくないa != 5
<より小さいa < 5
>より大きいa > 5
<=以下a <= 5
>=以上a >= 5
  • 結果は 真(1)偽(0)
  • 代入 = と比較 == を間違えやすい

🔗 論理演算子(条件の組合せ)

記号意味真になる条件
&&かつ (AND)a>0 && a<10両方真
||または (OR)a==0 || a==9どちらか真
!否定 (NOT)!(a==0)偽を真に
  • 0以上 かつ 10未満」は 0 <= a && a < 10
  • 数学の 0 <= a < 10そのまま書けない

🔀 switch 文の骨格

switch (n) {
    case 1:
        printf("one\n");
        break; // 必須!
    case 2:
        printf("two\n");
        break;
    default:
        printf("other\n");
}
  • case ごとに break を書かないと、下の case に流れる(fallthrough)
  • どの case にも当たらない時は default に入る
  • 整数(int, char)の 等値判定だけ 使える

🤔 if vs switch の使い分け

  • 範囲 の条件(score >= 80 など)→ if
  • 等値の多分岐(n が 1, 2, 3 のどれか)→ switch が読みやすい
  • switch は 整数 / 文字 しか分岐できない(小数・文字列はNG)

② コード読み取り 6問

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

Q1. else if の連鎖

int score = 85;
if (score >= 90)      printf("S\n");
else if (score >= 80) printf("A\n");
else if (score >= 70) printf("B\n");
else                  printf("C\n");

出力は?

S
A
A B C
B
解説: 上から順にチェック。
85 >= 90 → 偽
85 >= 80真! A を出力して、ここで終了
③ 残りの分岐はスキップ(B も出ない)
A

Q2. = と == の取り違え

int a = 3;
if (a = 0) printf("A\n");
else        printf("B\n");
printf("a=%d\n", a);

出力は?

A
a=3
B
a=3
A
a=0
B
a=0
解説: a = 0代入。a に 0 が入ったうえで、その式の値(0)が条件として評価される。
0 は なので else 側へ → B
その後 a の中身は 0 になっているので a=0 と表示される。
本当は a == 0 と書きたかった、というよくあるバグ。

Q3. 範囲の論理結合

int a = 7;
if (0 <= a && a < 10) printf("in\n");
else                       printf("out\n");

出力は?

in
out
何も出ない
コンパイルエラー
解説: a = 7 のとき。
0 <= 7 → 真
7 < 10 → 真
③ 真 && 真 →
in
0 <= a < 10 と書くと意味が違うので注意(C言語では (0 <= a) < 10 と解釈される)。

Q4. switch の break 忘れ

int n = 2;
switch (n) {
    case 1: printf("A ");
    case 2: printf("B ");
    case 3: printf("C ");
    default: printf("D ");
}

出力は?

B
B C D
A B C D
B D
解説: n = 2 なので case 2 から実行が始まる。
各 case に break が無い ため、下に流れ続ける(fallthrough)。
case 2 → case 3 → default 全部実行されて B C D
意図せぬ fallthrough を防ぐには、各 case の最後に必ず break;

Q5. else の係り受け

int a = 0, b = 0;
if (a > 0)
    if (b > 0) printf("both+\n");
    else        printf("a+ b不+\n");
else            printf("a not+\n");

出力は?

both+
a+ b不+
a not+
何も出ない
解説: a = 0 なので最初の if (a > 0) は偽 → 一番外の else へ。
else は 一番近い if に係るので、ここでは外側の if に対応。
a not+
インデントが紛らわしいが、ぶら下がり else の規則どおり「外側 if の else」が実行される。
誤解を防ぐには 必ず { } を付ける

Q6. switch の default だけが当たる

int n = 5;
switch (n) {
    case 1: printf("one"); break;
    case 2: printf("two"); break;
    default: printf("other");
}

出力は?

one
two
other
何も出ない
解説: n = 5 はどの case にも当たらないので default に入る。
other
どの case にも当たらない時の 受け皿 として default を用意しておくと安全。

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

読みながら「やったことある…」と思ったら、その項目はもう一度元のページに戻って確認しておきましょう。
  1. 1
    代入 = と比較 == を取り違えた
    if (a = 0) は「a に 0 を代入」した上で「条件が偽(0)」になる。比較は必ず ==
  2. 2
    数学の 0 ≤ a < 10 をそのまま書いた
    C言語では 0 <= a && a < 10 と分けて書く必要がある。0 <= a < 10 は意味が違う。
  3. 3
    switch の case で break を書き忘れた
    次の case に そのまま流れ込む(fallthrough)。意図しない出力やバグの温床。各 case の最後に break;
  4. 4
    else が思ったのと別の if に係った
    else は 一番近い if に係る。{ } を省略すると意図と違う構造になりがち。常に { } を付ける のが安全。
  5. 5
    &&|| の優先順位を逆に覚えた
    && の方が || より 優先度が高いa==1 || a==2 && b==3a==1 || (a==2 && b==3) と解釈される。迷ったらカッコで明示。
  6. 6
    境界の <<= を間違えた
    「未満」と「以下」の違い。問題文を もう一度読む のが対策。
  7. 7
    switch に小数や文字列を渡した
    switch の式は 整数(int / char) しか受け取れない。double や 文字列(char配列)の分岐は if で書く。

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

特定の項目で迷ったら、対応する元ページにすぐ戻れるよう一覧にしました。
第12回 if 文分岐の基本構造(if/else if/else)が曖昧な時に 第13回 比較・論理演算子== や && の意味と優先順位の確認に 第14回 確認問題(if)類題で別アングルから理解を確認 第15回 switch 文case と break の動きが曖昧な時に チートシート(早見表)演算子優先順位を1ページで再確認