
C言語のきほん|条件を組み合わせる
条件が増えても怖くない!&& と || と ! を使い分けて、狙い通りに判定しよう。
if 文で分岐を作れるようになると、次に出てくるのが「条件が1つじゃ足りない問題」です。
たとえば、
- 点数が 60 以上 かつ 100 以下なら合格
- 入力が範囲外ならエラー(0未満 または 100より大)
- 条件をひっくり返して「それ以外」を判定したい
みたいに、現実の判定はたいてい複数条件になります。
そこで使うのが 論理演算子 です。
- &&(かつ)
- ||(または)
- !(否定)
この3つを押さえると、条件式が一気に表現しやすくなります。
条件を組み合わせる論理演算子
まずは意味を表で確認します。
| 演算子 | 名前 | 意味 | 真になる条件 |
|---|---|---|---|
| && | 論理積 | A かつ B | A も B も真 |
| || | 論理和 | A または B | A か B のどちらかが真(両方真でもOK) |
| ! | 否定 | A ではない | A が偽なら真、A が真なら偽 |
0以上100以下の範囲チェックは && が基本
文書の例は「0以上かつ100以下」です。考え方はこうです。
- 0以上である(n >= 0)
- 100以下である(n <= 100)
- 両方満たす必要がある → &&
数直線でイメージ

サンプルプログラム
「年齢が 0〜120 の範囲内か」を判定するサンプルプログラムです。
ファイル名:8_3_1.c
#include <stdio.h>
int main(void)
{
int age;
printf("年齢を入力してください > ");
scanf("%d", &age);
/* 年齢が0以上かつ120以下なら妥当とみなす */
if (age >= 0 && age <= 120) {
printf("入力された年齢は範囲内です。\n");
}
return 0;
}範囲内なら表示、範囲外なら何もしない、という動きです。
範囲外チェックは || が自然(0未満 または 上限超え)
範囲外は「条件が2つのどちらかに当てはまればアウト」です。
- 0未満(n < 0)
- 100より大(n > 100)
- どちらかなら範囲外 → ||
数直線でイメージ(文字)

サンプルプログラム
今度は「年齢が範囲外なら警告」を出す形にします。
ファイル名:8_3_2.c
#include <stdio.h>
int main(void)
{
int age;
printf("年齢を入力してください > ");
scanf("%d", &age);
/* 0未満または120より大なら範囲外 */
if (age < 0 || age > 120) {
printf("範囲外の年齢が入力されました。\n");
}
return 0;
}&& と || を間違えると、ほぼ全部OKになってしまう
範囲チェックでよくある事故がこれです。
- 正しい:n >= 0 && n <= 100(0〜100の範囲)
- 間違い:n >= 0 || n <= 100(ほぼ全部が真)
なぜ「ほぼ全部が真」になるかというと、
- 200 のとき:n >= 0 が真 → 全体が真
- -50 のとき:n <= 100 が真 → 全体が真
つまり、どんな数でも「どっちかはだいたい真」になりやすいので、全部通ってしまいます。
迷ったら、文書のアドバイス通り 数直線を描くのが一番確実です。
!(否定)で条件をひっくり返す
「範囲内」の条件があるなら、「範囲外」は否定でも書けます。
- 範囲内:age >= 0 && age <= 120
- 範囲外:!(age >= 0 && age <= 120)
サンプルプログラム(否定で書く)
ファイル名:8_3_3.c
#include <stdio.h>
int main(void)
{
int age;
printf("年齢を入力してください > ");
scanf("%d", &age);
/* 範囲内の条件を否定して、範囲外を判定する */
if (!(age >= 0 && age <= 120)) {
printf("範囲外の年齢が入力されました。\n");
}
return 0;
}否定を使うとスッキリする場面もありますが、読みやすさは人によって変わるので「読みやすい方」を選ぶのがコツです。
実践問題:奇数判定
整数値を入力し、3で割り切れなければ「3の倍数ではありません。」と表示するプログラムを作成してください。
割り切れるかどうかは % を使って判定します。
実行例(割り切れない)
整数値を入力してください > 10
3の倍数ではありません。実行例(割り切れる)
整数値を入力してください > 12
何も表示されません解答例
ファイル名:8_3_4.c
#include <stdio.h>
int main(void)
{
int n;
printf("整数値を入力してください > ");
scanf("%d", &n);
/* 3で割った余りが0でなければ、3の倍数ではない */
if (n % 3 != 0) {
printf("3の倍数ではありません。\n");
}
return 0;
}解説
- n % 3 は「3で割った余り」です
- 余りが 0 なら割り切れる(3の倍数)
- 余りが 0 以外なら割り切れないのでメッセージを表示します
実践問題:範囲チェック
身長(cm)を整数で入力し、120以上200以下なら「入力は妥当です。」と表示するプログラムを作成してください。
複数条件の判定には && を使います。
実行例(範囲内)
身長(cm)を入力してください > 170
入力は妥当です。実行例(範囲外)
身長(cm)を入力してください > 90
何も表示されません解答例
ファイル名:8_3_5.c
#include <stdio.h>
int main(void)
{
int h;
printf("身長(cm)を入力してください > ");
scanf("%d", &h);
/* 120以上かつ200以下なら範囲内 */
if (h >= 120 && h <= 200) {
printf("入力は妥当です。\n");
}
return 0;
}解説
範囲に入っているかは「下限を満たす」かつ「上限を満たす」の両方が必要なので && が自然です。
チャレンジ問題:三角形判定
3つの整数 a, b, c を入力し、それらが三角形の3辺になれるなら「三角形を作れます。」と表示してください。
条件
- 3辺はすべて正の値
- 任意の2辺の和が残りの1辺より大きい
a + b > c かつ a + c > b かつ b + c > a
実行例(作れる)
3つの辺の長さを入力してください > 4 4 7
三角形を作れます。実行例(作れない)
3つの辺の長さを入力してください > 1 2 3
何も表示されません解答例
ファイル名:8_3_6.c
#include <stdio.h>
int main(void)
{
int a, b, c;
printf("3つの辺の長さを入力してください > ");
scanf("%d %d %d", &a, &b, &c);
/* まず正の値かチェックし、次に三角形条件をチェックする */
if (a > 0 && b > 0 && c > 0 &&
a + b > c && a + c > b && b + c > a) {
printf("三角形を作れます。\n");
}
return 0;
}解説
この問題は「条件の組み合わせ」の良い練習です。
- まず a > 0 && b > 0 && c > 0 で「長さとして成立しているか」を確認
- その上で、三角形の成立条件を && で全部つなぎます
三角形はどれか1つでも条件を満たさないと成立しないので、&& が必要です
