変数がある値のときのみ処理を行う、という制御を加えることができます。ユーザが入力した値によって処理を分けたりするときに使えます。高度な処理を行おうとすればするほど、分岐が多くなりますので、条件分岐に慣れておく必要があります。
if([条件式]){
[処理]
}
else if([条件式]){
[処理]
}
else {
[処理]
}
処理を行う条件式を記述します。条件式はPage 4のループ継続条件と同じものが使用できます。
| 条件式 | 意味 |
|---|---|
| a == b | aがbと同じ場合 |
| a != b | aがbと異なる場合 |
| a < b | aがbより小さい場合 |
| a > b | aがbより大きい場合 |
| a <= b | aがb以下の場合 |
| a >= b | aがb以上の場合 |
| a == b || c == d | aとbが同じ、または、cとdが同じ場合 |
| a == b && c == d | aと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([判定変数]){
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はループを抜けるときにも使用できます。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;
}