C言語のswitch文:初めての人向けのガイド
こんにちは、将来のプログラマーたち!今日は、C言語のプログラミングで非常に有用な制御構造の一つ、switch文について深く掘り下げます。新しいことを学ぶことに不安を感じるかもしれませんが、心配しないでください。私はこれまでに数多くの生徒を指導してきましたので、ステップバイステップで説明します。お気に入りの飲み物を片手に、このコーディングの冒険に一緒に参加してください!
switch-case文とは?
アイスクリーム屋でフレーバーを選ぶとしましょう。バニラ、チョコレート、ストロベリー、ミントがあります。それぞれの選択は、カップに違うスcoopが入ります。これがプログラミングにおけるswitch文の動作と非常に似ています!
switch文は、変数または式の値に基づいて異なるコードブロックを実行するための制御フロー文です。これは、複数のif-else文のより洗練された、効率的なバージョンです。
switch-case文の構文
switch文の基本構造を見てみましょう:
switch (expression) {
case constant1:
// expressionがconstant1に等しい場合に実行するコード
break;
case constant2:
// expressionがconstant2に等しい場合に実行するコード
break;
...
default:
// expressionがどの定数にも一致しない場合に実行するコード
}
初めて見ると少し威圧的な感じかもしれませんが、少しずつ分解して説明します。
主要な要素:
-
switch
:switch文を開始するためのキーワード。 -
expression
:評価される値。 -
case
:expressionの可能な値のそれぞれ。 -
break
:各caseブロックを終了するためのキーワード。 -
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;
}
この例では:
-
grade
という変数が'B'に設定されています。 - switch文は
grade
を評価します。 - 各caseと比較し、一致するものを見つけます(この場合は'B')。
- 一致したcaseのコードを実行します("Well done!")。
-
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