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

运行结果:

相关推荐
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛10 天前
计算机系统概论——校验码
学习
babe小鑫10 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms10 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下10 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。10 天前
2026.2.25监控学习
学习
im_AMBER10 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J10 天前
从“Hello World“ 开始 C++
c语言·c++·学习