C言語

【C言語】第2章第4回:switch文の活用とその利点

switch文は、複数の条件を効率的に処理するための構文です。この章では、switch文の基本構造と利点を学び、実用的なプログラム例を通じてその使い方を理解します。

1. switch文とは?

switch文は、1つの変数の値を基に複数の条件を簡潔に処理するための構文です。

基本構文

switch (式) {
    case 値1:
        // 値1の場合の処理
        break;
    case 値2:
        // 値2の場合の処理
        break;
    default:
        // どのケースにも該当しない場合の処理
}

特徴:

  • switch文は整数型または文字型の値を比較対象に使用します。
  • breakステートメントを使うことで処理を終了します。
  • defaultは任意ですが、設定しておくとどのケースにも該当しない場合の処理を記述できます。

2. switch文の基本例

以下のプログラムは、数字を入力し、それに対応する曜日を出力します。

#include <stdio.h>

int main() {
    int day;

    printf("Enter a number (1-7): ");
    scanf("%d", &day);

    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        case 4:
            printf("Thursday\n");
            break;
        case 5:
            printf("Friday\n");
            break;
        case 6:
            printf("Saturday\n");
            break;
        case 7:
            printf("Sunday\n");
            break;
        default:
            printf("Invalid input. Please enter a number between 1 and 7.\n");
    }

    return 0;
}

解説:

  • ユーザー入力に応じて対応する曜日を出力します。
  • defaultケースで、無効な入力に対するメッセージを表示します。
  • breakがない場合、次のケースの処理も続けて実行されるので注意が必要です。

3. breakを忘れた場合の動作

breakを忘れると、次のケースに処理が進んでしまうことがあります。

例:breakなしのswitch文

#include <stdio.h>

int main() {
    int number;

    printf("Enter a number (1-3): ");
    scanf("%d", &number);

    switch (number) {
        case 1:
            printf("One\n");
        case 2:
            printf("Two\n");
        case 3:
            printf("Three\n");
        default:
            printf("Invalid input.\n");
    }

    return 0;
}

解説:たとえばnumber == 1の場合、"One""Two""Three"がすべて出力されます。

4. switch文の利点

switch文の主な利点は以下の通りです:

  • 読みやすさ:複数のifelse if構造よりも簡潔に記述できます。
  • 効率性:switch文は、条件が多い場合にパフォーマンスが向上することがあります。

5. 練習問題

以下の課題に挑戦して、switch文の使い方を練習してください。

  1. 1〜12の数値を入力し、対応する月の名前を出力するプログラムを作成してください。
  2. 入力された文字('a', 'b', 'c')に応じて異なるメッセージを出力するプログラムを作成してください。
  3. 商品のコード(1〜5)を入力し、対応する商品の価格を出力するプログラムを作成してください。

6. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    int month;

    printf("Enter a number (1-12): ");
    scanf("%d", &month);

    switch (month) {
        case 1:
            printf("January\n");
            break;
        case 2:
            printf("February\n");
            break;
        case 3:
            printf("March\n");
            break;
        case 4:
            printf("April\n");
            break;
        case 5:
            printf("May\n");
            break;
        case 6:
            printf("June\n");
            break;
        case 7:
            printf("July\n");
            break;
        case 8:
            printf("August\n");
            break;
        case 9:
            printf("September\n");
            break;
        case 10:
            printf("October\n");
            break;
        case 11:
            printf("November\n");
            break;
        case 12:
            printf("December\n");
            break;
        default:
            printf("Invalid input. Please enter a number between 1 and 12.\n");
    }

    return 0;
}

問2の解答

#include <stdio.h>

int main() {
    char option;

    printf("Enter a character (a, b, c): ");
    scanf(" %c", &option);

    switch (option) {
        case 'a':
            printf("You chose option A.\n");
            break;
        case 'b':
            printf("You chose option B.\n");
            break;
        case 'c':
            printf("You chose option C.\n");
            break;
        default:
            printf("Invalid option.\n");
    }

    return 0;
}

問3の解答

#include <stdio.h>

int main() {
    int productCode;

    printf("Enter the product code (1-5): ");
    scanf("%d", &productCode);

    switch (productCode) {
        case 1:
            printf("Product 1: $10\n");
            break;
        case 2:
            printf("Product 2: $15\n");
            break;
        case 3:
            printf("Product 3: $20\n");
            break;
        case 4:
            printf("Product 4: $25\n");
            break;
        case 5:
            printf("Product 5: $30\n");
            break;
        default:
            printf("Invalid product code.\n");
    }

    return 0;
}

7. まとめ

switch文は、複数の条件を効率的に処理するための便利なツールです。条件が多いときは、適切に使いましょう!