C言語 ~4日目~

条件分岐

プログラムは、順次処理、分岐処理、反復処理という3つの制御構造によって成り立っています。これらを適切に組み合わせることで、効率的なプログラムを作成することができます。

前回までのプログラムの説明では、コンピュータに実行させたい処理を順番に記述する「順次処理」を用いてきました。今回の章では、「分岐処理」に焦点を当てて説明します。
「分岐処理」とは、特定の条件に応じてプログラムの実行フローを変更することを指します。条件が真であれば一つの処理を、偽であれば別の処理を行うことが可能です。

C言語では、2方向分岐の「if文」、多方向分岐の「else if文」と「swtich」文が存在します。

if文

if文は、「もし〇〇ならば、△△する」という条件に基づいて異なる処理を行うために使われます。
以下のような構文で記述し、()内の条件式が真である場合に、{}で囲まれたブロック内の処理を実行します。

if (条件式) {
 // 条件式がtrueの場合実⾏する処理
}

条件式では、比較演算子を使用して二つの値を比較することがよくあります。

比較演算子には以下ものがあります。

演算子読み書き方説明
>大なりa > baがbより大きいとき真
>=大なりイコールa >= b aがb以上のとき真
<小なりa < baがbより小さいとき真
<=小なりイコールa <= baがb以下のとき真
==イコールa == baとbは等しいとき真
!=ノットイコールa != baとbは等しくないとき真
※比較演算子は2つの値の大小関係を比較し、真のときには1を、偽のときには0を生成します。

以下は条件分岐を使用したサンプルです。
このサンプルでは、ageが18未満の値のとき条件式が真となり「未成年です」と出力されます。

if (age < 18) {
		printf("未成年です\n");
}

・条件分岐の流れ図

if~else文

if文の後ろにelseを続けることで、条件式が偽の場合の処理を記述できるようになります。
構文は以下の通りです。

if (条件式) {
 // 条件式が真の場合実⾏する処理
} else{
  // 条件式が偽の場合実⾏する処理
}

if~else文を用いたサンプルを以下に示します。
このサンプルでは、ageが18未満の値のとき条件式が真となり「未成年です」と出力され、ageが18以上の値のとき条件式が偽となり「18歳以上です」と出力されます。

if (age < 18) {
		printf("未成年です\n");
} else{
		printf("18歳以上です\n");
}

・条件分岐の流れ図

else if文

複数の条件を持つ場合は、else ifを用いてそれぞれの条件に応じた処理を追加することが可能です。

構文は以下の通りです。

if (条件式1) {
 // 条件式1が真の場合実⾏する処理
} else if (条件式2) {
 // 条件式1が偽で条件2が真の場合実⾏する処理
} else {
 // 条件式1も条件式2も偽のとき実⾏する処理
}

else if文を用いたサンプルを以下に示します。
このサンプルでは、x>yが真のとき「xはyより大きいです」と出力し、x<yが真のとき「xはyより小さいです」と出力し、どちらの条件も満たさない場合「xとyは等しいです」と出力します。

if (x > y) {
 printf("xはyより⼤きいです");
} else if (x < y) {
 printf("xはyより⼩さいです");
} else {
 printf("xとyは等しいです");
} 

・条件分岐の流れ図

論理演算子

「aの値が10以上かつ20以下である」というように、複数の条件を組み合わせて条件式を書く際には、「論理演算子」を用います。論理演算子には以下のものがあります。

演算子名前書き方説明
&&論理積(かつ)if(a>0 && b>0) 両方の条件が成立すれば真
||論理和(または)if(a>0 || b>0) どちらかの条件が成立すれば真
!否定(ではない)!(a>0) 条件式が真のとき偽、偽のとき真

論理演算子を用いたサンプルを以下に示します。

if (x > 3 && x < 20){
 printf("x は3より⼤きく20より⼩さい\n");
}

x の値が3より大きく、かつ、20より小さいとき条件式が真となります。

if (x > 10 || y < 20){
 printf("x が10より⼤いか、y が30よりも⼩さい\n");
}

xの値が10より大きい、または、yの値が20より小さいとき 真となります。

if (!(x == 10)){
 printf("xは10と等しくない\n");
}

xの値が10ではないとき真となります。

switch文

else ifを使用して多方向分岐を記載することができます。多数の分岐先が存在し、評価する値が整数である場合、switch文を使用して次のように記述することが可能です。

構文は以下の通りです。

switch() { // switchブロックの始まり
 case 値1: // [式]の値が[値1]のときこれ以降の命令⽂が実⾏される
   命令1
   break; // switchブロックを抜ける
 case 値2: // [式]の値が[値2]のときこれ以降の命令⽂が実⾏される
   命令2
   break; // switchブロックを抜ける
 case 値3: // [式]の値が[値2]のときこれ以降の命令⽂が実⾏される
   命令3
   break; // switchブロックを抜ける
 default: // [式]の値が[値1]から[値3]ではないときこれ以降の命令⽂が実⾏される
   命令4
   break; // switchブロックを抜ける
} // switchブロックの終わり

「式」の値と等しい値が書かれているcase句があれば、そのあとに続く処理をbreak句が現れるまで続けます。
case句はいくつあってもかまいません。どの値にも一致しない処理は、default句に記載します。
break句はswitch文のブロックを抜けるのに使用します。

switch~case文を用いたサンプルを以下に示します。

int b=2;
switch(b){
	case 1:
	    printf("bは1です¥n");
	    break;
	case 2:
 	    printf("bは2です¥n");
	    break;
	case 3:
	    printf("bは3です¥n");
	    break;
	default:
	    printf("bは1,2,3以外です。¥n");
	    break;
}

int型の変数「b」が1、2、または3のいずれかの値に等しい場合、対応するcase句の処理を実行した後にswitch文を終了します。1、2,3のいずれの値とも一致しない場合、default句の処理を実行します。

また、break文をあえて記述しない場合もあります。

int month=3;
switch(month){
	case 3:
	case 4:
	case 5:
		printf("春です¥n");
		break;
	default:
		printf("春ではありません。¥n");
	  break;
}

int型の変数「month」が3または4の場合、break句がないので次のcase句へと処理が続行されます。そして、5のcase句でbreak句が現れたので、ここでswitch文を抜けます。

コメント

この記事へのコメントはありません。

関連記事

C言語でフレーム可変データセット 前編

C言語 ~6日目~

C言語 ~2日目~

PAGE TOP