条件分岐 switch

Last-modified: 2012-12-26 (水) 11:17:04
 

今回の目的

switch 文を理解し、if, switch 文の相互変換ができるようにすることが目的です。

switch 文とは

前回やった if 文と同様、分岐を実現するための構造です。
switch 文を使うと、ある特定の if 文を、より効率的に (早く) 動作させることができます。

C言語では、if 文を使えば、すべての条件分岐を実現することができます。
そのため、switch 文でかけるものは、すべて if 文でも記述できます。

switch 文の例

次のような if 文があったとします。

if(a == 0){
    printf("zero\n");
}

else if(a == 1){
    printf("one\n");
}

else if(a == 2){
    printf("two\n");
}

else {
    printf("other\n");
}

この if 文は、次のような switch 文に置き換えができます。

switch(a){
case 0:
    printf("zero\n");
    break;
case 1:
    printf("one\n");
    break;
case 2:
    printf("two\n");
    break;
default:
    printf("other\n");
}

switch 文に置き換えができる if 文の条件は以下のとおりです。

  • 同じ変数に対し == で比較している
  • 複数の条件をでない (&& とかを使っていない)

条件を満たしたときに、switch 文に置き換えると次のようなメリットがあります。

  • 高速に動作する
  • 比較する値 (上の例では a) の書き換えが簡単
  • ミスが少なくなる (== を = と書いたり、条件を間違えたりすることが無い)

一方、次のようなデメリットがあります。

  • 記述が長くなる

if 文を使用するか、switch 文を使用するかは、個人の好みによるものが大きいです。
無理して switch 文を使用する必要はありません。

しかし、C言語やJavaをはじめとした多くの言語で利用できることから分かる通り、
場所を選んで使えば便利なものです。

最低限、人の書いたソースコードを読める程度には理解しましょう。

switch 文の形式

switch 文は次のような形式をしています。

switch(比較する値){
case 値1:
    値1の場合の処理;
    break;
case 値2:
    値2の場合の処理;
    break;
default:
    どの値でもない場合の処理;
}

break はこの switch 文を抜けろという意味です。
これを書かない場合、下に続く文が全て実行されてしまいます。

default に関しては、必要がない場合は記述しなくても問題ありません。

課題

課題1

標準入力から整数を1つ読み込み、数値に応じて

  • 0 の場合は F
  • 1 の場合は C
  • 2 の場合は B
  • 3 の場合は A
  • 4 の場合は AA

と表示しなさい。

if 文は使用しないこと。

課題2

条件分岐 ifの課題1を、switch 文を使って書き直しなさい。