
C言語の基本|関係演算子の使い方
境界の値を含めるかどうかで、判定結果は変わる。関係演算子を正しく使って、意図した条件分岐を作ろう。
if文で条件分岐を作るときによく使うのが、2つの値の大小を比較する関係演算子です。
たとえば、次のような条件をC言語で表現できます。
- 温度が0度未満なら注意する
- 点数が60点以上なら合格にする
- 在庫数が10個より少なければ発注する
- 合格率が95%未満なら再検査する
- 測定値が上限を超えたら警告する
関係演算子を使うと、変数の値と基準値を比較し、その結果を真または偽として得られます。if文は、その真偽によってブロック内を実行するか判断します。
ここで注意したいのが、<と<=、>と>=の違いです。
=が付いているかどうかによって、境界となる値を条件に含めるかが変わります。たった1文字の違いですが、プログラムの判定結果に直接影響します。
関係演算子とは
関係演算子は、2つの値の大小関係を比較する演算子です。
| 関係演算子 | 意味 | 条件式の例 | 日本語での読み方 |
|---|---|---|---|
| < | より小さい | temperature < 0 | temperatureは0より小さい |
| <= | 以下 | temperature <= 0 | temperatureは0以下 |
| > | より大きい | count > 10 | countは10より大きい |
| >= | 以上 | score >= 60 | scoreは60以上 |
<と>は、境界値を含みません。
<=と>=は=が付いているため、境界値を含みます。
| 条件式 | 境界値を含むか |
|---|---|
| n < 10 | 10を含まない |
| n <= 10 | 10を含む |
| n > 10 | 10を含まない |
| n >= 10 | 10を含む |
条件式を作るときは、日本語の条件を正確に読み取ることが大切です。
より小さい、より大きいという表現なら境界値を含みません。以下、以上という表現なら境界値を含みます。
図1:4つの関係演算子と境界値の違い

この図から分かること
n < 10とn > 10では、境界値である10を条件に含みません。
n <= 10とn >= 10では、境界値の10も条件に含まれます。
数直線で考えると、どの範囲を条件に含めるのかが分かりやすくなります。特に境界値の位置を含むかどうかに注目すると、演算子を選びやすくなります。
関係演算子の結果は1または0になる
関係演算子を使った式は、比較結果に応じて1または0になります。
| 比較結果 | 式の値 | ifでの扱い |
|---|---|---|
| 条件が成立する | 1 | 真 |
| 条件が成立しない | 0 | 偽 |
たとえば、nの値が8の場合を考えます。
| 条件式 | 比較内容 | 結果 |
|---|---|---|
| n < 10 | 8は10より小さい | 1 |
| n <= 8 | 8は8以下 | 1 |
| n > 10 | 8は10より大きい | 0 |
| n >= 9 | 8は9以上 | 0 |
if文では、条件式の結果が真ならブロック内を実行します。偽ならブロック内を飛ばし、その後ろの処理へ進みます。
if文と関係演算子の基本形
if文では、丸括弧の中に関係演算子を使った条件式を記述します。
if (変数 関係演算子 基準値) {
条件が真の場合に実行する文;
}たとえば、scoreが60以上の場合に合格と表示するなら、次のように記述します。
if (score >= 60) {
printf("合格です。\n");
}score >= 60が真なら、printfが実行されます。
scoreが60未満なら条件は偽になるため、ブロック内のprintfは実行されません。
条件式を日本語で読んでみる
関係演算子を正しく使うためには、条件式を日本語に置き換えて読む方法が役立ちます。
| 条件式 | 日本語での読み方 |
|---|---|
| value < 0 | valueは0より小さい |
| value <= 0 | valueは0以下 |
| value > 100 | valueは100より大きい |
| value >= 100 | valueは100以上 |
条件式を見たときに、左側の値を主語として読むのがポイントです。
value < 0なら、valueは0より小さいと読みます。反対に読んでしまうと、条件の意味を取り違えることがあります。
関係演算子を使った条件分岐
ここでは、半導体チップの検査合格率を入力し、95%未満の場合だけ再検査のメッセージを表示します。
処理の流れは次のとおりです。
- 検査合格率を入力する
- 合格率が95%未満か判定する
- 95%未満なら再検査のメッセージを表示する
- 入力された合格率を表示する
- プログラムを終了する
図2:検査合格率が95%未満か判定する流れ

