制御文とは

プログラムは基本的に上から下に向かって処理を行っていきますが、プログラムの内容によっては、同じことを100回繰り返したい時や、条件によって違ったことをさせたい場合もありますね。
C言語でそういったことを実現するために、制御文というものがあります。
制御文には、条件分岐と繰り返しがあります。

条件分岐

ある条件が成立するか、しないかによって、実行する文やブロックを選択できるようにするのが条件分岐です。

C言語で条件分岐を実現するには、 if-else文、switch文を使用します。

if-else文

ifが「もし〜ならば」を表し、elseが「そうでなければ」を表します。

if-else文には以下の3つの書き方があります。

  • if文
  • if-else文
  • if-else-elseif文

if文

条件が成立すると文1と文2を実行しますが、そうでなければ何も実行されません。

if (条件) {
        文1;
        文2;
}

if-else文

条件が成立すると文1と文2を実行しますが、そうでなければ文3、文4を実行します。

if (条件) {
        文1;
        文2;
} else {
        文3;
        文4;
}

if-elseif-else文

条件1が成立すると文1と文2を実行します。
条件1が成立せず、条件2が成立すれば、文3と文4が実行されます。
条件1も条件2も成立しなければ、文5と文6が実行されます。

if (条件1) {
        文1;
        文2;
} else if (条件2) {
        文3;
        文4;
} else {
        文5;
        文6;
}

サンプルプログラム

では、実際にC言語で条件分岐をやってみましょう。ファイル名は、branch00.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>

int main(void)
{
        int a;

        printf("整数値を入力してください。\n");
        printf("-->");
        scanf("%d", &a);

        if (a < 5) {
                printf("aは5未満です。\n");
        }

        if (a >= 3) {
                printf("aは3以上です。\n");
        } else {
                printf("aは3未満です。\n");
        }

        if (a >= 1) {
                printf("aは正の数です。\n");
        } else if (a == 0) {
                printf("aはゼロです。\n");
        } else {
                printf("aは負の数です。\n");
        }

        return 0;
}

条件を組み合わせる

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が等しくない時成立

論理演算子

演算子 書き方 意味
&& A && B Aという条件が成立する かつ Bという条件も成立するとき
|| A || B Aという条件が成立する または Bという条件が成立するとき
! !A Aという条件が成立しないとき

サンプルプログラム

では、C言語で「条件の組み合わせ」を使ってみましょう。ファイル名は、waribiki.cとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>

int main(void)
{
        char gender;
        int age;

        printf("性別を入力してください。(男: m, 女: f)\n");
        printf("-->");
        scanf("%c", &gender);

        printf("年齢を入力してください。\n");
        printf("-->");
        scanf("%d", &age);

        // 18歳以下の女子
        if (age <= 18 && gender == 'f') {
                printf("18歳以下の女子です。\n");
                printf("JK割引!\n");
        }

        // 60歳以上
        if (age >= 60) {
                printf("60歳以上です。\n");
                printf("シニア割引!\n");
        }

        return 0;
}

練習問題

1. 女性と子供の安心車両判定プログラム

性別を格納する(男性はm、女性はf)char型変数genderと、年齢を格納するint型変数ageを宣言してください。
以下の条件をみたすときに、「女性と子供の安心車両に乗ることができます。」と表示するプログラムを作成してください。ファイル名は sapporo.c とします。

  • 女性(genderが’f’の時)
  • 12歳以下

2. FizzBuzz問題

キーボードから1〜1000までの数を入力し、3の倍数ならFizz、5の倍数ならBuzz、3と5の倍数ならFizzBuzzと表示するプログラムを作成しなさい。1〜1000以外の数が入力されたらErorrと出力してください。3や5の倍数でない数はその数をそのまま表示してください。ファイル名はfizzbuzz.cとします。