C言語の条件分岐を完全解説!フローチャートとサンプルプログラムで学ぶ意思決定処理
C言語における「意思決定(条件分岐)」とは、条件が真(True)か偽(False)かを判定し、その結果に応じて実行する処理を切り替える仕組みです。プログラムに柔軟な制御を持たせるために欠かせない概念であり、以下のような分岐文があります。
- 単純if文(simple – if statement)
- if–else文
- ネストしたif–else文
- else–ifラダー
- switch文
本記事では、それぞれの構文・フローチャート・サンプルプログラムと実行結果を順番に解説していきます。
1. 単純if文(simple – if statement)
「if」キーワードは、論理条件が真である場合に、一連のステートメントを実行するために使用します。
構文
if (condition){
Statement(s)
}
サンプルプログラム
次の例では、入力された数値が50より大きいかどうかを判定します。
#include<stdio.h>
main (){
int a;
printf ("enter any number:\n");
scanf ("%d", &a);
if (a>50)
printf ("%d is greater than 50", a);
}実行結果
1) enter any number: 60 60 is greater than 50. 2) enter any number: 20 (出力なし:条件が偽のため何も表示されない)
2. if–else文
if–else文は、条件が真の場合と偽の場合の両方に対して、異なる処理を記述できる分岐文です。条件が真ならば「真ブロック」が、偽ならば「偽ブロック」が実行されます。
構文
if (condition){
True block statement(s)
}
else{
False block statement(s)
}フローチャート

サンプルプログラム
入力された数値が偶数か奇数かを判定するプログラムです。
#include<stdio.h>
main (){
int n;
printf ("enter any number:\n");
scanf ("%d", &n);
if (n%2 ==0)
printf ("%d is even number", n);
else
printf("%d is odd number", n);
}実行結果
1) enter any number: 10 10 is even number
3. ネストしたif–else文
ネストとは、あるif文の中に別のif(またはelse)を入れ子で記述することです。複数の条件を段階的に判定したい場合に有効です。
構文
if (condition1){
if (condition2)
stmt1;
else
stmt2;
}
else{
if (condition3)
stmt3;
else
stmt4;
}フローチャート

サンプルプログラム
次の例では、入力された3つの数値から最大値を求めて表示します。
#include<stdio.h>
main (){
int a,b,c;
printf ("enter 3 numbers");
scanf ("%d%d%d", &a, &b, &c);
if (a>b){
if (a>c)
printf ("%d is largest", a);
else
printf ("%d is largest", c);
} else {
if (b>c)
printf ("%d is largest", b);
else
printf ("%d is largest", c);
}
}実行結果
enter 3 numbers = 10 20 30 30 is largest
4. else–ifラダー
else–ifラダーは、多方向の条件分岐を実現する構造です。上から順に条件を評価し、最初に真となったブロックだけを実行します。いずれの条件にも当てはまらない場合は、最後のelseブロックが処理されます。
構文
if (condition1)
stmt1;
else if (condition2)
stmt2;
- - - - -
- - - - -
else if (condition n)
stmt n;
else
stmt x;フローチャート

サンプルプログラム
次の例では、二次方程式の判別式(D = b² − 4ac)の値に応じて、実根を求めます。
#include <math.h>
main (){
int a,b,c,d;
float r1, r2;
printf ("enter the values a b c");
scanf ("%d%d%d", &a, &b, &c);
d= b*b - 4*a*c ;
if (d>0){
r1 = (-b+sqrt(d)) / (2*a);
r2 = (-b-sqrt(d)) / (2*a);
printf ("root1 ,root2 =%f%f", r1, r2);
}
else if (d== 0){
r1 = -b / (2*a);
r2 = -b/ (2*a);
printf ("root1, root2 = %f%f", r1, r2);
}
else
printf ("roots are imaginary");
}実行結果
1) enter the values of a b c : 1 4 3 Root 1 = -1 Root 2 = -3
5. switch文
switch文は、多数の選択肢の中から1つを選んで処理を実行したい場合に便利です。式の評価結果と一致するcaseラベルの処理へジャンプし、「break」によってswitchブロックを抜けます。どのcaseにも一致しない場合はdefaultの処理が実行されます。
構文
switch (expression){
case value1 : stmt1;
break;
case value2 : stmt2;
break;
- - - - - -
default : stmt-x;
}フローチャート

サンプルプログラム
入力された数値に対応する英語表記を表示するプログラムです。
#include<stdio.h>
main (){
int n;
printf ("enter a number");
scanf ("%d", &n);
switch (n){
case 0 : printf ("zero");
break;
case 1 : printf ("one");
break;
default : printf ("wrong choice");
}
}実行結果
enter a number 1 one
まとめ
C言語の条件分岐には、単純なif文から複雑なネスト構造やswitch文まで、さまざまな方法があります。単純な2択ならif–else文、多段階の判定にはelse–ifラダー、特定の値ごとの分岐にはswitch文というように、目的に応じて適切な構文を選択することが、読みやすく効率的なプログラムを書くポイントです。ぜひ各サンプルコードを実際に入力して動作を確認してみてください。
-
【C言語入門】ポインタと配列の関係をわかりやすく解説|スケールファクタとは
ポインタと配列の基本的な関係 C言語では、コンパイラが配列のすべての要素に対して連続したメモリ領域を自動的に割り当てます。ここで重要になるのが「ベースアドレス」です。ベースアドレスとは、配列の先頭要素(0番目の要素)が格納されているメモリアドレスのことを指します。 例えば、次のように配列を宣言してみましょう。 int a[5] = {10, 20, 30, 40, 50}; この場合、5つの要素はメモリ上に以下のように順番に格納されます。 ここで変数「p」をint型へのポインタとして宣言すれば、次のいずれかの代入文によって、配列aの先頭アドレスをポインタに持たせることができます。 p =
-
C言語のループ制御文(for・while・do-while)を徹底解説!フローチャートとサンプルコード付き
C言語におけるループ制御文は、同じ処理を何度も繰り返し実行したい場合に使われる重要な構文です。毎回コードを書き連ねる必要がなくなり、プログラムを簡潔かつ効率的に記述できます。 C言語で利用できるループ制御文は、主に以下の3種類です。 for文 while文 do-while文 本記事では、それぞれの構文の書き方、フローチャートによる動作の流れ、実際に動くサンプルプログラムと実行結果まで、初心者にもわかりやすく解説します。 for文とは?基本構文と使い方 for文は、「初期化」「条件式」「増減式」を1行にまとめて記述できる、最もよく使われるループ構文です。繰り返す回数があらかじめ決まっている