09_if文の基本構文

09-1 はじめに

C言語では「構造化プログラミング」という考え方に基づいてプログラムを組み立てます。 その基本構造は以下の3つです:

  1. 順次(上から順に実行)
  2. 選択(条件によって処理を分岐)
  3. 繰り返し(条件によって繰り返す)

ここまでは「順次処理」を中心に学んできましたが、今回は「選択処理」つまり if 文を使った条件分岐の方法を学びます。


09-2 if文の基本

if (条件式) {
    // 条件が真(true)のときに実行される処理
}

インデントの重要性

if 文の中で特に重要なのが インデント(字下げ) です。インデントを正しく使うことで、どの処理が if の条件に対応しているかが分かりやすくなり、読みやすくバグの少ないコードになります。

私たちはプログラムという「平面」の中で、立体的な構造(ブロック構造)を表現しようとしています。インデントはそれを視覚的に伝えるための、先人の知恵による約束ごとです。

とても重要な習慣なので、いつも正しくインデントされたコードを書くよう心がけてください。


09-3 比較演算子(詳しく)

C言語の条件式では、以下の比較演算子を使って数値の大小や一致を判定します。

演算子 意味 結果
== 等しい x == 5 xが5なら真
!= 等しくない x != 0 xが0以外なら真
> より大きい x > 10 xが10より大きい
< より小さい x < 3 xが3未満
>= 以上 x >= 70 70以上
<= 以下 x <= 100 100以下

🔸 C言語では「偽=0、真=0以外の値」として扱われます。 条件式が 0 であれば「偽」、0 以外であれば「真」と判断されます。


09-4 if文の例

以下は score が 70 以上かどうかで合格かどうかを判定する例です。

int score = 80;
if (score >= 70) {
    printf("合格です\n");
}

波かっこ {} の内側は「ブロック」と呼ばれ、1つのまとまった処理のかたまりです。 そのブロックの中であることを視覚的にわかりやすく示すためにインデント(字下げ)を行う必要があります

これは、私たちが平面上に立体的な構造を描こうとする工夫であり、プログラムを読みやすく保つための重要なルールです。


09-5 波かっこを省略できる場合

if (x > 0)
    printf("正の数です\n");

1文だけの場合は省略可能ですが、初心者のうちは波かっこを書く習慣をつけましょう。


09-6 else を使う

if の条件が偽だった場合に、代わりに実行する処理を指定するために else を使います。

if (score >= 70) {
    printf("合格\n");
} else {
    printf("不合格\n");
}

09-7 else if の使用(複数条件)

複数の条件を順に評価して、それぞれに対応する処理を行いたいときには else if を使います。

if (score >= 90) {
    printf("A評価\n");
} else if (score >= 70) {
    printf("B評価\n");
} else {
    printf("C評価\n");
}

09-8 簡単な演習問題

問題1:得点に応じた評価

次の条件に従って、得点(score)を入力し、評価を出力するプログラムを書きなさい。 - 90点以上 → A - 70点以上 → B - それ未満 → C

ヒント if - else if - else を使用

正解例

#include <stdio.h>
int main(void) {
    int score;
    scanf("%d", &score);
    if (score >= 90) {
        printf("A\n");
    } else if (score >= 70) {
        printf("B\n");
    } else {
        printf("C\n");
    }
    return 0;
}

問題2:年齢で区分け

年齢(age)を入力し、以下の条件に従って区分を表示するプログラムを書きなさい。 - 12歳以下 → 子ども - 13~19歳 → 未成年 - 20歳以上 → 大人

ヒント 範囲に注意しながら条件分岐

正解例

#include <stdio.h>
int main(void) {
    int age;
    scanf("%d", &age);
    if (age <= 12) {
        printf("子ども\n");
    } else if (age <= 19) {
        printf("未成年\n");
    } else {
        printf("大人\n");
    }
    return 0;
}

問題3:波かっこの省略とバグ

以下のコードは意図通り動作しません。どのように修正すべきかを説明し、正しいプログラムを書きなさい。 以下のコードは意図通り動きますか?意図通りでなければ修正してください。

if (x > 0)
    printf("正の数\n");
    printf("処理終了\n");

正解例

意図せず printf("処理終了\n") が常に実行されてしまう。 修正:

if (x > 0) {
    printf("正の数\n");
    printf("処理終了\n");
}


09-9 複合条件(論理演算子)

演算子 意味
&& AND(かつ) x >= 0 && x <= 100
`| ` OR(または) `x < 0 x > 100`
! NOT(否定) !(x == 0)

09-10 複合条件の例

if (age >= 12 && height >= 140) {
    printf("乗車可能\n");
} else {
    printf("乗車できません\n");
}

09-11 演習問題(複合条件)

問題4:年齢と身長で乗車可否

年齢(age)と身長(height)を入力し、次の条件に従って乗車可否を判定するプログラムを書きなさい。 - 年齢12歳以上 かつ 身長140cm以上 → 乗車可能

ヒント && を使う

正解例

#include <stdio.h>
int main(void) {
    int age, height;
    scanf("%d %d", &age, &height);
    if (age >= 12 && height >= 140) {
        printf("乗車可能\n");
    } else {
        printf("乗車できません\n");
    }
    return 0;
}

問題5:0~100の範囲チェック

整数値(x)を入力し、0〜100の範囲にあるかどうかをチェックして表示するプログラムを書きなさい。 - 範囲外 → 「無効な値」 - 範囲内 → 入力値を表示

ヒント x < 0 || x > 100

正解例

#include <stdio.h>
int main(void) {
    int x;
    scanf("%d", &x);
    if (x < 0 || x > 100) {
        printf("無効な値です\n");
    } else {
        printf("入力値は %d です\n", x);
    }
    return 0;
}


09-12 補足:短絡評価(ショートサーキット)

if (x != 0 && 10 / x > 1) {
    // xが0でないときだけ除算される
}

x != 0 が偽であれば、10 / x は評価されません。 → 安全に実行を制御できる

if (x == 0 || 100 % x == 0) {
    // xが0なら右側は評価されない
}

短絡評価は安全性や効率性を保つための重要な特性です。