ゾンビでもわかるC言語プログラミング

C言語入門者の応援をします

条件文(if文)

Index

1. はじめに

プログラミング言語には、条件式というものが存在します。
これは、ある数値を境目にして違う処理をしたいときに役に立ちます。
例えば、ある変数の値が 10 だったら処理をするなどといったことが可能になります。

2. 条件文で使用できる比較演算子

まず、条件文で使用する比較演算子を抑えておきましょう。
条件文では、以下の比較演算子を使用することができます。

比較演算子 説明
== 等号(等しい)
> より大きい
=> 以上
< より小さい(未満)
=< 以下

3. if文

以下のコードを実行してみてください。

 1  #include <stdio.h>
 2  
 3  int main() {
 4    int a;
 5  
 6    a = 10;
 7    if(a < 20) { // a が 20未満なら処理をする
 8      printf("1回目\n");
 9    }
10  
11    a = 30;
12    if(a < 20) {
13      printf("2回目\n");
14    }
15  
16     return 0;
17  }

出力は以下になるかと思います。

1回目

if文の書式は以下になります。

if(条件) {
  条件に当てはまった時の処理
}

6 行目で a に 10 を代入し、7行目で a が 20 未満か調べています。
a は、10で20未満なので、if文の中の処理が実行されます。

a = 10;
if(a < 20) {
  printf("1回目\n");
}

また、11行目で a に 30 を代入し、a が 20 未満か調べています。
a は、30 で20以上なので、if文の中の処理が実行されません。

a = 30;
if(a < 20) {
  printf("2回目\n");
}

4. else文

else文は、if文で条件に一致しなかった場合に何か処理したいときに使用します。
以下のコードを実行してみましょう。

 1  #include <stdio.h>
 2  
 3  int main() {
 4    int score;
 5  
 6    score = 80;
 7  
 8    if(score < 70) { // score が 70未満なら不合格
 9      printf("不合格\n");
10    } else {
11      printf("合格\n");
12    }
13  
14     return 0;
15  }

以下の出力が得られたと思います。

合格

else文の書式は以下になります。

if(条件) {
  条件に当てはまった時の処理
} else {
  条件に当てはまらなかった時の処理
}

このプログラムは、score という変数に 80 を代入して、8行目で score が 70 未満かを調べています。

if(score < 70) {
  printf("不合格\n");
} else {
  printf("合格\n");
}

今回は、score に代入された値が 70 以上だったので、else 以下の 11 行目のコードが処理されました。

5. 複数の条件をつける

if文では、例えば、a が 10 以上で、b が10未満の場合などの条件を指定することができます。
複数の条件を指定するための記号は以下になります。

記号 説明
&& アンド(どっちも当てはまるなら)
\ | | オア(どちらかが当てはまるなら)
 1  #include <stdio.h>
 2  
 3  int main() {
 4    int math_score, english_score;
 5  
 6    math_score = 70;
 7    english_score = 50;
 8  
 9    if(math_score >= 70 && english_score >= 70 ) { // 数学と英語のスコアが両方70以上なら合格
10      printf("合格\n");
11    } else {
12      printf("不合格\n");
13    }
14  
15    return 0;
16  }

出力は以下になります。

不合格

このプログラムでは、6行目で数学のスコアを、7行目で英語のスコアを代入しています。

math_score = 70;
english_score = 50;

そして、if文で、数学が70点以上、かつ英語が70以上の場合に "合格"、そうでなければ、"不合格" を出力します。

if(math_score >= 70 && english_score >= 70 ) {
  printf("合格\n");
} else {
  printf("不合格\n");
}

これを、数学が70点以上、または英語が70以上の場合に合格とするには、以下のようにします。

if(math_score >= 70 || english_score >= 70 ) {
  printf("合格\n");
} else {
  printf("不合格\n");
}

6. else if文

以下のコードを実行してみましょう。

#include <stdio.h>

int main() {
  int score;
  score = 70;

  if(score < 69) {          // score が 69 以下なら不合格
    printf("不合格\n");

  } else if(score == 69) { // score が 69 ならぎり不合格
    printf("ぎり不合格\n");

  } else if(score == 70) { // score が 70 ならぎり合格
    printf("ぎり合格\n");

  } else {
    printf("合格\n");       // score が 71 以上なら合格
  }

  return 0;
}

以下の出力が得られます。

ぎり合格

else if文を使用することで、条件にマッチした処理を複数記述することができます。

if(条件文) {
  処理
} else if(条件文) {
  処理
} else {
  処理
}

また、if else文は、条件にマッチした最初の処理しか実行しません。

% cat output.c                        
 1  #include <stdio.h>
 2  
 3  int main() {
 4    int a;
 5    a = 50;
 6  
 7    if(a < 20) { // a が 20 未満なら 1 を出力
 8      printf("1\n");
 9  
10    } else if(a < 60) { // a が 60 未満なら 2 を出力
11      printf("2\n");
12  
13    } else if(a == 50) { // a が 50 なら 3 を出力
14      printf("3\n");
15    }
16  
17    return 0;
18  }

出力は以下になります。

2

a には、50 が代入されており、この条件に合うものは、10行目と13行目の二つあります。
しかし、if else文は、上から評価されていくので、10行目で条件にマッチし、11行目を処理してif文が終わるので、それ以降のelse if文は実行されません。

11行目と14行目の処理をどっちも実行したい場合は、if文を二つ書く必要があります。

#include <stdio.h>

int main() {
  int a;
  a = 50;

  if(a < 60) {
    printf("1\n");
  }

  if(a == 50) {
    printf("2\n");
  }

  return 0;
}
2
3

7. if文の中にif文を書く

if文の中にif文を書くことができます。

 1  #include <stdio.h>
 2  
 3  int main() {
 4    int a;
 5    a = 50;
 6  
 7    if(a < 60) {
 8      printf("1\n");
 9  
10      if(a == 10) {
11        printf("2\n");
12      } else {
13        printf("3\n");
14      }
15  
16    } else {
17      printf("4\n");
18    }
19  
20    return 0;
21  }

出力は以下になります。

1
3

これは、if文の中にif文が入っているだけで、動作は同じです。
少し複雑になりますが、よーく読めば動作がわかるはずです。

8. 注意

プログラミングに慣れていても、たまに間違えるのが、= と == の誤用です。

条件文である値が同等か判定する時は以下のように書かなければなりません。

if(a == 10) {
  ...
}

しかし、たまに以下のように書いてしまうことがあります。

if(a = 10) {
  ...
}

この場合、コンパイル時に警告が出るとは思いますが、無視して実行すると、a がどんな値でも関わらず常にif文の中を実行してしまいます。

9. ついでに

以下のようにif文で数字の 0 は偽になり、0以外は真になります。

#include <stdio.h>

int main() {

  if(0) {
    printf("真\n");    
  } else {
    printf("偽\n");
  }

  return 0;
}

出力結果

以下は真になります。

#include <stdio.h>

int main() {

  if(1) {
    printf("真\n");
  } else {
    printf("偽\n");
  }

  return 0;
}

出力結果

書籍

新・明解C言語 入門編 (明解シリーズ)

新・明解C言語 入門編 (明解シリーズ)

苦しんで覚えるC言語

苦しんで覚えるC言語

やさしいC 第5版 (「やさしい」シリーズ)

やさしいC 第5版 (「やさしい」シリーズ)

C実践プログラミング 第3版

C実践プログラミング 第3版