★分岐構造4★


では、「成立していない」時だけ、プログラムを実行するには、どうすれば良いのでしょうか?

例えば、英語のテストの得点が80以上でなければ「不合格」と表示する。

というプログラムを作ってみましょう。









































解答例です。


<sample program 010-01>

#include <stdio.h>

int main(void)
{
    int english;

    printf("得点を入力してください:");

    scanf("%d", &english);

    if (english < 80) {
        printf("不合格\n");
    }

    return 0;
}

<実行結果>

得点を入力してください:79
不合格
続行するには何かキーを押してください・・・

「80点以上でない」ということは「80未満」ということです。

これに気づくか気づかないかが「分かれ道」になります。

「以下」と「未満」の違い、「以上」と「より大きい」の違い、日本語でのニュアンスを「はっきりと」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

※左側の条件が「成立している」ということは、右側の条件は「成立していない」ということです。


では、英語のテストの点数が「80以上」なら「合格」、「80未満」なら「不合格」と表示するプログラムを作るにはどうすれば良いのでしょうか?

単純に考えると次のようになります。

<sample program 010-02>

#include <stdio.h>;

int main(void)
{
    int english;

    printf("得点を入力してください:");

    scanf("%d", &english);

    if (english >= 80) {
        printf("合格\n");
    }

    if (english < 80) {
        printf("不合格\n");
    }

    return 0;
}

<実行結果1>

得点を入力してください:79
不合格
続行するには何かキーを押してください・・・

<実行結果2>

得点を入力してください:83
合格
続行するには何かキーを押してください・・・

「条件」が「成立」している時と、「成立していない」時で処理を分けています。

これは、次の文法でもう少しスマートに書くことが出来ます。


・if−else文


・if−else文の文法

if (条件) {
    条件が成立している時の処理
}
else {
    条件が成立していない時の処理
}

