学习C语言第三天 :关系操作符、逻辑操作符

1.关系操作符

        C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有下面6个。

  • >   大于运算符

  • <   小于运算符

  • >=  大于等于运算符

  • <=  小于等于运算符

  • ==  等于运算符

  • !=   不相等运算符

        以下是例子:

a > b;

a < b;

a >= b;

a <= b;

a == b;

a != b;

        关系表达式通常返回 0 或 1,表示真假。

        C语言中,0 表示假,所有非零值表示真。比如,20 > 12 返回 1, 12 > 20 返回 0

        关系表达式常用于 if 或 while 结构。例如下例子:

if (i == 3)
{
    printf("i is 3.");
}

        注意:相等运算符 == 与赋值运算符  = 是两个不一样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。

if (i = 3)
{....}

        上面示例中,原意是 i == 3,但是不小心写成 i = 3。这个式子表示对变量 i 赋值 3,它的返回值为 3,所以 if 判断总是为真。
为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。

if (3 == x)
{...}

        如果把 == 误 写成了 = ,编译器会报错的。注意。

        还有一个需要避免的错误:多个关系运算符不宜连用。

        例子:

        i < j < k

        上面示例中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果即不是保证变量j的值在 i和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。

(i < j ) < k 

        上面式子中,i< j 返回 或 1 ,所以最终是  或 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为假,18<=age 的结果是0,再拿0和36比较,0<=36为真,所以打印了 青年,所以即使当age是10的时候,也能打印 青年,逻辑上是有问题,这个代码应该怎么写呢? 

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);

	if (age <= 18 && age <= 36)
	{
		printf("青年");
	}

	return 0;
}

2.逻辑操作符

        逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符

  • ( ! ) :逻辑取反运算符(改变单个表达式的真假)

  • ( && ) : 与运算符,就是并且的意思 (两侧的表达式都为真,则为真,否则为假)

  • ( || ) : 或运算符,就是或者的意思 (两侧至少有一个表达式为真,则为真,否则为假)

            

 

         注:C语言中,非0表示真,0表示假。

        2.1.逻辑取反运算符

                比如,我们有一个变量叫 flag ,如果flag为假,要做一个什么事情,就可以这样写代码:

if(!flag)
{
  printf("do study");  
}

                如果 flag 为真,!flag 就是假,如果 flag 为假, !flag 就是真所以上面的代码的意思就是 flag 为假,执行if语句中的代码。

        2.2.与运算符

                && 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是 a&&b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。
比如:如果我们说月份是3月到5月,是春天,那使用代码怎么体现呢?

#include <stdio.h>

int month = 0;

scanf("%d", &month);

if(month >= 3 && month <= 5)
{
    printf("春季\n");
}

        这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。

        2.3.或运算符

               || 就是或运算符,也就是或者的意思,(||)也是一个双目操作符,使用的方式是 (a || b),两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如:我们说一年中月份是12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?

#include <stdio.h>

int month = 0;

scanf("%d", &mont);

if(month == 12 || month == 1 || month == 2)
{
    printf("冬季\n");
}

         使用闰年进行练习:

                输入一个年份year,判断year是否是闰年。

                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