複数条件分岐
さて、条件に当てはまるときに命令や関数を実行する方法が分かりましたね。
それで、次にやるのは 条件が複数ある・複数の答えがある等上見聞記のパターンが複数ある時の記述をしてもらおうと思います。
そこで、使用するのが、「if()・else if()・else文」です。
解説すると
「最初に書いたif文の条件を調べて、その条件に当てはまらなかったら一つ下のelse if文の条件を確かめ、それにも当てはまらなかった場合はまた下位のelse if文の条件を確かめる。このif・else ifの条件の中で当てはまるものがあれば、その条件の次に書いたブロック内の内容を実行して、それ以降の条件は調べない。また、どの条件にも当てはまらない場合はelseで括られた内容を実行する。」
とりあえず以下のソースを見てください。
#include <stdio.h>
int main(void){
int i,j;
/*(0)*/
if(i>j){/*(1)*/
/*(1start)*/
/*(1end)*/
}else if(i<j){/*(2)*/
/*(2start)*/
/*(2end)*/
}else{/*(3)*/
/*(3start)*/
/*(3end)*/
}
/*(4)*/
return 0;
}
このソースの解説をすると、
- (1)の条件を確かめて、当てはまるなら、(1start)〜(1end)の内容を実行して(4)まで飛ぶ。当てはまらなかったら(2)の条件を確かめる。
- (2)の条件を確かめて、当てはまるなら、(2start)〜(2end)の内容を実行して(4)まで飛ぶ。当てはまらなかったら(3)の内容を実行する。
- (1)〜(2)の内容を確かめてみて、どれにも当てはまらなかったら(3start)〜(3end)の条件を確かめて、(4)に飛ぶ。
という事になります。
また、if()・else if()・else文には以下のような概要があります。
- else if()文はいくつでも記述できる。(if()・elseは一回のみ)
- else・else if()文は省略可能。
- if()・else if()文の中でどれかその条件に当てはまると、その条件が当てはまるときの内容を実行して、そのif()・else if()・else文のブロックを抜けてからそれ以降の条件は確かめない。(当然命令も実行しない)
ちなみに、前のソースで言うif()・else if()・else文のブロックは(0)〜(4)の範囲です。
このif・else if()・else文を使うに当たってもっとも注意しておきたいことは、当てはまる条件があったらそこで抜けてしまうということです。
なので、複数の条件に当てはまるということ等がありうるならば、以下のように書きます。
#include <stdio.h>
int main(void){
int i;
/*(B1start)*/
if(i>10){
}
/*(B1end)*/
/*(B2start)*/
if(i>5){
}
/*(B2end)*/
return 0;
}
これは、複数のif文を並べただけですね。これは(B1start)〜(B1end)・(B2start)〜(B2end)ごとに別のブロックになっているので上のブロックの条件が成立するか否かに関わらず、全ての条件を確かめます。
それでは、課題(クイズに近いかもw)をやっていただきましょう。
1.「山崎パン:あなたの職種は何ですか? 1:高校生 2:大学生」と表示して1が入力されたら、「工場での労働」。2が入力されたら「本社でのデスクワーク」。それ以外の数値が入力されたら「一昨日きやがれえええええええええええええ」と表示されるプログラムを作りなさい。
2.「点数を入力してください」と表示して、整数値を入力させて、
| 数域 |
出力する文字 |
| 100≧x≧80 |
優 |
| 80>x≧70 |
良 |
| 70>x≧60 |
可 |
| 60>x≧0 |
不可 |
| 上の四つ以外 |
懺悔 |
となるようなプログラムを作りなさい。
最終更新:2010年03月11日 15:05