「条件」が「成立している」時の処理をifの「{」の中に書き、成立していない時の処理をelseの「{」に書きます。

「else」とは、「異なる(成立しない)」という意味です。

もしも、「条件」に書いてあることが、「成立していたら」最初の「{」から「}」までの命令が実行されます。

もしも、「条件」に書いてあることが、「成立していなかったら」else文の「{」から「}:までの命令が実行されます。

つまり、「成立」か「不成立」で実行するプログラムを分けることが出来るということです。

では、<sample program 010-02>のプログラムを「if−else文」で書いてみます


<sample program 010-03>

#include <stdio.h>

int main(void)
{
    int english;

    printf("得点を入力してください:");

    scanf("%d", &english);

    if (english >= 80) {
        printf("合格\n");
    }
    else {
        printf("不合格\n");
    }

    return 0;
}

<実行結果1>

得点を入力してください:79
不合格
続行するには何かキーを押してください・・・

<実行結果2>

得点を入力してください:83
合格
続行するには何かキーを押してください・・・

もしも(if)、英語の得点が「80以上であれば」「合格」と表示します。

そうでなければ(else)「不合格」と表示します。

「そうでない」という意味をしっかり理解してください。

この場合は、「80未満」ということになります。


では、if−else文を使った問題を出します。

入力した数値が、「偶数」であれば「入力データは偶数です。」

入力した数値が、「奇数」であれば「入力データは奇数です。」

と表示するプログラムを作ってみてください。









































解答例です。


<sample program 010-04>

#include <stdio.h>

int main(void)
{
    int input;

    printf("整数を入力してください:");

    scanf("%d", &input);

    if (input % 2) {
        printf("入力データは奇数です。\n");
    }
    else {
        printf("入力データは偶数です。\n");
    }

    return 0;
}

<実行結果1>

整数を入力してください:3
入力データは奇数です。
続行するには何かキーを押してください・・・

<実行結果2>

整数を入力してください:4
入力データは偶数です。
続行するには何かキーを押してください・・・

次は、入力した数値が「負の数」であれば、「マイナス」と表示し、「0(ゼロ)か正の数」であれば、「ゼロまたはプラス」と表示するプログラムを作ってみましょう。









































解答例です。


<sample program 010-05>

#include <stdio.h>

int main(void)
{
    int input;

    printf("整数を入力してください:");

    scanf("%d", &input);

    if (input < 0) {
        printf("マイナス\n");
    }
    else {
        printf("ゼロまたはプラス\n");
    }

    return 0;
}

<実行結果1>

整数を入力してください:-1
マイナス
続行するには何かキーを押してください・・・

<実行結果2>

整数を入力してください:0
ゼロまたはプラス
続行するには何かキーを押してください・・・

<実行結果3>

整数を入力してください:1
ゼロまたはプラス
続行するには何かキーを押してください・・・

次は、前に作ったプログラムに変更を加えてみます。

上のリンクのプログラムを変更して、

購入金額と支払金額を入力し、金額が不足していなければ「おつりは○円です。」

金額が不足していれば「代金が不足しています。」と表示するプログラムを作ってみましょう。









































解答例です。


<sample program 010-06>

#include <stdio.h>

int main(void)
{
    int pay;
    int buy;

    int change;

    printf("購入した金額を入力してください:");

    scanf("%d", &buy);

    printf("支払った金額を入力してください:");

    scanf("%d", &pay);

    change = pay - buy;

    if (change >= 0) {
        printf("おつりは%d円です。\n", change);
    }
    else {
        printf("代金が不足しています。\n");
    }

    return 0;
}

<実行結果1>

購入した金額を入力してください:578
支払った金額を入力してください:1000
おつりは422円です。
続行するには何かキーを押してください・・・

<実行結果2>

購入した金額を入力してください:578
支払った金額を入力してください:500
代金が不足しています。
続行するには何かキーを押してください・・・

では、入力した2つの数値の内、大きい方の数値を表示する、というプログラムを作ってみましょう。

人間にとって、数値の大小は「ぱっ」と見れば大抵分かります。

例えば、「1458」と「2876」はどちらが大きいですか?

すぐ分かりますよね。

でも、コンピュータは、きちんと比較しないと分からないのです。

要するに、皆さんが「こういう方法で調べたら、どっちが大きいか分かるよ」と教えてあげないといけないのです。

では、実行結果が以下のようになるよう、作ってみてください。

<実行結果>

1つ目のデータを入力してください:15
2つ目のデータを入力してください:10
大きいのは15です。
続行するには何かキーを押してください・・・









































解答例です。


<sample program 010-07>

#include <stdio.h>

int main(void)
{
    int input1;
    int input2;

    printf("1つ目のデータを入力してください:");

    scanf("%d", &input1);

    printf("2つ目のデータを入力してください:");

    scanf("%d", &input2);

    if (input1 > input2) {
        printf("大きいのは%dです。\n", input1);
    }
    else{
        printf("大きいのは%dです。\n", input2);
    }

    return 0;
}

<実行結果>

1つ目のデータを入力してください:15
2つ目のデータを入力してください:10
大きいのは15です。
続行するには何かキーを押してください・・・

「>」や「<」を使えば、大小関係がわかります。

こういう作り方もあります。


<sample program 010-08>

#include <stdio.h>

int main(void)
{
    int input1;
    int input2;

    int result;

    printf("1つ目のデータを入力してください:");

    scanf("%d", &input1);

    printf("2つ目のデータを入力してください:");

    scanf("%d", &input2);

    if (input1 > input2) {
        result = input1;
    }
    else{
        result = input2;
    }

    printf("大きいのは%dです。\n", result);

    return 0;
}

<実行結果>

1つ目のデータを入力してください:15
2つ目のデータを入力してください:10
大きいのは15です。
続行するには何かキーを押してください・・・

一旦、変数「result」に大きい方の数値を入れておき、最後に「result」の中身を出力します。

なんだか、無駄なように感じる方も、いるかもしれません。

変数が1つ増えることにより、プログラムも長くなっています。

しかし、「結果を入れる変数を作るか作らないか」は、後でこの値(この場合は大きい方の値)を使うかどうかで変わってきます。

このプログラムの後で、大きい方の値に対して、何らかの処理を行う場合は、その値を保管しておいた方が都合が良い場合もあります。

プログラムには「定石(こういう処理をする時は、このパターンを使う)」はあっても、「公式(これを当てはめれば絶対作れる)」は無いと思います。


では、次の問題です。

入力した、2つの値の小さい方の数値を表示してください。

<実行結果>

1つ目のデータを入力してください:15
2つ目のデータを入力してください:10
小さいのは10です。
続行するには何かキーを押してください・・・









































解答例です。


<sample program 010-09>

#include <stdio.h>

int main(void)
{
    int input1;
    int input2;

    printf("1つ目のデータを入力してください:");

    scanf("%d", &input1);

    printf("2つ目のデータを入力してください:");

    scanf("%d", &input2);

    if (input1 < input2) {
        printf("小さいのは%dです。\n", input1);
    }
    else{
        printf("小さいのは%dです。\n", input2);
    }

    return 0;
}

<実行結果>

1つ目のデータを入力してください:15
2つ目のデータを入力してください:10
小さいのは10です。
続行するには何かキーを押してください・・・

「>」を「<」に変えて、メッセージを「大きい」から「小さい」に変えただけです。

ところで、「大きい方の数値」や「小さい方の数値」を表示してみましたが、「同じ(等しい)」場合はどうなっているのでしょうか?

上の表にも書きましたが、「変数1<変数2」が「成り立たない」時は、「変数1>=変数2」が成り立っています。

つまり、「変数1<変数2」でなければ「変数1>=変数2」ですから、<sample program 010-06><sample program 010-07>の場合、「同じ(等しい)」場合は「不成立」の方のプログラム(else文)が実行されます。

では、「大きい場合」「小さい場合」「等しい場合」でそれぞれ処理を分けるにはどうすればよいでしょうか?

この説明は次回。


次へ

戻る

目次へ