C言語のswitch文:初めての人向けのガイド

こんにちは、将来のプログラマーたち!今日は、C言語のプログラミングで非常に有用な制御構造の一つ、switch文について深く掘り下げます。新しいことを学ぶことに不安を感じるかもしれませんが、心配しないでください。私はこれまでに数多くの生徒を指導してきましたので、ステップバイステップで説明します。お気に入りの飲み物を片手に、このコーディングの冒険に一緒に参加してください!

C - switch statement

switch-case文とは?

アイスクリーム屋でフレーバーを選ぶとしましょう。バニラ、チョコレート、ストロベリー、ミントがあります。それぞれの選択は、カップに違うスcoopが入ります。これがプログラミングにおけるswitch文の動作と非常に似ています!

switch文は、変数または式の値に基づいて異なるコードブロックを実行するための制御フロー文です。これは、複数のif-else文のより洗練された、効率的なバージョンです。

switch-case文の構文

switch文の基本構造を見てみましょう:

switch (expression) {
case constant1:
// expressionがconstant1に等しい場合に実行するコード
break;
case constant2:
// expressionがconstant2に等しい場合に実行するコード
break;
...
default:
// expressionがどの定数にも一致しない場合に実行するコード
}

初めて見ると少し威圧的な感じかもしれませんが、少しずつ分解して説明します。

主要な要素:

  1. switch:switch文を開始するためのキーワード。
  2. expression:評価される値。
  3. case:expressionの可能な値のそれぞれ。
  4. break:各caseブロックを終了するためのキーワード。
  5. default:どのcaseにも一致しない場合に実行されるオプションのブロック。

switch-case文の動作

実際にどう動作するのか、簡単なプログラムの例を見てみましょう。学生の成績に基づいてメッセージを表示するシンプルなプログラムを作成します:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
printf("Excellent!");
break;
case 'B':
printf("Well done!");
break;
case 'C':
printf("Good job!");
break;
case 'D':
printf("You passed.");
break;
case 'F':
printf("Better luck next time.");
break;
default:
printf("Invalid grade");
}

return 0;
}

この例では:

  1. gradeという変数が'B'に設定されています。
  2. switch文はgradeを評価します。
  3. 各caseと比較し、一致するものを見つけます(この場合は'B')。
  4. 一致したcaseのコードを実行します("Well done!")。
  5. breakステートメントでswitchブロックを終了します。

gradeがどのcaseにも一致しない場合、defaultブロックが実行されます。

switch-case文のフローチャート

switch文の動作を視覚的に理解するために、フローチャートを見てみましょう:

+-------------+
|   Start     |
+-------------+
|
v
+-------------------+
| Evaluate expression|
+-------------------+
|
v
+----------------------+
| Compare with case 1  |
+----------------------+
|
v
+-------------+
|    Match?   |
+-------------+
Yes |     | No
|     |
v     v
+-----------------+    +----------------------+
| Execute case 1  |    | Compare with case 2  |
+-----------------+    +----------------------+
|                     |
v                     v
+-----------+         +-------------+
|   Break   |         |    Match?   |
+-----------+         +-------------+
|               Yes |     | No
|                   |     |
|                   v     v
|         +-----------------+    +------------+
|         | Execute case 2  |    |   ...      |
|         +-----------------+    +------------+
|                   |
|                   v
|            +-----------+
|            |   Break   |
|            +-----------+
|                   |
v                   v
+-----------+        +-----------+
|    End    | <------| Default   |
+-----------+        +-----------+

このフローチャートは、switch文が各caseを評価し、一致したブロックを実行する方法を示しています。

switch-case文の使用ルール

switch文を効果的に使用するために、以下のルールを覚えておきましょう:

ルール 説明
式の型 switchの式は整数型(int、charなど)または列挙型でなければならない。
caseの定数 caseラベルは定数またはリテラル値でなければならず、変数ではならない。
独自のcase 各case値はswitch文中で唯一でなければならない。
breakステートメント caseが実行された後、breakを使用してswitchブロックを終了する。
defaultブロック defaultブロックはオプションで、switchブロックのどこにでも配置できる。

もっとswitch-case文の例

理解を深めるために、いくつかの追加例を見てみましょう。

例1:週の日

#include <stdio.h>

int main() {
int day = 4;

switch(day) {
case 1:
printf("Monday");
break;
case 2:
printf("Tuesday");
break;
case 3:
printf("Wednesday");
break;
case 4:
printf("Thursday");
break;
case 5:
printf("Friday");
break;
case 6:
printf("Saturday");
break;
case 7:
printf("Sunday");
break;
default:
printf("Invalid day number");
}

return 0;
}

このプログラムは「Thursday」を表示します because dayは4に設定されています。

例2:計算機

#include <stdio.h>

int main() {
char operator;
double n1, n2;

printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two operands: ");
scanf("%lf %lf",&n1, &n2);

switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf", n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf", n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf", n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf", n1, n2, n1/n2);
break;
default:
printf("Error! operator is not correct");
}

return 0;
}

このプログラムはシンプルな計算機を作成しています。

複数のcaseを結合してswitch文

時々、複数のcaseが同じコードを実行する必要があります。caseを一緒にリストアップしてこれを行うことができます:

#include <stdio.h>

int main() {
char grade = 'B';

switch(grade) {
case 'A':
case 'B':
case 'C':
printf("You passed!");
break;
case 'D':
case 'F':
printf("You need to improve.");
break;
default:
printf("Invalid grade");
}

return 0;
}

この例では、A、B、Cの成績はすべて「You passed!」、DとFは「You need to improve.」と表示されます。

そして、ここまででC言語のswitch文について学びました。実践で練習を重ねることで、自然と使いこなすことができるようになります。自分でswitch文を書いて、さまざまなシナリオを試してみてください。間もなく、switch文の達人になるでしょう!

ハッピーコーディング、そしてあなたのswitch文が常に正しいcaseを見つけることを祈っています!

Credits: Image by storyset