C言語では「構造化プログラミング」という考え方に基づいてプログラムを組み立てます。 その基本構造は以下の3つです:
ここまでは「順次処理」を中心に学んできましたが、今回は「選択処理」つまり if 文を使った条件分岐の方法を学びます。
if (条件式) {
// 条件が真(true)のときに実行される処理
}
if 文の中で特に重要なのが インデント(字下げ) です。インデントを正しく使うことで、どの処理が if の条件に対応しているかが分かりやすくなり、読みやすくバグの少ないコードになります。
私たちはプログラムという「平面」の中で、立体的な構造(ブロック構造)を表現しようとしています。インデントはそれを視覚的に伝えるための、先人の知恵による約束ごとです。
とても重要な習慣なので、いつも正しくインデントされたコードを書くよう心がけてください。
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 以外であれば「真」と判断されます。
以下は score が 70 以上かどうかで合格かどうかを判定する例です。
int score = 80;
if (score >= 70) {
printf("合格です\n");
}
波かっこ {} の内側は「ブロック」と呼ばれ、1つのまとまった処理のかたまりです。
そのブロックの中であることを視覚的にわかりやすく示すためにインデント(字下げ)を行う必要があります。
これは、私たちが平面上に立体的な構造を描こうとする工夫であり、プログラムを読みやすく保つための重要なルールです。
if (x > 0)
printf("正の数です\n");
1文だけの場合は省略可能ですが、初心者のうちは波かっこを書く習慣をつけましょう。
if の条件が偽だった場合に、代わりに実行する処理を指定するために else を使います。
if (score >= 70) {
printf("合格\n");
} else {
printf("不合格\n");
}
複数の条件を順に評価して、それぞれに対応する処理を行いたいときには else if を使います。
if (score >= 90) {
printf("A評価\n");
} else if (score >= 70) {
printf("B評価\n");
} else {
printf("C評価\n");
}
次の条件に従って、得点(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;
}
年齢(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;
}
以下のコードは意図通り動作しません。どのように修正すべきかを説明し、正しいプログラムを書きなさい。 以下のコードは意図通り動きますか?意図通りでなければ修正してください。
if (x > 0)
printf("正の数\n");
printf("処理終了\n");
正解例
意図せず printf("処理終了\n") が常に実行されてしまう。
修正:
if (x > 0) {
printf("正の数\n");
printf("処理終了\n");
}
| 演算子 | 意味 | 例 | |||
|---|---|---|---|---|---|
&& |
AND(かつ) | x >= 0 && x <= 100 |
|||
| `| | ` | OR(または) | `x < 0 | x > 100` | |
! |
NOT(否定) | !(x == 0) |
if (age >= 12 && height >= 140) {
printf("乗車可能\n");
} else {
printf("乗車できません\n");
}
年齢(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;
}
整数値(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;
}
if (x != 0 && 10 / x > 1) {
// xが0でないときだけ除算される
}
x != 0 が偽であれば、10 / x は評価されません。
→ 安全に実行を制御できる
if (x == 0 || 100 % x == 0) {
// xが0なら右側は評価されない
}
短絡評価は安全性や効率性を保つための重要な特性です。