分かっていると思うが、念のため、これらの意味を書いておく。
if もしも〜ならば else さもなければ
| 書式 |
|---|
if(制御式)文; |
以下のようなプログラムが、この構文の使用例である。
if(a<=10) printf("aは、10以下です\n");
| 書式 |
|---|
if(制御式){
文1;
文2;
文3;
}
|
以下のようなプログラムが、この構文の使用例である。
if(0<=a && a<=10){
printf("aは、0以上\n");
printf("かつ\n");
printf("aは、10以下です\n");
}
| 書式 |
|---|
if(制御式){
文1;
文2;
文3;
}else{
文4;
文5;
文6;
}
|
以下のようなプログラムが、この構文の使用例である。
if(0<=a && a<=10){
printf("aは、0以上\n");
printf("かつ\n");
printf("aは、10以下です\n");
}else{
printf("aは、0未満\n");
printf("または\n");
printf("aは、10より大きい\n");
}
| 書式 |
|---|
if(制御式1){
文1;
文2;
}else if(制御式2){
文3;
文4;
}else if(制御式3){
文5;
文6;
}else{
文7;
文8;
}
|
この構文のフローチャートを、図8に示す。このフローチャートを見てわか るように、最初に真となった制御式に続くブロック内が実行されのみである。それ以降、 真になっても、そのブロックは実行されない。どの制御式も真にならない場合、最後の elseのブロックが実行される。即ち、実行されるブロックは1個のみである。 else ifの段数をいくらでも増やせることは、言うまでもない。
また、elseが無い構文も許される。この場合、真となる制御式がない場合、どの ブロックも実行されず、この構文から抜ける。
つぎのプログラムが、この構文の使用例である。
if(a < 0){
printf("aは、0以下\n");
}else if (0 <= a && a < 1){
printf("aは、0以上\n");
printf("かつ\n");
printf("aは、1未満\n");
}else if (1 <= a && a < 10){
printf("aは、1以上\n");
printf("かつ\n");
printf("aは、10未満\n");
}else{
printf("aは、10以上\n");
}
この構文のフローチャートを、図9に示す。これは、式の値により、それ にマッチしたブロック4が実行される。もし、どれもマッチしなければ、defaultが実行される。 default文は無くてもよいが、その場合はどのブロックも実行されない場合がある。
文の集まりのブロックの最後には、bread文を書く。この break 文が無いと、マッチしたブロック以降の他のブロックも実行される。コード ブロックを表す中括弧{}が無いので、こうすることになっている。この break文でswitch文の終わりを示す中括弧(})から
式や定数式の値の型は、intまたはcharでなくてはならない。定数式の方は、 コンパイル時に、評価できなくてはならない。
caseの後の定数式は、ラベルである。ラベルの後は、コロン(:)をつける。文 の終わりを示すセミコロン(;)ではない。
つぎのプログラムが、この構文の使用例である。
switch(a){
case 1:
printf("あなたは、1と答えました。\n");
printf("不正解です。\n");
break;
case 2:
printf("あなたは、2と答えました。\n");
printf("不正解です。\n");
break;
case 5:
printf("あなたは、5と答えました。\n");
printf("正解です\n");
break;
default:
printf("質問にまじめに答えろ。\n");
}