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

1.关系操作符

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

> 大于运算符

< 小于运算符

>= 大于等于运算符

<= 小于等于运算符

== 等于运算符

!= 不相等运算符

以下是例子:

cpp 复制代码
a > b;

a < b;

a >= b;

a <= b;

a == b;

a != b;

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

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

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

cpp 复制代码
if (i == 3)
{
    printf("i is 3.");
}

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

cpp 复制代码
if (i = 3)
{....}

上面示例中,原意是 i == 3,但是不小心写成 i = 3。这个式子表示对变量 i 赋值 3,它的返回值为 3,所以 if 判断总是为真。

为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。

cpp 复制代码
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岁之间,输出青年

cpp 复制代码
#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的时候,也能打印 青年,逻辑上是有问题,这个代码应该怎么写呢?

cpp 复制代码
#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为假,要做一个什么事情,就可以这样写代码:

cpp 复制代码
if(!flag)
{
  printf("do study");  
}

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

2.2.与运算符

&& 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是 a&&b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。

比如:如果我们说月份是3月到5月,是春天,那使用代码怎么体现呢?

cpp 复制代码
#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月是冬天,那么我们怎么使用代码体现呢?

cpp 复制代码
#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整除是闰年。

cpp 复制代码
#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;
}

运行结果:

相关推荐
蒲公英100140 分钟前
vue3学习:axios输入城市名称查询该城市天气
前端·vue.js·学习
训山1 小时前
【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
笔记·学习·华为·harmonyos·鸿蒙系统
①个程序员1 小时前
thinkphp 学习记录
学习
alfiy2 小时前
Elasticsearch学习笔记(四) Elasticsearch集群安全配置一
笔记·学习·elasticsearch
向上的车轮2 小时前
Django学习笔记十一:部署程序
笔记·学习·django
不灭锦鲤3 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
alfiy3 小时前
Elasticsearch学习笔记(五)Elastic stack安全配置二
笔记·学习·elasticsearch
权^3 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql
冷静 包容3 小时前
C语言学习之 没有重复项数字的全排列
c语言·开发语言·学习
K3njuan3 小时前
《数据结构》学习系列
学习