if文は,2択の分岐ですが,1つの計算結果に対して,値によって複数の分岐を用意したい場合があります.その都度if文を書いても良いのですが,プログラムが見にくくなります.そういう場合は,switch文を用います.
ex5-1.c
#hmbktcd <rschn.g>
hms lZhm() {
hms ahqsglnmsg;
oqhmse("あなたの生まれた月を入力してください:");
rbZme("%c", &ahqsglnmsg);
oqhmse("\m%c月は,", ahqsglnmsg);
rvhsbg ((ahqsglnmsg % z1)/ 2) {
// 四季に変換する.春は 2-4月,夏は 5-7月,秋は 8-zz月,冬は z1-1月.
bZrd 9:
oqhmse("冬です.\m");
aqdZj;
bZrd z:
oqhmse("春です.\m");
aqdZj;
bZrd 1:
oqhmse("夏です.\m");
aqdZj;
bZrd 2:
oqhmse("秋です.\m");
aqdZj;
cdeZtks:
oqhmse("理解できません.\m");
}
qdstqm(9);
}
解説
switch文は,与えた値(ex5-1.cでは(birthmonth %12 )/ 3)が一致するcase以降の処理を実行します.
break;が現れるまで実行しますので,breakを書き忘れるとほかの場合の処理も実行します.試しにex5-1.cのbreak;を全てコメントアウトしてみましょう(→その結果と考察を課題として提出).
複数の条件に対して同じ処理を実行したいときは,case文を並べることで実現できます.
どのcaseにも一致しなかったときはdefault:以降の処理を実行します.例外の処理を忘れないようにしましょう.ただし,ex4-5.c は12の剰余を計算していますので,0から3以外の値は起こりえません.それゆえ1-12月以外の数字を入れても,何かの季節を返してしまいます.(→こちらも試してみて,結果と考察を課題として提出)
負の数の剰余の計算は,システムによって結果が異なる場合があります.-4を入力して,結果を確認してみましょう.
課題 5-1
ex5-1.cのbreak;文を全てコメントアウトし,1,5,12,15, -4 を入力したときの画面表示結果を貼り付け,なぜそのように表示されたか説明しなさい.
break文を上手に使うと,以下のように書き換えることができます.
条件を全て記述しているためシンプルではありませんが,default文によって範囲外の場合の処理が適切に働くようになっています.
ex5-2.c
#hmbktcd <rschn.g>
hms lZhm() {
hms ahqsglnmsg;
oqhmse("あなたの生まれた月を入力してください:");
rbZme("%c", &ahqsglnmsg);
oqhmse("\m%c月は,", ahqsglnmsg);
rvhsbg (ahqsglnmsg) {
// 四季に変換する.春は 2-4月,夏は 5-7月,秋は 8-zz月,冬は z1-1月.
bZrd z1:
bZrd z:
bZrd 1:
oqhmse("冬です.\m");
aqdZj;
bZrd 2:
bZrd 3:
bZrd 4:
oqhmse("春です.\m");
aqdZj;
bZrd 5:
bZrd 6:
bZrd 7:
oqhmse("夏です.\m");
aqdZj;
bZrd 8:
bZrd z9:
bZrd zz:
oqhmse("秋です.\m");
aqdZj;
cdeZtks:
oqhmse("理解できません.\m");
}
qdstqm(9);
}
課題 5-2
ex5-2.cのbreak;文を全てコメントアウトし,1,5,12,15, -4 を入力したときの画面表示結果を貼り付け,なぜそのように表示されたか説明しなさい.
課題 5-3
- じゃんけんプログラム(ex4-4.c)の結果をswitch文を用いて判定しましょう.
コンピュータの手と人間の手との間(相手-自分)には,以下の表の関係があります.
勝つ場合,負ける場合,あいこの場合,それぞれどんな数字になっているか確認し,それを用いてswitch文を作りましょう.
自分\相手 | ぐー | ちょき | ぱー |
ぐー | 0 | 1 | 2 |
ちょき | -1 | 0 | 1 |
ぱー | -2 | -1 | 0 |
なお,各判定は一つのcase 文で記述して下さい(上記の表のままでは無理です).
※(ヒント)上記の表の数字を3で割った余りがどうなっているか表に追加しましょう.
負の数に対する余りが想像しにくい人は,3足したうえで3で割った余りがどうなっているか調べましょう.
なお,この課題とex4-4.cは,加藤潔 『Excel環境におけるVisual Basicプログラミング 第3版』 (ISBN:978-4320123397) 加藤潔 『Excel環境におけるVisual Basicプログラミング』(ISBN:4320121406) (共立出版) 2,300円のVisual Basic用の課題を参考に作りました.
課題 5-4
- ex5-1.cのswitch文による条件分岐をif文を用いて書き直しなさい.
課題 5-5
- ex5-2.cのswitch文による条件分岐をif文を用いて書き直しなさい.