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

运行结果:

相关推荐
式51615 分钟前
大模型学习基础(六) 强化学习(Reinforcement Learning,RL)初步1.4
学习
小猪佩奇TONY20 分钟前
Linux 内核学习(13) --- linux 内核并发与竞态
linux·服务器·学习
黑客思维者22 分钟前
机器学习011:监督学习【回归算法】(多项式回归)-- 从“猜咖啡温度”到预测万物
人工智能·学习·机器学习·回归·线性回归·监督学习·多项式回归
deng-c-f23 分钟前
Linux C/C++ 学习日记(56):用户态网络缓存区
学习·缓存
d111111111d26 分钟前
STM32平衡车开发计划2-电机编码器测速
笔记·stm32·单片机·嵌入式硬件·学习
黑客思维者28 分钟前
机器学习010:监督学习【回归算法】(Lasso回归)-- 用“魔法剪刀”找到真正重要的信息
人工智能·学习·机器学习·回归·监督学习·回归算法·lasso
zhangrelay30 分钟前
新旧交替-传统模式被逐步抛弃……(节选)
学习
deng-c-f37 分钟前
Linux C/C++ 学习日记(55):原子操作(四):实现无锁队列
学习
小韩博1 小时前
小迪安全 · 第 39 课学习笔记
笔记·学习·安全·网络安全
非凡ghost1 小时前
Topaz Video(人工智能视频增强软件)
人工智能·windows·学习·音视频·软件需求