1. switch文の基本
if~else if~else~は、多方向分岐を行う制御構造でした。しかし、選択肢が多く、それぞれの条件が具体的な値に基づく場合にはswitch文を使う方がシンプルでわかりやすくなります。
【書き方】
switch (式) {
case定数式1:
文1;
break;
case定数式2:
文2;
break;
:
:
case定数式n:
文n;
break;
default:
文;
break;
}
【フローチャート】

式の値が
定数式1 と等しければ、文1 実行
定数式2 と等しければ、文2 実行
定数式n と等しければ、文n 実行
それ以外ならば、文実行
switch文の使用例 サンプルプログラム
#include <stdio.h>
int main( void )
{
int a;
printf("整数値> ");
scanf("%d", &a);
switch (a) {
case 1:
printf("a = 1\n");
break;
case 3:
printf("a = 3\n");
break;
case 5:
printf("a = 5\n");
break;
default:
printf("others\n");
break;
}
return 0;
}
【実行結果例】
整数値> 3
a = 3
※ 水色文字はキーボードからの入力
2. switch文の注意事項
- 「break」に出会うとswitchの {} を抜ける。
「break」がないと、それ以下の文を全て実行してしまうので、「break」を忘れないこと。 - 一致する定数式がないときは、「default」部分に記述された文を実行。「default」部は省略可。
- 文は複数行の文も可。ただし、複数行でも { } は不要。
- 「式」は整数を結果とするもののみ可。
正しい式 誤った式 int a; switch (a) switch (a + 10)
char moji; switch (moji)
float a; switch (a)
- 「定数式」は整数、文字定数、定数の式のみ。
その他はelse ifを用いる。
正しいcase句の例 case 1: (整数) case 'A': (文字定数) case LIMIT: (記号定数)
誤ったcase句の例 case 0.1: (浮動小数点数は不可) case x > 5: (大小比較は不可) case "XYZ": (文字列は不可)
3. 複数 case句を使った switch文
分岐先を示す case句を複数つけた switch文。
#include <stdio.h>
int main( void )
{
int a;
scanf("%d", &a);
switch (a) {
case 10:
case 11:
case 12:
printf("10 ~ 12\n");
break;
case 13:
case 14:
case 15:
case 16:
printf("13 ~ 16\n");
break;
case 17:
case 18:
printf("17, 18\n");
break;
default:
printf("その他\n");
break;
}
return 0;
}

〇 演習問題
問1
scanf関数を用いて計算方法 ( + – * / ) と2個の整数を入力し、計算方法によって、2個の整数の計算を行いなさい。ただし、除算を指定した場合には 0 で割り算をしないこと。
【実行結果例】
計算方法の入力( + – * / )+
整数値1の入力 12
整数値2の入力 22
kekka = 34
※ 水色文字はキーボードからの入力
問2
scanf関数で 1~10 までの整数値を1個入力し、入力した値により、以下の処理を行いなさい。
- 入力した数字が 1 か 2 か 3 なら “1: one 2: two 3: three” と表示する。
- 入力した数字が 4 か 5 か 6 なら “4: four 5: five 6: six” と表示する。
- 入力した数字が 7 か 8 か 9 か 10 なら “7: seven 8: eight 9: nine 10: ten” と表示する。
- それ以外なら “number input err” と表示する。
【実行結果例】
input number( 1-10 ) 5
4:four 5:five 6:six
※ 水色文字はキーボードからの入力
解答例
// 問1
#include <stdio.h>
int main(void)
{
char houhou;
int data1, data2, kekka = 0;
printf("計算方法の入力( + - * / )");
scanf("%c", &houhou);
printf("整数値1の入力 ");
scanf("%d", &data1);
printf("整数値2の入力 ");
scanf("%d", &data2);
switch (houhou) {
case '+':
kekka = data1 + data2;
break;
case '-':
kekka = data1 - data2;
break;
case '*':
kekka = data1 * data2;
break;
case '/':
if (data2 != 0)
kekka = data1 / data2;
else
printf("0で割ることはできません\n");
break;
default:
printf("計算方法の入力エラーです\n");
break;
}
printf("kekka = %d\n", kekka);
return 0;
}
// 問2
#include <stdio.h>
int main(void)
{
int no;
printf("input number( 1-10 ) ");
scanf("%d", &no);
switch (no) {
case 1:
case 2:
case 3:
printf("1:one 2:two 3:three\n");
break;
case 4:
case 5:
case 6:
printf("4:four 5:five 6:six\n");
break;
case 7:
case 8:
case 9:
case 10:
printf("7:seven 8:eight 9:nine 10:ten\n");
break;
default:
printf("number input error\n");
break;
}
return 0;
}
コメント