
C言語基礎|条件演算子
条件演算子とは何か
これまでは、条件によって処理を分岐させるために if 文を使ってきました。
if 文はとても分かりやすく、基本中の基本です。
一方で C言語には、
「条件によって値そのものを切り替える」 ための演算子も用意されています。
それが 条件演算子 です。
条件演算子を使うと、
- 条件に応じて異なる値を作り出す。
- if 文を使わずに、1つの式として書ける。
という特徴があります。

条件演算子の形
条件演算子は、C言語で唯一の 3項演算子 です。
| 形式 | 意味 |
|---|---|
| a ? b : c | a が非0なら b、そうでなければ c |
この形は必ず守らなければなりません。
- a は条件となる式
- b は条件が成立したときの値
- c は条件が成立しなかったときの値
条件演算子は 式 です。
そのため、評価すると「値」が得られます。
条件式の評価の流れ
条件演算子を含む式は、次の順序で評価されます。
式1 ? 式2 : 式3- まず 式1 を評価する
- 式1 の値が
・非0 → 式2 を評価し、その値が全体の値になる。
・0 → 式3 を評価し、その値が全体の値になる
重要なのは、
式2 と 式3 の両方が評価されるわけではない
という点です。
サンプルプログラム①
ここでは、次の処理を行うプログラムを考えます。
二つの整数を読み込み、より小さい値を表示する
プログラム例
プロジェクト名:chap3-8-1 ソースファイル名:chap3-8-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int a, b;
puts("二つの整数を入力してください。");
printf("A:"); scanf("%d", &a);
printf("B:"); scanf("%d", &b);
int smaller = a < b ? a : b;
printf("小さいほうの値は%dです。\n", smaller);
return 0;
}処理の考え方
- a < b が非0なら a を選ぶ
- そうでなければ b を選ぶ
この結果がそのまま変数 smaller に代入されます。
if 文との対応関係
条件演算子は、次の if 文を 1行の式にまとめたもの と考えると理解しやすくなります。
if 文で書いた場合
int smaller;
if (a < b)
smaller = a;
else
smaller = b;条件演算子で書いた場合
int smaller = a < b ? a : b;処理内容はまったく同じですが、
条件演算子のほうが「値を決める処理」であることがはっきりしています。
サンプルプログラム②(差の絶対値を求める)
条件演算子は、値の加工にもよく使われます。
ここでは次の処理を行います。
二つの整数の差を、必ず正の値で表示する
プログラム例
プロジェクト名:chap3-8-2 ソースファイル名:chap3-8-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int x, y;
puts("二つの整数を入力してください。");
printf("X:"); scanf("%d", &x);
printf("Y:"); scanf("%d", &y);
int diff = x > y ? x - y : y - x;
printf("二つの値の差は%dです。\n", diff);
return 0;
}条件式の意味
| 条件 | 評価される式 |
|---|---|
| x > y が非0 | x - y |
| x > y が0 | y - x |
常に「大きい値 − 小さい値」が選ばれるため、
結果は必ず正の値になります。
条件演算子を使うときの注意点
条件演算子は便利ですが、使いすぎには注意が必要です。
良い使いどころ
- 単純な条件で値を切り替える。
- max や min を求める。
- 表示内容や代入値を切り替える。
避けたほうがよい例
- 条件が複雑すぎる。
- 条件演算子を入れ子にする。
- 読みにくくなる場合
可読性が下がる場合は、素直に if 文を使いましょう。
if 文と条件演算子の使い分け
| 観点 | if 文 | 条件演算子 |
|---|---|---|
| 処理の分岐 | 得意 | 不向き |
| 値の決定 | やや冗長 | 得意 |
| 可読性 | 高い | 短いが注意が必要 |
| 式として使える | できない | できる |
まとめ
- 条件演算子 ?: は C言語唯一の3項演算子
- 条件に応じて異なる値を生成する式
- if 文を「値の決定」に特化させた形
- 簡潔に書けるが、読みやすさを意識することが重要
