分岐と反復はプログラムを作成するにあたり、基本中の基本です。
この記事ではまず、分岐について学びましょう。
はじめに
C言語では、条件によってプログラムの実行を分岐させることができます。分岐処理には、if文、switch文、三項演算子などがあります。この記事では、それぞれの記述方法と例となるプログラムを紹介します。また、最後に演習課題を用意したので、ぜひ挑戦してみてください。
記述方法
if文
if文は、条件式が真のときに実行する処理を指定します。条件式は括弧で囲みます。実行する処理は波括弧で囲む必要があります。波括弧は省略できますが、可読性や保守性のために省略しない方が良いとされています。if文の基本的な形式は以下のようになります。
if (条件式) {
// 実行する処理
}
if文には、else節やelse if節を追加することができます。else節は、条件式が偽のときに実行する処理を指定します。else if節は、複数の条件式を順番に評価し、真となった最初の処理を実行します。else節やelse if節の基本的な形式は以下のようになります。
if (条件式1) {
// 条件式1が真のときに実行する処理
} else if (条件式2) {
// 条件式1が偽で条件式2が真のときに実行する処理
} else {
// すべての条件式が偽のときに実行する処理
}
switch文
switch文は、ある変数や式の値に応じて実行する処理を分岐させることができます。switch文では、break文を使って各分岐から抜ける必要があります。break文を忘れると、次の分岐も実行されてしまうため注意が必要です。switch文の基本的な形式は以下のようになります。
switch (変数や式) {
case 値1:
// 変数や式の値が値1と等しいときに実行する処理
break;
case 値2:
// 変数や式の値が値2と等しいときに実行する処理
break;
default:
// 変数や式の値がどれにも当てはまらないときに実行する処理
break;
}
三項演算子
三項演算子は、条件式を評価して真か偽かに応じて値を返す演算子です。三項演算子は、if文よりも簡潔に書くことができますが、複雑な条件や処理を書く場合は可読性が低くなるため注意が必要です。三項演算子の基本的な形式は以下のようになります。
条件式 ? 真のときに返す値 : 偽のときに返す値
条件式
C言語で使える条件式には次のようなものがあります。
例 | 意味 | |
< | a<b | aがbより小さい場合、真 |
<= | a<=b | aがb以下の場合、真 |
> | a>b | aがbより大きい場合、真 |
>= | a>=b | aがb以上の場合、真 |
== | a==b | aとbが等しい場合、真 |
!= | a!=b | aとbが等しくない場合、真 |
複数の条件式を組み合わせて使う場合は、次の論理演算子を使います。
例 | 意味 | ||
&& | 論理積 | (式1)&&(式2) | 式1と式2と両方が真の場合、真 |
|| | 論理和 | (式1)||(式2) | 式1と式2のどちらか片方が真の場合、真 |
! | 否定 | !(式1) | 式1が偽の場合、真となり、 式1が真の場合、偽となる。 |
プログラム例
以下では、それぞれの分岐処理を使った例となるプログラムを紹介します。
if文
以下のプログラムでは、ユーザーから整数を入力してもらい、その数が正か負かゼロかを判定して表示します。
#include <stdio.h>
int main(void) {
int num;
printf("整数を入力してください:");
scanf("%d", &num);
if (num > 0) {
printf("%dは正の数です。\n", num);
} else if (num < 0) {
printf("%dは負の数です。\n", num);
} else {
printf("%dはゼロです。\n", num);
}
return 0;
}
switch文
以下のプログラムでは、ユーザーから1から4までの整数を入力してもらい、その数に対応する季節を表示します。
#include <stdio.h>
int main(void) {
int season;
printf("1から4までの整数を入力してください:");
scanf("%d", &season);
switch (season) {
case 1:
printf("春です。\n");
break;
case 2:
printf("夏です。\n");
break;
case 3:
printf("秋です。\n");
break;
case 4:
printf("冬です。\n");
break;
default:
printf("不正な入力です。\n");
break;
}
return 0;
}
三項演算子
以下のプログラムでは、ユーザーから2つの整数を入力してもらい、そのうち大きい方の数を表示します。
#include <stdio.h>
int main(void) {
int a, b, max;
printf("2つの整数を入力してください:");
scanf("%d %d", &a, &b);
max = a > b ? a : b; // aとbのうち大きい方をmaxに代入
printf("大きい方の数は%dです。\n", max);
return 0;
}
演習課題
以下の演習課題に挑戦してみましょう。
- ユーザーから年齢を入力してもらい、その年齢に応じて適切なメッセージを表示するプログラムを作成してください。例えば、18歳未満なら「未成年です。」、18歳以上65歳未満なら「成人です。」、65歳以上なら「高齢者です。」と表示するようにしてください。
- ユーザーから月の番号(1から12まで)を入力してもらい、その月が何日あるかを表示するプログラムを作成してください。例えば、1なら「1月は31日あります。」、2なら「2月は28日あります。」と表示するようにしてください。ただし、閏年は考慮しなくて良いとします。
- ユーザーから2つの文字列を入力してもらい、その文字列が同じか異なるかを判定するプログラムを作成してください。例えば、「apple」と「apple」なら「同じ文字列です。」、「apple」と「banana」なら「異なる文字列です。」と表示するようにしてください。
コメント