C言語学習3日目:関係演算子と論理演算子

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;
}

        操作結果:

おすすめ

転載: blog.csdn.net/m0_58724783/article/details/132101941