★分岐構造:条件の連結1★


これまで、「ネスト」について色々と書いてきましたが、もう少し違った考え方を紹介します。

まずは、例題を出しましょう。

以前に出した問題の応用なのですが、

入力した整数が0以上、100以下であれば、「入力したデータは0以上100以下の範囲にあります。」と表示し、それ以外であれば、「範囲外です。」と表示するプログラムを作ってみてください。

以前、作ったプログラムを参考に改良を加えてみてください。









































解答例です。


<sample program 015-01>

#include <stdio.h>

int main(void)
{
    int input;

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

    scanf("%d", &input);

    if (input >= 0) {
        if (input <= 100) {
            printf("入力したデータは0以上100以下の範囲にあります。\n");
        }
        else {
            printf("範囲外です。\n");
        }
    }
    else {
        printf("範囲外です。\n");
    }

    return 0;
}

<実行結果1>

整数を入力してください:0
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果2>

整数を入力してください:-5
範囲外です。
続行するには何かキーを押してください・・・

<実行結果3>

整数を入力してください:100
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果4>

整数を入力してください:101
範囲外です。
続行するには何かキーを押してください・・・

else文が2箇所にあります。

最初に、「0以上」かどうか調べます。

ここで、処理が2つに分かれます。

「0以上」であれば、「100以下」かどうか調べ、「0未満」であれば「範囲外」の表示を行います。

「100以下」であれば、「範囲内」のメッセージを表示し、「100より大きい」のであれば「範囲外」の表示を行います。

ですから、「0未満」の場合と、「100より大きい」場合の2箇所にelse文が必要になります。

これを次のように書き換えることが出来ます。


<sample program 015-02>

#include <stdio.h>

int main(void)
{
    int input;

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

    scanf("%d", &input);

    if (input >= 0 && input <= 100) {
        printf("入力したデータは0以上100以下の範囲にあります。\n");
    }
    else {
        printf("範囲外です。\n");
    }

    return 0;
}

<実行結果1>

整数を入力してください:0
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果2>

整数を入力してください:-5
範囲外です。
続行するには何かキーを押してください・・・

<実行結果3>

整数を入力してください:100
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果4>

整数を入力してください:101
範囲外です。
続行するには何かキーを押してください・・・

実行結果は、最初のプログラムと同じになっています。

「ぱっ」と見て、else文が1つ減っていますよね。

そして、if文の中に条件が2つ書いてあります。

よく見ると、条件の間に「&&」という記号が書いてあります。

これが条件をつなぐための記号の1つです。


条件をつなぐための命令


2つ以上の条件を連結させるための記号(命令)は2種類あります。

「&&」 アンド と読みます。

「||」 オア と読みます。

オアはキーボードで見ると、右上の「BackSpace」キーの左側、「¥」キーのところにあります。

Shiftキーを押しながら、「¥」キーを押すと「|」が入力されます。

意味としては、

「&&」 アンド は、一方の条件が成立し「しかも」もう一方の条件も成立していたら・・・

「||」 オア は、一方の条件が成立しているか「または」もう一方の条件が成立していたら・・・

となります。

要は、

  「&&」 アンド は、両方の条件が成立していた場合のみ「if文が成立」したことになります。
  「||」 オア は、どちらか一方の条件が成立していた場合に、「if文が成立」したことになります。

似たような感じがしますが、間違うとひどい目にあいます。

例えば、<sample program 015-02>の「&&」を「||」に変えてみましょう。


<sample program 015-03>

#include <stdio.h>

int main(void)
{
    int input;

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

    scanf("%d", &input);

    if (input >= 0 || input <= 100) {
        printf("入力したデータは0以上100以下の範囲にあります。\n");
    }
    else {
        printf("範囲外です。\n");
    }

    return 0;
}

<実行結果1>

整数を入力してください:0
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果2>

整数を入力してください:-5
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果3>

整数を入力してください:100
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

<実行結果4>

整数を入力してください:101
入力したデータは0以上100以下の範囲にあります。
続行するには何かキーを押してください・・・

何を入力しても「入力したデータは0以上100以下の範囲にあります。」というメッセージが表示されます。

なぜでしょうか。(ちょっと考えてみてください)

「||」 オア は、どちらか一方の条件が成立していれば、「if文が成立」したことになります。

上のプログラムを見ると、

変数「input」の中身が、0以上「または」100以下であれば、「成立」したことになります。

どちらかが成立していれば良いので、「-1」は100以下ですし、「101」は0以上です。

つまり、どんな数値を入力しても「成立」するのです。

これを頭に置いて、<sample program 015-02>を見てください。

「&&」 アンド は、両方の条件が成立していた場合のみ「if文が成立」したことになります。

変数「input」の中身が、0以上で「しかも」100以下であれば、「成立」したことになります。

両方成立していなければならないので、「-1」は範囲外ですし、「101」も範囲外です。


これを使って、2つのプログラムを考えてみてください。

国語と数学のテストの得点を入力し、

  1.両方とも80点以上で「合格」と表示

  2.どちらか一方が80点以上で「合格」と表示

するプログラムです。

「&&」と「||」を使って作ってみてください。









































1.の解答例です。


<sample program 015-04>

#include <stdio.h>

int main(void)
{
    int kokugo;
    int suugaku;

    printf("国語の点数を入力してください:");

    scanf("%d", &kokugo);

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

    scanf("%d", &suugaku);

    if (kokugo >= 80 && suugaku >= 80) {
        printf("合格\n");
    }

    return 0;
}

<実行結果1>

国語の点数を入力してください:80
数学の点数を入力してください:5
続行するには何かキーを押してください・・・

<実行結果2>

国語の点数を入力してください:80
数学の点数を入力してください:90
合格
続行するには何かキーを押してください・・・

<実行結果3>

国語の点数を入力してください:50
数学の点数を入力してください:50
続行するには何かキーを押してください・・・

2.の解答例です。


<sample program 015-05>

#include <stdio.h>

int main(void)
{
    int kokugo;
    int suugaku;

    printf("国語の点数を入力してください:");

    scanf("%d", &kokugo);

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

    scanf("%d", &suugaku);

    if (kokugo >= 80 || suugaku >= 80) {
        printf("合格\n");
    }

    return 0;
}

<実行結果1>

国語の点数を入力してください:80
数学の点数を入力してください:5
合格
続行するには何かキーを押してください・・・

<実行結果2>

国語の点数を入力してください:80
数学の点数を入力してください:90
合格
続行するには何かキーを押してください・・・

<実行結果3>

国語の点数を入力してください:50
数学の点数を入力してください:50
続行するには何かキーを押してください・・・

このように、2つ以上の条件をつなぐことができます。

ただし、「&&」と「||」を間違えると、まったく違った結果が出ますので、意味をしっかりと理解してください。

次回は、以前に作ったプログラムを書き換えて見ます。


次へ

戻る

目次へ