4-1 if文

if文

条件によって処理を分けたい場合にif文を使用します。

if (条件式)
 文;

条件式は真偽値で判定します。
判定結果が真(0以外)であれば文が実行されます。
セミコロンは文の終わりです。
例を見てみましょう。

#include <stdio.h>

int main()
{
    int tosi = 17;//年齢

    if (tosi < 18)
        printf("あなたは未成年です\n");

    return 0;
}

年齢が18歳未満のときにprint文を1つ実行する例です。
ifの実行文printfはインデント(字下げ)をすると読みやすくなります。
もう1つ見てみましょう。

#include <stdio.h>

int main()
{
    int tosi = 17;

    if (tosi < 18) {
        printf("あなたは未成年です\n");
        printf("まだ選挙に行けません\n");
    }

    return 0;
}

年齢が18歳未満のときにprint文を2つ実行する例です。
文を複数実行する場合には、中括弧 { } でくくります。
1文しかなくても、中括弧 { } でくくってかまいません。
{ } で囲った文はインデント(字下げ)をすると読みやすくなります。

比較演算子(関係演算子)

ifで使う条件式は比較演算子を使って判定します。
以下の様な演算子があります。

演算子意味
==等しいif (x == 0)
!=等しくないif (x != 0)
<=以下if (x <= 0)
<より小さいif (x < 0)
>=以上if (x >= 0)
>より大きいif (x > 0)

else文

if文の形式にはもう一つあります。

if (条件式)
 文1;
else
 文2;

判定結果が真(0以外)であれば文1が実行されます。
偽(0)の場合は文2が実行されます。
例を見てみましょう。

#include <stdio.h>

int main()
{
    int tosi = 17;

    if (tosi < 10)
        printf("あなたは10歳未満です\n");
    else
        printf("あなたは10歳以上です\n");

    return 0;
}

(tosi < 10)の条件が正しいときに、「あなたは10歳未満です」を出力し
そうでない場合に、「あなたは10歳以上です」を出力します。

もう1つ複数実行する場合を見てみましょう。

#include <stdio.h>

int main()
{
    int tosi = 17;

    if (tosi < 10) {
        printf("あなたは10歳未満です\n");
        printf("小学校に通っている可能性が高いです\n");
    } else {
        printf("あなたは10歳以上です\n");
        printf("小学校に通っている可能性は低いです\n");
    }

    return 0;
}

文を複数実行する場合には、中括弧 { } でくくります。

次はif else の連続を見てみましょう。

#include <stdio.h>

int main()
{
    int tosi = 40;

    if (tosi < 10)
        printf("あなたの年齢は   0~  9 歳です\n");
    else if (tosi < 20)
        printf("あなたの年齢は  10~ 19 歳です\n");
    else if (tosi < 30)
        printf("あなたの年齢は  20~ 29 歳です\n");
    else if (tosi < 40)
        printf("あなたの年齢は  30~ 39 歳です\n");
    else
        printf("あなたの年齢は  40歳以上です\n");

    return 0;
}

もう1つ、同じプログラムを { } を使ってい書いています。

#include <stdio.h>

int main()
{
    int tosi = 40;

    if (tosi < 10) {
        printf("あなたの年齢は   0~  9 歳です\n");
    } else if (tosi < 20) {
        printf("あなたの年齢は  10~ 19 歳です\n");
    } else if (tosi < 30) {
        printf("あなたの年齢は  20~ 29 歳です\n");
    } else if (tosi < 40) {
        printf("あなたの年齢は  30~ 39 歳です\n");
    } else {
        printf("あなたの年齢は  40歳以上です\n");
    }

    return 0;
}

{ } を使っているだけの違いなのですが、 { } があると人が目で見るときに、どのifの終わりか、どのelseの終わりかが見やすくなるため、バグを産む可能性が減ります。

論理演算子

if文では複数の条件を組み合わせたり、否定したりして使用することができます。
この演算にand(論理積)、or(論理和)、not(否定)の論理演算子を使用します。

演算子読み意味(a、bは条件式を指します)
&&AND (論理積)a && ba、b両方真のときに真となり、それ以外のときは偽
||OR (論理和)a || ba、bのいずれかが真であれば真となり、それ以外は偽
!NOT (否定)!aaの否定(aが真の時に偽、偽の時に真)

ANDの例を見てみましょう。
if (nenrei >= 20 && nenrei < 30) printf("年齢は20代です\n");
この場合、
上の表の条件式a は nenrei >= 20 に相当します。
上の表の条件式b は nenrei < 20 に相当します。
ですから、
nenrei が 10 ならば、a は偽、bは真 なので、AND結果は偽となります。
nenrei が 25 ならば、a は真、bは真 なので、AND結果は真となります。
nenrei が 40 ならば、a は真、bは偽 なので、AND結果は偽となります。

AND 論理積

ANDの動作をまとめると以下のようになります。
a、b両方真のときに真となり、それ以外のときは偽

aba && b

OR 論理和

ORの動作をまとめると以下のようになります。
a、bのいずれかが真であれば真となり、それ以外は偽

aba || b

NOT 否定

NOTの動作をまとめると以下のようになります。
aの否定(aが真の時に偽、偽の時に真)

a!a

書き方は以下のようになります。
if ( !(nenrei >= 20)) printf("年齢は20代未満です\n");

キャスト演算子(型変換)

キャスト演算子は型を変換する場合に使用します。
以下の例を見てください。

double dval;
int ival;
dval = 5.2;
ival = (int)5.2; ←キャスト・int型に変換する
if ((int)dval==5) printf("I am 5.\n"); ←キャスト・int型に変換する

#include <stdio.h>

void main()
{
    double dval;
    int ival;

    dval = 5.2;
    ival = (int)dval;

    printf("dval=%3.1f ival=%d\n", dval, ival);
    if ((int)dval==5) printf("I am 5.\n");

    return;
}
実行結果
dval=5.2 ival=5
I am 5.

見ての通りの使い方です。
整数変換したので切り捨てられています。
キャストは型宣言で使用するものが使用できます。

コメント

タイトルとURLをコピーしました