C 言語の条件分岐マスター: IF、IF-ELSE、ネストした IF-ELSE を徹底解説
C 言語における条件文とは?
C 言語の条件文 は、条件に基づいて決定を行うために使用されます。条件がない場合、文は順次実行されます。文のブロックに条件を設けると、条件の評価結果に基づいて実行フローが変化します。このプロセスを C 言語では「意思決定」と呼びます。
C 言語では以下の 2 つの構造で条件分岐が可能です:
1. if 文
2. if-else 文
これは「分岐」とも呼ばれ、プログラムが評価された条件の結果に基づいてどの文を実行するかを決定するためです。
このチュートリアルでは以下を学習します:
- 条件文とは?
- if 文
- 関係演算子
- if-else 文
- 条件式 (三項演算子)
- ネストした if-else 文
- ネストした else-if 文
if 文
プログラムの実行フローを変更する強力な条件文です。if 文は常に条件とともに使用されます。条件が最初に評価され、真の場合のみ if のブロック内の文が実行されます。構文:
if (condition) instruction;
条件は真 (非ゼロ) または偽 (ゼロ) に評価されます。instruction は単文または波括弧 { } で囲まれたブロックです。
以下のプログラムは C 言語での if 構造の使用例です:
#include<stdio.h>
int main() {
int num1=1;
int num2=2;
if(num1<num2) // テスト条件
{
printf("num1 is smaller than num2");
}
return 0;
}
出力:
num1 is smaller than num2
上記プログラムは 2 つの数値の大小比較に if 構造を用いています。

- 変数 num1、num2 をそれぞれ 1、2 で初期化。
- if に関係式を用いてどちらが小さいかを判定。num1 が num2 より小さいため条件は真と評価される。
- if ブロック内の文が出力され、その後ブロックを抜けてプログラムが正常終了。
関係演算子
C には真偽値を返す判定条件を作るための 6 つの関係演算子があります:
< より小さい
<= 以下
> より大きい
>= 以上
== 等しい
!= 等しくない
等価判定 (==) と代入演算子 (=) は異なることに注意。これらを混同するのはプログラマーが直面する最も一般的な問題の 1 つです。
例:
int x = 41;
x = x + 1;
if (x == 42) {
printf("You succeed!");
}
出力:
You succeed
非ゼロ値と評価される条件は真とみなされることを覚えておいてください。
例:
int present = 1;
if (present) printf("There is someone present in the classroom \n");
出力:
There is someone present in the classroom
if-else 文

if-else 文は if 文の拡張版です。一般形:
if (test-expression) {
// 真ブロック
}
else {
// 偽ブロック
}
// 以降の文
test-expression が真なら真ブロック、偽なら偽ブロックが実行され、いずれの場合も制御は if ブロックの外側にある文へ移ります。
以下のプログラムで if-else の使用を説明:
#include<stdio.h>
int main() {
int num=19;
if(num<10) {
printf("The value is less than 10");
}
else {
printf("The value is greater than 10");
}
return 0;
}
出力:
The value is greater than 10

- 変数に 19 を代入。この値が 10 より大きいか小さいかを判定。
- 条件 num<10 を指定。
- 最初のブロックは常に真ブロック。条件が真なら if ブロック実行。
- else ブロックは条件が偽の場合に実行。num は 10 より大きいため条件は偽、else ブロックが実行され「The value is greater than 10」と出力。
C 言語では if-else 構造を相互にネストでき、これを「if-else 文のネスト」と呼びます。
条件式 (三項演算子)
if-else 文を ?: 演算子で表現する別の方法があります。条件式では ?: 演算子に if と else に 1 文ずつ関連付けられます。
例:
#include <stdio.h>
int main() {
int y;
int x = 2;
y = (x >= 6) ? 6 : x; /* これは以下と等価:
if (x >= 5) y = 5; else y = x; */
printf("y =%d ",y);
return 0;
}
出力:
y =2
ネストした if-else 文
一連の決定が必要な場合に使用。ネストとは、ある if-else 構造の中に別の if-else 構造を置くことです。
ネストした if-else を説明するプログラム:
#include<stdio.h>
int main() {
int num=1;
if(num<10) {
if(num==1) {
printf("The value is:%d\n",num);
}
else {
printf("The value is greater than 1");
}
}
else {
printf("The value is greater than 10");
}
return 0;
}
出力:
The value is:1
上記プログラムは、数値が 10 より小さいか大きいかをチェックし、ネストした if-else で結果を出力します。

- 変数 num を 1 で初期化し、if-else 構造を使用。
- 外側の if-else で数値が 10 より小さいかを判定。真なら内側のブロックを処理。この場合真なので内側を処理。
- 内側のブロックで変数が 1 かどうかを判定。真なら if ブロック、偽なら else ブロックを実行。この場合真なので if ブロック実行、値が出力。
- プログラムは変数の値を出力して正常終了。
変数の値を変更してプログラムの挙動を確認してみてください。
注: ネストした if-else では複数の if-else が関わるため、インデントに注意しないと個々の構造を把握しにくくなります。適切なインデントでプログラムを読みやすくしましょう。
ネストした else-if 文 (else-if ラダー)
複数の分岐判定が必要な場合に使用。
C 言語での else-if ラダーの一般的な構文:
if (test-expression 1) {
statement1;
}
else if (test-expression 2) {
statement2;
}
else if (test-expression 3) {
statement3;
}
...
else if (test-expression n) {
statement n;
}
else {
default;
}
statement x;
この構造は「else-if ラダー」と呼ばれ、梯子のように見えるためそう呼ばれます。テスト式は上から順に評価され、最初に真になった式に対応する文が実行されます。すべて偽ならデフォルトの else 文が実行されます。
実際の動作をプログラムで確認:
#include<stdio.h>
int main() {
int marks=83;
if(marks>75){
printf("First class");
}
else if(marks>65){
printf("Second class");
}
else if(marks>55){
printf("Third class");
}
else{
printf("Fourth class");
}
return 0;
}
出力:
First class
上記プログラムはテストの点数に応じて成績を出力します。else-if ラダー構造を使用しています。

- 変数 marks を初期化。else-if ラダーで複数の条件を指定。
- marks の値が最初の条件と比較され、真なら対応する文が出力。
- 最初の条件が偽なら 2 番目の条件と比較。
- すべての式が評価されるまで続き、すべて偽ならデフォルト文が出力。
値を変更して出力の変化を確認してみてください。
まとめ
- 意思決定/分岐文は評価式の結果に基づいて 1 つのパスを選択。
- 制御文とも呼ばれ、プログラムの実行フローを制御するため。
- C 言語は if、if-else 構造を提供。
- 複数のパスをテストする場合、if-else をネスト可能。
- 式の結果に基づいてさまざまな方法をチェックする場合に else-if ラダーを使用。
C言語
- C# の式、文、ブロック:実践例で徹底理解
- C# 条件分岐をマスターする:if、if-else、if-else if、ネストした if 文
- C++条件分岐完全ガイド:if、if-else、ネストされたif-elseの仕組みと実例
- C言語条件文マスター:if、else、ネストの実践ガイド
- C++演算子を徹底解説:種類、例、サンプルプログラム付き
- C++ switch文をマスター:構文、使い方、実践例
- C++構造体を実例で徹底解説
- C++クラスとオブジェクト:コード例付き実践ガイド
- C++のstd::listをマスターする:構文、関数、実践例
- C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス
- Java if…elseをマスター:制御フローを徹底解説