この図から分かること
pass_rate < 95は、pass_rateが95より小さいかを判定します。
94以下なら条件は真になり、再検査が必要と表示します。95以上なら条件は偽になり、再検査の表示を飛ばします。
<は境界値を含まないため、95は再検査の対象になりません。
関係演算子を使ったプログラム
検査合格率が95%未満なら再検査を通知するプログラム
ファイル名:8_2_1.c
#include <stdio.h>
int main(void)
{
int pass_rate;
printf("検査合格率を入力してください(%%)> ");
scanf("%d", &pass_rate);
/* 合格率が95%未満なら再検査を通知する */
if (pass_rate < 95) {
printf("警告: 基準未満のため再検査が必要です。\n");
}
printf("入力された検査合格率は%d%%です。\n", pass_rate);
return 0;
}実行結果の例
92を入力した場合は、95未満なので警告が表示されます。
検査合格率を入力してください(%)> 92
警告: 基準未満のため再検査が必要です。
入力された検査合格率は92%です。95を入力した場合は、95未満ではないため警告は表示されません。
検査合格率を入力してください(%)> 95
入力された検査合格率は95%です。プログラムの詳しい解説
pass_rateは、入力された検査合格率を保存するint型の変数です。
| 記述 | 役割 |
|---|---|
| int pass_rate; | 検査合格率を保存する変数を宣言する |
| scanf("%d", &pass_rate); | 入力された整数をpass_rateへ保存する |
| if (pass_rate < 95) | 合格率が95未満か判定する |
| printf("警告: 基準未満のため再検査が必要です。\n"); | 条件が真の場合だけ警告を表示する |
| printf("入力された検査合格率は%d%%です。\n", pass_rate); | 条件の結果に関係なく合格率を表示する |
| return 0; | main関数を正常終了する |
pass_rateに92が保存されている場合、pass_rate < 95は真です。条件式の結果が1になるため、ifのブロック内が実行されます。
pass_rateに95が保存されている場合、pass_rate < 95は偽です。条件式の結果は0になり、ifのブロック内を飛ばします。
最後の合格率表示はifのブロックの外側にあります。そのため、条件が真でも偽でも実行されます。
pass_rate < 95を値ごとに確認する
| pass_rate | pass_rate < 95 | 判定 | 動作 |
|---|---|---|---|
| 92 | 1 | 真 | 警告を表示する |
| 94 | 1 | 真 | 警告を表示する |
| 95 | 0 | 偽 | 警告を表示しない |
| 96 | 0 | 偽 | 警告を表示しない |
| 100 | 0 | 偽 | 警告を表示しない |
境界値は95です。
条件式では<を使っているため、95は条件に含まれません。再検査の対象は95より小さい値です。
<と<=の違い
<は、右側の値より小さいことを判定します。<=は、右側の値以下であることを判定します。
| 条件 | 94 | 95 | 96 | 意味 |
|---|---|---|---|---|
| pass_rate < 95 | 真 | 偽 | 偽 | 95より小さい |
| pass_rate <= 95 | 真 | 真 | 偽 | 95以下 |
pass_rate < 95では、95を条件に含みません。
pass_rate <= 95では、95も条件に含みます。
今回の基準が95%未満なら、<を使うのが正しい書き方です。
もし95%以下を再検査の対象にするなら、<=を使用します。
>と>=の違い
と>=も、境界値を含むかどうかが異なります。
たとえば、検査時間が60分を超えた場合に警告する条件を考えます。
| 条件 | 59 | 60 | 61 | 意味 |
|---|---|---|---|---|
| minutes > 60 | 偽 | 偽 | 真 | 60より大きい |
| minutes >= 60 | 偽 | 真 | 真 | 60以上 |
60分を超えた場合なら、60そのものは含まれないため>を使います。
60分以上の場合なら、60も条件に含まれるため>=を使います。
境界値を先に決める
関係演算子を選ぶときは、最初に境界値とその扱いを決めます。
次の順番で考えると、条件式を作りやすくなります。
- 境界となる値を決める
- 境界値を条件に含めるか決める
- 境界より小さい側か大きい側か決める
- 条件に合う関係演算子を選ぶ
- 境界値の前後で判定結果を確認する
たとえば、合格点が60点の場合を考えます。
- 境界値は60
- 60点も合格に含める
- 境界以上を合格にする
- 使用する演算子は>=
- 59、60、61で判定を確認する
条件式は次のようになります。
if (score >= 60) {
printf("合格です。\n");
}| score | score >= 60 |
|---|---|
| 59 | 偽 |
| 60 | 真 |
| 61 | 真 |
境界値の前後を確認すると、演算子の選択ミスを発見しやすくなります。
図3:境界値を含む条件と含まない条件

