2.关系操作符
C 语⾔⽤于比较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称 为“关系运算符”(relational operator),主要有下面6个。
• > ⼤于运算符
• < ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符
!= 不相等运算符
例:
a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;
表达式通常返回0或1来表示真假,通常用与while或if结构。
注:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符
为了防⽌出现这种错误,可以将变量写在等号的右边,即:if (3==x)
这样写如果把==误写成=编辑器就会报错
另外需要注意的是:多个关系运算符不宜连⽤。因为关系运算符是从左到右计算,如使用i<j<k比较三者大小则无法实现,实际执行的是(i<j)<k,, i < j 返回 0 或 1 ,所以最终是 0或 1与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i和 k之间,应该写为1 i < j && j < k
实例:输入一个年龄,如果在18-28,则输出“青年”:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(18<=age<=28)
{
printf("⻘年\n");
}
return 0;
}
当我们输入小于18的一个数(10)时,会发现输出仍为青年,这是因为,我们先拿18和age中存放的10⽐较,表达式18<=10为假, 18<=age 的结果是0,再拿0和 28⽐较,0<=28为真,所以打印了⻘年 ,所以即使当age是10的时候,也能打印⻘年,逻辑上是有问题,代码正确的书写为:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18 && age<=36)
{
printf("⻘年\n");
}
return 0;
}
3.逻辑操作符————&& , || , !
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
3.1逻辑取反运算符
例子:如果 一个变量flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真。
3.2与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
3.3或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
3.4练习:闰年的判断
输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:
1. 能被4整除并且不能被100整除是闰年
2. 能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
int year = 0;
scanf("%d", &year);
if(year%4==0 && year%100!=0)
printf("是闰年\n");
else if(year%400==0)
printf("是闰年\n");
return 0;
}
//代码2
int main()
{
int year = 0;
scanf("%d", &year);
if((year%4==0 && year%100!=0) || (year%400==0))
printf("是闰年\n");
return 0;
}
3.5短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
如if(month >= 2 && month <= 8)当左侧表达式结果为0是跳过右侧表达式,不再求值
仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短 路求值。