これまで、条件文を記述してきましたが、あまり多様な条件について触れてきていなかったので、もっと複雑な条件を解説します。
論理演算子を使用した条件
例えば、「テストの点数が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)として扱われる。
- 複雑な条件を書くときは、読みやすさを意識して()でまとめると分かりやすくなる。