分岐文
前回<C言語 演算子 【基礎 第8回】>までのところでIF文などの条件式で使用する演算子について述べました。
今回はもう一つの分岐文であるswitch文を取り上げたいと思います。
switch文の構造
switch文は条件式の値によって処理を複数に分けるものとなります。
switch文の書式は以下のようになります。
switch(条件式){ case 定数1: 文1 break; case 定数2: 文2 break; 複数のcase : default: 文3 }
switch文とif文との違いは、条件式の結果が整数値にならないといけないことです。
まず式の評価して、その結果の整数値に一致するcase定数式の処理が行われます。
caseの定数式は他のcaseとかぶってはいけません。
caseの内部の処理はbreak文まで処理が行われます。break文に当たるとそこで処理が終わり
switch文が終了します。
break文は必須ではありませんがbreak文がなかった場合、そのまま下のcaseの処理まで実行されることになります。
どのcaseにも当てはまらない場合、最後のdefault文のところの処理が行われることになります。
default文は省略することができます。
コードで確認
Switch文を使用してみましょう。
#include <stdio.h> int main(void){ int a = 10; switch( a ){ case 10: printf(“一つ目の処理をしていますn”); break; case 20: printf(“二つ目の処理をしていますn”); break; default: printf(“defaultの処理をしてますn”); } return (0); }
~~~~実行結果~~~~
一つ目の処理をしています
~~~~~~~~~~~~
先ほどのページのコードを見てみます。
青枠の部分がswitch文になります。switch文の最初のところでは変数aを評価しています。
変数aは値が10になっているので評価の結果最初のcaseのところに処理が飛びます。
このswitch文はIf文を使用して以下のように書き換えが可能です。
#include <stdio.h> int main(void){ if(a == 10){ printf("一つ目の処理をしています。n"); }else if(a == 20){ printf("二つ目の処理をしていますn"); }else{ printf("defaultの処理をしていますn"); } return (0); }
今回のswitch文で7行目の「break」をコメントアウトすると次のような実行結果となります。
#include <stdio.h> int main(void){ int a = 10; switch( a ){ case 10: printf(“一つ目の処理をしていますn”); case 20: printf(“二つ目の処理をしていますn”); break; default: printf(“defaultの処理をしてますn”); } return (0); }
~~~~実行結果~~~~
一つ目の処理をしています
二つ目の処理をしています
~~~~~~~~~~~~
「case 10:」のところに処理は飛びますがbreakがないため、そのまま下の処理まで進みます。
そのため2つ表示される形となります。
これもifで書いてみましょう
#include <stdio.h> int main(void){ if(a == 10){ printf("一つ目の処理をしています。n"); printf("二つ目の処理をしていますn"); }else if(a == 20){ printf("二つ目の処理をしていますn"); }else{ printf("defaultの処理をしていますn"); } return (0); }
変数aの値を100に変更すると次のような結果となります。
~~~~実行結果~~~~
defaultの処理をしています
~~~~~~~~~~~~
このようにswitch文はif文でも書き換えが可能となっていますが、switchでは定数となるものでしか分岐ができませんので
if文のような条件式は使用できません。
実践力が身につくC言語講座 連載リンク
競技プログラミングをイメージしたライブラリ活用講座
競技プログラミング風-標準Cライブラリ入門 連載
アルゴリズムをマスターして技術力アップ!
実践アルゴリズム講座 連載
パズルゲームの解析をテーマにしたC++講座
ゲーム解析プログラミング 連載