C言語

条件の判定

条件に応じて処理をおこなう文を条件判断文といいます。今回は、条件の判定を行うために使用する if文 を使って基本的な条件分岐について学びます。
if文の前に条件の仕組みについて簡単に説明します。

条件の仕組み

プログラムの世界では、条件により、 または のどちらかの結果になります。
例えば、「変数の値が10である。」という条件だとすると、
変数の値が10の場合、「真」
変数の値が10以外の場合、「偽」
このように条件を満たした場合を「真」と呼び、満たさなかった場合は、「偽」と呼びます。

また、等しい、以上 など、条件を作るために使う演算子のことを関係演算子などと呼びます。

またはは、条件の場合だけではなく、数値が0以外の場合は、となり、数値が0の場合は、偽とになります。

関係演算子の種類

関係演算子の基本的な種類は次の表になります。

演算子 内容
== 右辺と左辺が等しい
!= 右辺と左辺が等しくない
> 右辺が左辺より大きい
>= 右辺が左辺以上
< 右辺より左辺が大きい
<= 右辺が左辺以下

関係演算子の == は、代入演算子(=)と間違えると、コンパイラではエラーとならないため、予期しない動作になることがあります。

この関係演算子を用いて条件を判定を行う文として、if文 があります。

if文の基本的な使い方

if文は、条件が真の場合に指定した文を処理するという構文です。
if文の構文は次のようになっています。

構文

if( 条件式 )
{
文 ;
}

条件式の結果がの場合、if文の後の文を実行しますし、の場合は、文の処理はスキップされます。
if文には、セミコロンをつけません。

数値が0以外の場合 を条件式にしているサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number;

    scanf("%d", &number);

    if( number )
    {
        printf("0以外が入力されました。¥n");
    }
    return 0;
}

このプログラムを実行し、0以外の数値を入力した場合は、printf関数の文字が表示されて、0を入力した場合は、何も表示されない結果になります。

実行結果

1       ←入力したデータ
0以外が入力されました。

実行結果

0       ←入力したデータ

上のサンプルプログラムでは、if文中に変数のみ記述しました。この記述でも問題ないのですが、このif文を関係演算子を使った条件式にすると以下のようになります。
if( number != 0 )
この条件式は、「numberが0以外」を意味します。サンプルプログラムのif文と同じ意味になります。こちらのほうがわかりやすいのではないでしょうか。
このため、開発現場によっては、コーディングルールで、サンプルプログラムのような書き方をNGにしているところがあります。

次に== と、!= の関係演算子を使用した条件式のサンプルプログラムを次の示します。

#include <stdio.h>

int main(void)
{
    int number;

    scanf("%d", &number);

    if( number == 0 )
    {
        printf("0が入力されました。¥n");
    }
    if( number != 0 )
    {
        printf("0以外が入力されました。¥n");
    }
    return 0;
}

このプログラムを実行し、 0と0以外を入力した結果は次のようになります。

実行結果

0 ←入力したデータ
0が入力されました。

実行結果

2 ←入力したデータ
0以外が入力されました。

0を入力した場合、numberと、0が等しいため、9行目は真となり、13行目は偽となります。その結果、11行目のprintf関数が実行させました。
2を入力した場合、numberと、0が等しくないため、 9行目は偽となり、13行目は真となります。 その結果、15行目が実行されました。

次は、< や <= を使用した条件式のサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number;

    scanf("%d", &number);

    if( number < 5 )
    {
        printf("5未満が入力されました。¥n");
    }
    if( number <= 5 )
    {
        printf("5以上が入力されました。¥n");
    }
    return 0;
}

このプログラムを実行し、 4と5以外を入力した結果は次のようになります。

実行結果

4 ←入力したデータ
5未満が入力されました。

実行結果

5 ←入力したデータ
5以上が入力されました。

4を入力した場合、numberが5より小さいため、9行目は真となり、13行目は偽となります。その結果、11行目のprintf関数が実行させました。
5を入力した場合、numberが5以上のため、 9行目は偽となり、13行目は真となります。 その結果、15行目が実行されました。

関係演算子を使用した条件式は以上になります。

if文の書き方で、ブロック( { } )を使用していましたが、文が1つだけの場合は、ブロックを省略できます
ブロックを記述しない場合のサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number;

    scanf("%d", &number);

    if( number == 1 ) printf("1が入力されました。¥n");

    return 0;
}

このように、真の場合の処理が1文の場合は、ブロックを省略できます。printf関数をif文のとなりに記述していますが、printf関数をif文の下に書いてもブロックは必要ありません。

ただし、if文の条件が成立したときの処理の終わりが分かりにくいので、使わないことをお奨めします。

サンプルプログラムでは、if文の条件が成立したときに、1文を実行するものしか記述していませんでしたが、if文のブロック内に、複数の処理を記述できます。また、if文のブロック内にさらにif文を記述することも可能です。

以上が 条件の判定 についてでした。

次回は、 場合分けの処理について学びます。

場合分けの処理~else、else if編~

-C言語