第13章 さらに条件分岐

 しつこいようですが、今回も if 文です。しかし、前回のように同じ事をやるのではなく、条件文のもう1つの書き方について話します。


 今回の要点です。


 では、いってみましょう。


 ある事を判別する関数を作るとします。例えば前回の関数 ChangeToShohwa なんかがそうです。

 その際、いちいち == 0 とかを付けるのは面倒です。それよりは

if(ChangeToShohwa(a)) ...

とした方が視覚的にも関数が成功したかどうかを判定する文に見えます。

 C/C++言語ではもちろんこのような表記が使用できます。それだけでなく変数を

if(a) ...

のように置くだけというのも可能です。

 これは、条件式には数値を用いることもできるということを示します。0は偽、0でないときは真となります。

 つまり、失敗したときに0を返すようにすれば、この表記が可能なのです。

 では、これを踏まえて、次のプログラムを見て下さい。

プログラム実行結果
// If3b.cpp
#include <iostream.h>

int ChangeToShohwa(int a)
{
    if(1926 <= a && a <= 1989)
        return a - 1925;
    else
        return 0;
}

void Shohwa()
{
    int a;

    cout << "西暦を入力して下さい > ";
    cin >> a;

    if(ChangeToShohwa(a))
        cout << "その年は昭和 " << ChangeToShohwa(a)
             << " 年です。" << endl;
    else
        cout << "その年は昭和ではありません。" << endl;
}

int main()
{
    Shohwa();
    Shohwa();
    return 0;
}
西暦を入力して下さい > 1979
その年は昭和 54 年です。
西暦を入力して下さい > 1999
その年は昭和ではありません。

 視覚的にも意味のとりやすいプログラムになりましたね。

 また、数値にも &&, ||, ! を使うことができます。数値と条件式を混在させても構いません。


 ここで鋭い人はこう考えるでしょう。「条件式に数値を使えるのなら、条件式を数値として使えるのではないか?」と。

 もちろん使えます。真は1、偽は0となります。

 では、次のプログラムを見て下さい。

プログラム実行結果
// Require1.cpp
#include <iostream.h>

void Points()
{
    int a;

    cout << "テストは何点でしたか > ";
    cin >> a;

    cout << "へー、" << a * (0 <= a && a <= 100)
         << " 点でしたか。" << endl;
}

int main()
{
    Points();
    Points();
    return 0;
}
テストは何点でしたか > 87
へー、87 点でしたか。
テストは何点でしたか > -273
へー、0 点でしたか。

 if がないのに、a が無効な値の時は a を0にするという処理を行っています

 あと、条件式はカッコで囲んで下さい。条件に使う演算子は優先順位が低いからです。


 次回はいよいよループ処理に入ります。これで同じ処理を複数回行うとき、それだけコピーするという必要がなくなります。

 では、今回の要点です。


 また次回まで。さようなら。


第12章 もっと条件分岐 | 第14章 ループの仕方

Last update was done on 1999.3.15

この講座の著作権はロベールが保有しています