2024年度
アルゴリズムとデータ構造1・演習

条件分岐(switch)

6回目のポイント

条件分岐の続きです.

switch文

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文を用いて書き直しなさい.

今日の課題

上記の課題5-1,5-2,5-3,5-4,5-5です.

課題はメールで提出して下さい.

件名はreport05,アドレスはalg01@elec.ryukoku.ac.jp です.