1.关系操作符:
在C语言中用于比较的表达式,称为 “关系表达式” ,里面使用的运算符就称为 “关系运算符” ,主要有下面六个:
关系运算符 | 描述 |
---|---|
> |
大于运算符 |
< |
小于运算符 |
>= |
大于等于运算符 |
<= |
小于等于运算符 |
== |
相等运算符 |
!= |
不相等运算符 |
注意:
- 关系表达式通常返回
1
或0
,表示真或假 - 在C语言中,
0
表示假;所有非0
的值表示真 - 关系表达式常用于
if
或while
结构 - 在C语言中
==
表示关系运算符;=
表示赋值运算符
多个关系运算符不宜连用:
#include <stdio.h>
int main()
{
int a = 20;
int b = 60;
int c = 90;
if(b < c < a)
{
printf("xxx\n");
}
else
{
printf("mmm\n");
}
return 0;
}
注意:
因为关系符是从左到右计算,所以实际执行的是(b < c) < a
,b < c
返回0
或1
所以最终是0
或1
与变量a
进行比较
如果要判断变量
c
的是否在a
和b
之间,应该使用下面的写法:
#include <stdio.h>
int main()
{
int a = 20;
int b = 60;
int c = 90;
if(b < c && c < a)
{
printf("xxx\n");
}
else
{
printf("mmm\n");
}
return 0;
}
注意: 由于不满足c < a
这个条件,所以打印mmm
2.逻辑操作符:
逻辑运算符提供逻辑运算功能,用于构建更复杂的表达式,主要有下面三个运算符:
逻辑运算符 | 描述 |
---|---|
&& |
与运算符,表示并且:两侧表达式都为真,则为真,否则为假 |
两个竖杠 | 或运算符,表示或者:两侧只要有一个表达式为真,则为真,否则为假 |
! |
逻辑取反运算符(改变单个表达式的真假) |
示例1 -- 逻辑取反运算符:
#include <stdio.h>
int main()
{
int t = 0; // 表达式为假
if(!t) // 表达式被取反运算符变为真
{
printf("真\n"); // 此时因表达式为真所以打印输出
}
return 0;
}
示例2 -- 与运算符:
#include <stdio.h>
int main()
{
int a = 1;
printf("请输入你的年龄:");
scanf("%d", &a);
if (a >= 1 && a <= 18) // 如果两个条件同时满足则执行真,否则执行假
printf("真\n");
else
printf("假\n");
return 0;
}
示例3 -- 或运算符:
#include <stdio.h>
int main()
{
int a = 0;
printf("请输入月份:");
scanf("%d",&a);
if(a == 1 || a == 2 || a == 12)
printf("是冬季\n");
else
printf("不是冬季\n;");
return 0;
}
3.闰年的判断:
输入一个年份year,判断year是否为闰年:
闰年的判断:
- 能够被4整除并且不能够被100整除的是闰年
- 能够被400整除的是闰年
示例1 -- 第一种写法:
#include <stdio.h>
int main()
{
int year = 0;
printf("请输入年份:");
scanf("%d",&year);
if(year % 4 == 0 && year % 100 != 0)
printf("是闰年\n");
else
{
if(year % 400 == 0)
printf("是闰年\n");
}
return 0;
}
示例2 -- 第二种写法:
#include <stdio.h>
int main()
{
int year = 0;
printf("请输入年份:");
scanf("%d",&year);
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("是闰年\n");
else
printf("不是闰年\n");
return 0;
}
4.短路问题:
C语言逻辑运算符有一个显著的特点,它总是先对左侧的表达式求值;再对右边的表达式求值,这个顺序是固定的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式进行求值,这种情况便被称为短路
- 对于
&&
操作符来说,当左边表达式的结果为假的时候,右边的表达式便不再执行 - 对于
||
操作符来说,当左边表达式的结果为真的时候,右边的表达式便不再执行
像这种仅根据左边表达式的结果就知道整个表达式的结果,便不再对右边的表达式进行运算的称为短路求值