【問題5】switch文と多岐選択をマスターしよう!!完全マスター! 組み込みC言語プログラミング(6)(1/2 ページ)

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回は、複数選択処理に用いられるswitch文を使い、入力された月に該当する季節を表示するプログラムを作成します。

» 2014年06月24日 10時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
完全マスター! 組み込みC言語プログラミング(6)

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。


問題5「月から季節を判定」

前回の宿題(問題5):

何月かを入力し、表のようにその季節を表示するプログラムを作成してください。

季節
3、4、5
6、7、8
9、10、11
12、1、2


 今回は、「switch文」を紹介します。switchは、複数に分かれる選択処理に対応するための構文です。ちなみに、C言語の選択文はifとswitchの2つしかありません。

 switch文は「caseラベル」を選択肢とし、式の値に応じた処理を実行することができます。問題5は、「入力された月に該当する季節を表示する」問題でした。このような問題では、switch文を使うと見通しの良いプログラムが書けます。

 それでは、問題5の解答を「season.c」に示します。

#include <stdio.h>
 
int main(void)
{
        int month;
 
        printf("月を入力してください->");
        scanf("%d", &month);
        switch (month) {
        case 3: case 4: case 5:
                printf("春です\n");
                break;
        case 6: case 7: case 8:
                printf("夏です\n");
                break;
        case 9: case 10: case 11:
                printf("秋です\n");
                break;
        case 12: case 1: case 2:
                printf("冬です\n");
                break;
        default:
                printf("月が誤っています\n");
        }
}
問題5の解答「season.c」(switch文)

 season.cを実行すると、次のような結果になります。

実行結果 「season.c」の実行結果

switch文による多岐選択

 以下に、season.cのフローチャートを示します。“ひし形”のフローチャート記号は「選択」を意味し、int型の変数「month」の値に対応する処理を、以下の複数候補の中から選びます。選択肢が多数あることから「多岐選択」と呼ばれます。

フローチャート 「season.c」のフローチャート(switch文) ※画像クリックで拡大表示

 switch文の構文は次のようなものです。

switch ( 式 ) {
case 定数式(1) : 文の並び
case 定数式(2) : 文の並び
case 定数式(3) : 文の並び
     ……中略……
default : 文の並び
}

 switch文では、「switch」に続くかっこの中の式を評価します。式に1つの変数が記述されているswitch文をよく見掛けますが、計算式などを記述することも可能です。ただ、いずれの場合であっても式の値は整数でなければなりません。

 「case」はswitchに対応するラベルで、caseの後ろに定数を書いてswitchの値に対応する処理を示します。

 caseの一連の文の終わりには「break」を記述します。break文は、その時点でswitch文の実行を終了させて、プログラムの実行をswitchの後へ移動させます。ちなみに、C言語ではbreak文を分岐文(ifとswitchは選択文)と呼んでいて、break文はgoto文やreturn文などと同じ分類になっています。

 「default」もswitchに対応するラベルで、defaultに書かれた文は、switchの値とcaseの定数が1つも一致しないときに実行されます。switch文にdefaultはなくても構いません。その場合、switchに対応するcaseがなかったときは何も実行されません。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.