この図から分かること
score > 60では、境界値の60を含みません。61以上の場合に真になります。
score >= 60では、60も条件に含みます。60以上の場合に真になります。
日本語の条件が60点以上なら>=を使い、60点を超えるなら>を使います。境界値を含めたい場合は、=が付いた関係演算子を選びます。
範囲を判定するときは条件を組み合わせる
1つの関係演算子では、片側の範囲しか表せません。
たとえば、検査合格率が0%以上100%以下であることを判定するには、2つの条件を&&で組み合わせます。
if (pass_rate >= 0 && pass_rate <= 100) {
printf("入力された合格率は有効な範囲です。\n");
}この条件には、次の2つが含まれています。
- pass_rate >= 0
- pass_rate <= 100
両方が真の場合だけ、全体の条件が真になります。
| pass_rate | 0以上 | 100以下 | 全体の判定 |
|---|---|---|---|
| -1 | 偽 | 真 | 偽 |
| 0 | 真 | 真 | 真 |
| 50 | 真 | 真 | 真 |
| 100 | 真 | 真 | 真 |
| 101 | 真 | 偽 | 偽 |
0以上100以下なので、境界値の0と100も有効な範囲に含まれます。
関係演算子の書き方に注意する
2文字で構成される関係演算子は、記号の順番と書き方が決まっています。
| 正しい記述 | 誤った記述 |
|---|---|
| <= | =< |
| >= | => |
| <= | < = |
| >= | > = |
以下は<=で表します。=<という演算子はありません。
以上は>=で表します。=>という演算子はありません。
また、<と=、>と=の間へ空白を入れてはいけません。2文字を続けて1つの演算子として記述します。
条件式の向きを確認する
次の2つは、左右を入れ替えても同じ範囲を表します。
| 条件式 | 意味 |
|---|---|
| n < 10 | nは10より小さい |
| 10 > n | 10はnより大きい |
どちらも同じ判定になりますが、変数を左側、基準値を右側に置くと読みやすくなることが多いです。
if (n < 10) {
printf("nは10より小さい値です。\n");
}条件式を書くときは、変数を主語として日本語で読める形にすると、演算子の向きを間違えにくくなります。
関係演算子を使うときの確認ポイント
- 日本語の条件が未満、以下、超える、以上のどれか確認する
- 境界となる値を決める
- 境界値を条件に含めるか確認する
- <と<=を使い分ける
- と>=を使い分ける
- <=や>=を1つの演算子として続けて記述する
- =<や=>と書いていないか確認する
- 境界値の1つ前、境界値、1つ後で結果を確認する
- 条件式を変数は基準値より小さいのように日本語で読む
関係演算子による不具合は、境界値で発生しやすいのが特徴です。条件式を作ったら、通常の値だけでなく、境界値そのものを使って動作を確認することが大切です。
