
C言語の条件分岐構文は、if文、else if文、else文とswitch文があります。
条件分岐構文は、C言語に限らず他のプログラム言語でも必ずある構文ですので、
ここで慣れておくと他の言語でも応用できます。
それでは、C言語の条件分岐構文について解説していきます。
1.条件分岐とは
条件分岐とは、計算結果などの変数値や列挙型(enum)のラベルなどの値によって、
処理を分岐することを言います。
例えば、変数aという値が0以上の場合と負の値の場合で処理を分けたい時などに使用します。
列挙型(enum)については、switch文と合わせて解説します。
2.if文の解説
if文の基本形は、以下のように書きます。
if ( 条件式 )
{
処理内容
}
条件式が真の場合(成立した場合)に、if文の処理内容を実行します。
if文の処理の中に、更にif文を入れていくこともできます。
また、if文と合わせて、else if文、else文も良く使用します。
if文とelse文を使用する場合は、下記のように書きます。
if ( 条件式1 )
{
処理内容1
}
else
{
処理内容2
}
else文は、if文の条件以外はエラー処理をしたい時に良く使用します。
また、else文が必要無ければ、if文のみでも構いません。
次に、else if文を使用する場合は、下記のように書きます。
if ( 条件式1 )
{
処理内容1
}
else if ( 条件式2 )
{
処理内容2
}
else
{
処理内容3
}
else if文は、複数の処理内容を分岐させたい場合に使用し、
if文の後に繋げていくことで処理を分けることができます。
else if文は、if文の後に何個でも書くことができますが、
プログラムの可読性が悪くならない程度に使用すると良いです。
else if文を使用する場合は、else文でエラー処理をする等、
if/else if文以外の処理を明確にしておいた方が良いです。
3.if文のプログラム例
if文やelse if文、else文を使用したプログラム例は、下記のような感じです。
#include <stdio.h>
int tashizan( int a, int b ) {
return a+b;
}
int main (){
int ret = 0;
int first,second = 0;
first = 230;
second = 132;
ret = tashizan(first,second);
if ( ret%2 == 0 ) {
printf("%d は、偶数です。\n", ret);
}
else {
printf("%d は、奇数です。\n", ret);
}
if ( ret%34 == 0 ) {
printf("%d は、34で割り切れます。\n", ret);
}
else if ( ret%58 ) {
printf("%d は、58で割り切れます。\n", ret);
}
else {
printf("%d は、34と58で割り切れません。\n", ret);
}
return 0;
}
このプログラムは、足し算の結果を、2、34、58で割れるかの条件分岐で、
if文、else文、else if文を使用しています。
4.switch文の解説
数式の条件ではなく、ラベルの値によって処理を分けたい場合には、switch文を使用します。
switch文の基本形は、caseとdefaultで構成されており、下記のような感じになります。
switch ( 値または式を記述する ) {
case 値1:
処理1を記述
break;
case 値2:
処理2を記述
break;
case 値3:
処理3を記述
break:
default:
エラー処理等を記述する
break;
}
switch文の( )内の値と同じ値のcaseの処理が実行されます。
caseの処理の最後には、必ずbreakを入れてswitch文の処理を終了します。
このbreakが無いと、無関係な次のcaseの処理も実行されてしまい意図したプログラムになりません。
ただ、caseの値が異なっても全く同じ処理をしたい場合は、下記のように書くこともできます。
switch ( 値または式を記述 ) {
case 値1:
処理1を記述
break;
case 値2:
case 値3:
処理2を記述
break:
default:
エラー処理等を記述
break;
}
上記のように、「case 値2:」と「 case 値3:」を続けて記述することで、
どちらのcaseも処理2が実行されるようになります。
また、caseに当てはまらなかった場合は、defaultに処理を記述します。
ほとんどの場合、defaultでは、エラー処理を行います。
そしてcaseと同じようにbreakを入れます。
5.列挙型(enum)について
列挙型(enum)とは、名前付きの整数定数をグループ化して定義するための型です。
また、列挙型は、switch文のcase判定で、よく使用されます。
列挙型の宣言のやり方は、例えば、月を列挙型で宣言した場合、下記のように記述します。
enum Month {
JANUARY,
FEBRUARY,
MARCH,
APRIL,
MAY
};
列挙型の各要素の名前は、列強型とわかるように大文字で記述します。
また、各要素の値は、JANUARYが0、FEBRUARYが1と順に番号が自動で割り振られます。
また、下記のように、列挙型の始まりの値を自分で設定することもできます。
enum Month {
JANUARY=10, // ここで、変数値の初期値として、整数を設定する。
FEBRUARY,
MARCH,
APRIL,
MAY
};
初期値を10に設定しているので、その後は、11、12・・・と自動的に割り振られます。
列挙型は、自動的に連続して値が割り振られますので、
用途としてID番号やキー番号など、連続した番号をデータとして扱う場合に便利です。
6.switch文のプログラム例
switch文を使用する場合、列挙型のenumと合わせてよく使用します。
そのプログラム例は、下記のような感じです。
#include <stdio.h>
enum Amari {
ZERO=0,
ONE,
TWO,
THREE,
FORE
};
int kakezan( int a, int b )
{
return a*b;
}
int main ()
{
int ret = 0;
int first,second=0;
first = 23;
second = 39;
ret = kakezan(first,second);
switch ( ret%5 ) {
case ZERO:
printf("%dを5で割ると、余りは0です。\n", ret);
break;
case ONE:
printf("%dを5で割ると、余りは1です。\n", ret);
break;
case TWO:
printf("%dを5で割ると、余りは2です。\n", ret);
break;
case THREE:
printf("%dを5で割ると、余りは3です。\n", ret);
break;
case FORE:
printf("%dを5で割ると、余りは4です。\n", ret);
break;
default:
printf("エラー:%dは異常値です。\n", ret);
break;
}
return 0;
}
上記、switch文では、足し算の結果を5で割った余りで条件分岐しているプログラムです。
if文、else if文、else文でも同じようなプログラムを組むことができますが、
プログラムの読みやすさによって、どちらを使用するかを決めると良いです。
7.最後に
条件分岐の考え方は難しくありませんが、
どのように分岐させると効率が良いかということが重要になります。
分岐条件をよく検討せずにプログラミングするとelse if文が多くなる場合があり、
ソースコードが読みにくくなります。
プログラミングは、動作させることも重要ですが、効率よく読みやすくを心掛けると良いです。
<関連・おすすめ記事>
Linux勉強用の中古パソコンおすすめショップランキング - 水瓶座列車
C言語の始め方と基本構造、コンパイルから実行までを解説 - 水瓶座列車
C言語の文字列操作<string.h>のライブラリ関数について解説 - 水瓶座列車
C言語の繰り返し構文( while, do while, for )の解説と応用 - 水瓶座列車