五:操作符
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");elseprintf("假\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");elseprintf("不是冬季\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");elseprintf("不是闰年\n");return 0;
}
4.短路问题:
C语言逻辑运算符有一个显著的特点,它总是先对左侧的表达式求值;再对右边的表达式求值,这个顺序是固定的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式进行求值,这种情况便被称为短路
- 对于&&操作符来说,当左边表达式的结果为假的时候,右边的表达式便不再执行
- 对于||操作符来说,当左边表达式的结果为真的时候,右边的表达式便不再执行
像这种仅根据左边表达式的结果就知道整个表达式的结果,便不再对右边的表达式进行运算的称为短路求值