Page 5 条件分岐

条件によって処理を分ける

変数がある値のときのみ処理を行う、という制御を加えることができます。ユーザが入力した値によって処理を分けたりするときに使えます。高度な処理を行おうとすればするほど、分岐が多くなりますので、条件分岐に慣れておく必要があります。

if

if([条件式]){
	[処理]
}
else if([条件式]){
	[処理]
}
else {
	[処理]
}

処理を行う条件式を記述します。条件式はPage 4のループ継続条件と同じものが使用できます。

条件式意味
a == baがbと同じ場合
a != baがbと異なる場合
a < baがbより小さい場合
a > baがbより大きい場合
a <= baがb以下の場合
a >= baがb以上の場合
a == b || c == daとbが同じ、または、cとdが同じ場合
a == b && c == daとbが同じ、かつ、cとdが同じ場合

「else if」は最初の条件が満たされなかった場合に条件判定が行われ、実行されます。「else if」は複数記述することが可能です。なくても構いません。

「else」は、どの条件も満たさなかったときに実行されます。なくても構いません。

#include <stdio.h>

int main(){
	int a = 1;
	if(a == 1){
		printf("a = 1.\n");
	}
	else if(a == 2){
		printf("a = 2.\n");
	}
	else {
		printf("a != 1 and a != 2\n");
	}
	return 0;
}

aの値によって、表示される結果が変化します。aの値をいろいろ変えて試してみてください。

switch

switch([判定変数]){
case [条件値]:
	break;
case [条件値]:
	break;
default:
	break;
}

ある変数に対して複数の条件値で判定したい場合、switchを使用します。ここで使用するのは条件式ではなく、条件値であることに注意してください。defaultはどの条件にも当てはまらなかった場合に実行されます。

#include <stdio.h>

int main(){
	int a = 1;
	switch(a){
	case 1:
		printf("a = 1.\n");
		break;
	case 2:
		printf("a = 2.\n");
		break;
	default:
		printf("a != 1 and a != 2\n");
		break;
	}
	return 0;
}

breakはswitchの条件式を抜けるために使用します。breakをなくした次のプログラムでは、正しく結果が表示されません。

#include <stdio.h>

int main(){
	int a = 1;
	switch(a){
	case 1:
		printf("a = 1.\n");
	case 2:
		printf("a = 2.\n");
	default:
		printf("a != 1 and a != 2\n");
		break;
	}
	return 0;
}

a = 1のとき、次のような出力結果になってしまいます。

a = 1.
a = 2.
a != 1 and a != 2

次のようにすれば正しいです。

#include <stdio.h>

int main(){
	int a = 1;
	switch(a){
	case 1:
	case 2:
		printf("a = 1 or a = 2.\n");
		break;
	default:
		printf("a != 1 and a != 2\n");
		break;
	}
	return 0;
}

a = 1 か a = 2 のときに「a = 1 or a = 2」と表示されます。

breakとcontinue

breakはループを抜けるときにも使用できます。ifと組み合わせて使用されることが多いです。

for(;;){
	[処理]
	
	if([条件式]){
		break;
	}	

	[処理(breakされたら実行されない)]
}
[処理(break後に実行)]

似たものにcontinueがあります。これは後ろの処理を飛ばして、ループの先頭に戻る命令です。breakと違い、ループを抜ける処理ではありません。

for(;;){
	[処理]
	
	if([条件式]){
		continue;
	}	

	[処理(continueされたら実行されない)]
}
[処理(continueされても実行されない)]

これら、条件分岐を組み合わせたプログラムの一例を以下に示します。某芸人がアホになる数(3の倍数、及び3のつく数字)で1以上100以下の数字を表示するプログラムです。

#include <stdio.h>

int main(){
	int a;	/* ループ変数 */
	int b;	/* 計算用数字 */

	for(a = 1; a <= 100; a++){
		/*条件その1 3の倍数(3で割った余りが0であればOK)*/
		b = a % 3;
		if(b == 0){
			printf("%d ",a);
			continue;	/*以下の処理を飛ばしてループの先頭へ*/
		}
		/*条件その2 1桁目が3(10で割った余りが3であればOK)*/
		b = a % 10;
		if(b == 3){
			printf("%d ",a);
		}
		else {
			/*条件その3 2桁目が3*/
			b = a / 10;
			if(b == 3){
				printf("%d ",a);
			}
		}

	}
	printf("End \n",b);
	return 0;
}

戻る