いよいよプログラムらしいif文が出てきます(^^)  条件に応じた処理1


1.条件分岐と流れ図

 
ここまでのプログラムは、何度実行しても同じ順に同じ処理をするものばかりでした。このページから、場合に応じて異なる処理をするプログラムの説明をします。

 実数xを入力してxの平方根を求めて出力するプログラムを考えましょう。sqrt(x)の計算をするとき、(実数の範囲なら)xは正か0でなければなりません。xが負のときは、計算できません。そこで、このプログラムの処理手順は…

(1)プログラムの説明をして、xの値を入力する。
(2)xの値が正か0なら、sqrt(x)を求めて出力する。
(3)xの値が負ならば、何もしない…
 のようになります。左の図は、このような処理の流れを表したものです。このような図は、「流れ図」とか「フローチャート」とか呼ばれています。
流れ図は、特定のプログラミング言語ではなく、処理の手順を図で表したものです。
 流れ図では、左右が丸い記号で始まりと終わりの端子を表します。四角の記号は処理を記述するときに使います。条件によって処理を変えるのは、菱形の記号(条件分岐)です。左の図のように、菱形の中に条件を書き菱形の頂点から(普通は)2本の線を出し、一方を「Yes」(条件が真)、他方を「No」(条件が偽)にします。

 真ん中の菱形の記号を見てみましょう。条件は、「xが正か0」。この条件に当てはまるとき(真のとき)は「Yes」のほうの線を進みます。「Yes」の方には、「sqrt(x)を求めて出力」という処理があります。一方、条件に当てはまらないとき(偽のとき)は「No」のほうに進みます。「No」のほうは何も処理がなく、「Yes」の線に合流します。

このような処理をプログラムで書くときに使うのが「if文」です。書き方は、

    if ( 条件式 ) 実行する文またはブロック

です。実行する文が1つのときはそのまま書けばよいのですが、実行したい文が2つ以上ある場合は、「{」と「}」で範囲を指定して、その中に複数の文を書きます。例えば、

   (1) if(x > 0) printf("xは正の数です\n");

   (2) if(x > 0)
     {
         printf("xは正の数です\n");
         x = x + s;
     }

(1)のif文の実行文は1つだけです。1つだけのときは、{}で囲まなくても大丈夫です(エラーを減らすために、1つでも{}で囲むことを薦めている本もあります)。
(2)のif文の実行文は2つあります。そこで、「{」と「}」で囲んでブロックにしています。条件が真のときは、ブロック内の全ての文が実行されます。

 では、上の処理をプログラムで書いてみましょう。

プログラム例(rei7.c)
#include <stdio.h>
#include <math.h>
main()
{
        double x;
        printf("入力された実数xの平方根を求めます\n");
        printf("x = ");
        scanf("%lf", &x);
        if(x >= 0.0)
                printf("xの平方根は%lf\n", sqrt(x));
}