1. 関係演算子
C言語で比較に使用する式を「関係式」、その中で使用される演算子を「(関係式)」、「関係演算子」(関係演算子)といい、主に以下の6つがあります。
-
> より大きい演算子
-
< より小さい演算子
-
>= 以上演算子
-
<= 以下演算子
-
== 等号演算子
-
!= 不等号演算子
以下に例を示します。
a > b;
a < b;
a >= b;
a <= b;
a == b;
a != b;
関係式は通常、true または false を示す 0 または 1 を返します。
C言語では、0はfalseを表し、ゼロ以外の値はすべてtrueを表します。たとえば、20 > 12 の場合は 1 が返され、12 > 20 の場合は 0 が返されます。
関係式は、if 構造または while 構造でよく使用されます。例えば:
if (i == 3)
{
printf("i is 3.");
}
注: 等価演算子 == と代入演算子 = は 2 つの異なる演算子であるため、混同しないでください。場合によっては、誤って次のコードを作成すると、実行される可能性がありますが、予期しない結果が生じる可能性があります。
if (i = 3)
{....}
上記の例では、本来の意図は i == 3 ですが、誤って i = 3 と書かれてしまいます。この式は変数 i に値 3 を代入することを意味し、戻り値は 3 となるため、if 判定は常に true になります。
この種のエラーを防ぐために、等号の右側に変数を記述することを好むプログラマもいます。
if (3 == x)
{...}
== を誤って = と記述すると、コンパイラはエラーを報告します。知らせ。
避けるべきもう 1 つの間違いがあります。それは、複数の関係演算子を一緒に使用すべきではないということです。
例:
i < j < k
上の例では、2 つの小なり演算子が連続して使用されています。これは正当な式であり、エラーは報告されませんが、通常は望ましい結果が得られません。つまり、変数 j の値が i と k の間にあることは保証されません。関係演算子は左から右に評価されるため、実際には次の式が実行されます。
(i < j ) < k
上の式では、i < j は or 1 を返すため、最終的に or 1 が変数と比較されます。変数 j の値が i ~ k の間にあるかどうかを判定したい場合は、次のような書き方をします。
i < j && j < k
例:年齢を入力し、18歳~36歳の場合は若さを出力
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (18 <= age <= 36)
{
printf("青年");
}
return 0;
}
10 を入力すると、次の図のように若者になります。
これは、最初に 18 と age に格納されている 10 を比較するためです。式 18<=10 は false で、18<=age の結果は 0 です。次に、0 と 36 を比較します。0<=36 は true なので、 print青春、だから10歳でも青春って印刷できるんだけど、論理的に問題があるんだけど、このコードはどう書けばいいの?
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age <= 18 && age <= 36)
{
printf("青年");
}
return 0;
}
2. 論理演算子
論理演算子は論理的な判断機能を提供し、より複雑な式を構築するために使用されます。主に次の 3 つの演算子があります。
-
( ! ): 論理否定演算子 (単一の式の true または false の値を変更します)
-
(&&): AND 演算子。AND を意味します (両側の式が true の場合は true、それ以外の場合は false)
-
( || ): OR 演算子、またはを意味します (両側の少なくとも 1 つの式が true の場合は true、それ以外の場合は false)
注: C 言語では、0 以外は true、0 は false を意味します。
2.1. 論理否定演算子
たとえば、flag という変数があり、flag が false で何かをしたい場合は、次のようなコードを書くことができます。
if(!flag)
{
printf("do study");
}
flag が true の場合、!flag は false、flag が false の場合、!flag は true したがって、上記のコードの意味は、flag が false の場合、if ステートメント内のコードを実行するということです。
2.2.AND演算子
&& は AND 演算子であり、AND も意味します。&& は二項演算子で、使用されるメソッドは a&&b です。&& の両側の式が true の場合、式全体が true になります。そのうちの 1 つが false である限り、 then 式全体が false になります。
例: 月が 3 月から 5 月、つまり春だと言う場合、それを反映するにはコードをどのように使用すればよいでしょうか?
#include <stdio.h>
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
ここで表現されている意味は、月は 3 以上 5 以下でなければならず、同時に満たされなければならないということです。
2.3.OR演算子
|| は、OR を意味する OR 演算子です。(||) も二項演算子です。使用されるメソッドは (a || b) です。両側の式のいずれかが true である限り、式全体が true です. 、両側の式が false の場合にのみ false になります。
たとえば、1 年の月は 12 月、1 月、2 月であると言われていますが、それを反映するにはコードをどのように使用すればよいでしょうか?
#include <stdio.h>
int month = 0;
scanf("%d", &mont);
if(month == 12 || month == 1 || month == 2)
{
printf("冬季\n");
}
うるう年を使用する練習をします。
年を入力して、その年がうるう年かどうかを判断します。
1. うるう年は 4 で割り切れますが、100 では割り切れません。
2. 400 で割り切れる場合は、うるう年です。
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
printf("%d是闰年!", year);
}
return 0;
}