
【6日でできるC言語入門】複雑な if 文
C言語のプログラミングにおいて、if文はもっとも基本的な分岐処理の構文です。これまで単純な条件分岐について学んできましたが、実際の開発現場では「複数の条件を組み合わせて判定したい」「より細かく分岐したい」といったニーズが生まれます。
このような場合、論理演算子やif文のネスト(入れ子構造)を活用して、より複雑な条件分岐を記述することが重要です。
本記事では、複雑な if 文を正しく使いこなすための知識を、表や具体例を交えて解説します。

1.論理演算子を使った複雑な if 文
1.1. 論理演算子の基本
論理演算子は、複数の条件をまとめて判定するときに使います。C言語でよく使う論理演算子は次の通りです。
| 演算子 | 名称 | 意味 | 使用例 | 例の意味 |
|---|---|---|---|---|
| && | 論理積(AND) | 両方成立 | x >= 10 && y < 50 | xは10以上、かつyは50未満 |
| || | 論理和(OR) | どちらか成立 | x == 0 || y == 0 | xまたはyが0 |
| ! | 否定(NOT) | 条件の反転 | !(x > 0) | xが0以下 |
1.2. AND(&&)を使った判定例
サンプルプログラム1:2つの年齢が両方とも20歳以上か判定
プロジェクト/ファイル名: Lesson22_1/main.c
#include <stdio.h>
int main(void) {
int age1, age2;
printf("1人目の年齢を入力してください: ");
scanf("%d", &age1);
printf("2人目の年齢を入力してください: ");
scanf("%d", &age2);
if (age1 >= 20 && age2 >= 20) {
printf("2人とも20歳以上です。\n");
} else {
printf("どちらかが20歳未満です。\n");
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
1人目の年齢を入力してください: 25
2人目の年齢を入力してください: 30
2人とも20歳以上です。
1人目の年齢を入力してください: 19
2人目の年齢を入力してください: 21
どちらかが20歳未満です。| age1 >= 20 | age2 >= 20 | 結果 |
|---|---|---|
| True | True | 2人とも20歳以上 |
| True | False | どちらかが20歳未満 |
| False | True | どちらかが20歳未満 |
| False | False | どちらかが20歳未満 |
1.3. OR(||)を使った判定例
サンプルプログラム2:どちらかの点数が80点以上か判定
プロジェクト/ファイル名: Lesson22_2/main.c
#include <stdio.h>
int main(void) {
int score1, score2;
printf("1人目の点数を入力してください: ");
scanf("%d", &score1);
printf("2人目の点数を入力してください: ");
scanf("%d", &score2);
if (score1 >= 80 || score2 >= 80) {
printf("どちらかが80点以上です。\n");
} else {
printf("両方とも80点未満です。\n");
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
1人目の点数を入力してください: 85
2人目の点数を入力してください: 70
どちらかが80点以上です。
1人目の点数を入力してください: 60
2人目の点数を入力してください: 70
両方とも80点未満です。| score1 >= 80 | score2 >= 80 | 結果 |
|---|---|---|
| True | True | どちらかが80点以上 |
| True | False | どちらかが80点以上 |
| False | True | どちらかが80点以上 |
| False | False | 両方とも80点未満 |
1.4. NOT(!)を使った判定例
サンプルプログラム3:数が0でないかを判定
プロジェクト/ファイル名: Lesson22_3/main.c
#include <stdio.h>
int main(void) {
int num;
printf("整数を入力してください: ");
scanf("%d", &num);
if (!(num == 0)) {
printf("0ではありません。\n");
} else {
printf("0です。\n");
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
整数を入力してください: 8
0ではありません。2.if文のネスト(入れ子)による複雑な条件分岐
2.1. if文のネストの基本
if文の中にさらにif文を書くことで、より細かい条件分岐ができます。これをif文のネスト(入れ子構造)といいます。
2.2. ネストを使ったサンプル
サンプルプログラム4:季節と気温で服装を判断
プロジェクト/ファイル名: Lesson22_4/main.c
#include <stdio.h>
int main(void) {
int season, temperature;
printf("季節を選んでください(1:春, 2:夏, 3:秋, 4:冬): ");
scanf("%d", &season);
printf("気温を入力してください(℃): ");
scanf("%d", &temperature);
if (season == 2) { // 夏
if (temperature >= 30) {
printf("Tシャツがおすすめです。\n");
} else {
printf("薄手のシャツがおすすめです。\n");
}
} else if (season == 4) { // 冬
if (temperature <= 5) {
printf("厚手のコートが必要です。\n");
} else {
printf("セーターがおすすめです。\n");
}
} else {
printf("季節に合った服装を選んでください。\n");
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
季節を選んでください(1:春, 2:夏, 3:秋, 4:冬): 2
気温を入力してください(℃): 32
Tシャツがおすすめです。
季節を選んでください(1:春, 2:夏, 3:秋, 4:冬): 4
気温を入力してください(℃): 3
厚手のコートが必要です。3.複雑な if 文の応用例
3.1. 成績判定プログラム
サンプルプログラム5:合格・追試・不合格の判定
プロジェクト/ファイル名: Lesson22_5/main.c
#include <stdio.h>
int main(void) {
int score;
printf("試験の点数を入力してください: ");
scanf("%d", &score);
if (score >= 60) {
printf("合格です。\n");
} else if (score >= 40) {
printf("追試です。\n");
} else {
printf("不合格です。\n");
}
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
試験の点数を入力してください: 75
合格です。
試験の点数を入力してください: 45
追試です。
試験の点数を入力してください: 30
不合格です。まとめ
複雑な if 文は、実践的なプログラム作成において欠かせないスキルです。
- 論理演算子(&&、||、!)を活用すれば、複数の条件を1つのif文でスマートに記述できます。
- if文のネストを使えば、より細かく段階的な分岐が可能になります。
- 実例で練習し、条件の組み立て方やプログラムの流れをしっかり理解しましょう。
これらのテクニックを身につけることで、現場で通用する柔軟なプログラムが書けるようになります。
