C言語

論理演算子を使用した条件分岐

これまで、条件文を記述してきましたが、あまり多様な条件について触れてきていなかったので、もっと複雑な条件を解説します。

論理演算子を使用した条件

例えば、「テストの点数が60点以上、かつ、欠席回数が3回以下」という条件を表したシンプルなプログラムを示します。

#include <stdio.h>

int main(void)
{
  int score;
  int absences;
  
  printf("点数を入力してください:");
  scanf("%d", &score);

  printf("欠席回数を入力してください:");
  scanf("%d", &absences);

  if((score >= 60) && (absences <= 3))
  {
    printf("合格です!\n");
  }
  else
  {
    printf("不合格です。\n");
  }
  
  return 0;
}

&& を使うことで、「テストの点数が60点以上、かつ、欠席回数が3回以下」の条件の「かつ」という条件を表せます。
もし、「どちらか一方でも条件を満たせば合格する」にしたい場合は、|| を使います。

if((score >= 60) && (absences <= 3)) について、「テストの点数が60点以上」と、「欠席回数が3以下」で、それぞれ()を囲っています。
これは、それぞれの条件がはっきり区別でき、プログラムの意図が伝わりやすくなるためです。
複雑な条件式を記述する場合は、()を使って見やすくすることを心掛けましょう。

真と偽の値について

次に、論理演算子のNOT演算子( ! )について説明する前に、条件が成立したときの「」と、条件が成立しないときの「」の値について理解しておきましょう。

これまで、
真(true):条件が成立している
偽(false):条件が不成立している
と説明してきました。

C言語では、この「真(ture)」と「偽(false)」を数字で表現します。

偽(false)0
真(true)0以外(例えば、1-1 など)

このように、C言語では、「0だけが偽」であり、「それ以外のすべての数値(正でも負でも)は真」として扱われます。

NOT演算子について

NOT演算子は、「条件文の基本」で説明したように、条件を反転(否定)する演算子です。
つまり、「○○出ない場合」を簡潔に表現できます。

次に、「雨でない場合」としたプログラムの例を示します。

#include <stdio.h>

int main(void)
{
  int isRaining = 0;  // 0:晴れまたは曇り、 1:雨
  
  printf("晴れなら:0、雨なら:1を入力してください。\n");
  scanf("%d", &isRaining);

  if (!isRaining) {
    printf("洗濯物を干せます。\n");
  } else {
    printf("傘を持っていきましょう。\n");
  }
  
  return 0;
}

このプログラムでは、isRaining変数は、「雨かどうか」を表す変数です。
値が「1」のときは、雨、0のときは、晴れまたは曇りとしています。

if文は条件が真(0以外)のときに実行します。
そして、NOT演算子( ! )は、条件を反転するため、if( !isRaining ) は、isRainingの値が 0 (偽)のときに条件が成立します。

したがって、isRainingの値が、0の場合(晴れ/曇り)に、「洗濯物を干せます。」が表示されます。

まとめ

  • 複数の条件を組み合わせたり、反転したりする場合に論理演算子を使う。
  • C言語で使える主な論理演算子は、次の3つになる。
    &&:すべての条件が真のときに、全体の条件が成立する。「かつ」
    ||:どちらか1つでも真のときに、全体の条件が成立する。「または」
    !:条件を反転する。(真→偽、偽→真)「○○でない場合」
  • C言語では、0が偽(false)、0以外が真(true)として扱われる。
  • 複雑な条件を書くときは、読みやすさを意識して()でまとめると分かりやすくなる。

-C言語