一、逻辑类型与运算
(一)逻辑类型——bool
- 原本为c++中才有,c++的bool中true表示1,false表示0
- C语言中C99之后才有
- C99后的版本有了“#include<stdbool.h>”
- 之后就可以使用bool、true和false
- 例:
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool b=6>5;
bool t=true;
t=2; //并没有真正bool量的类型,实际仍为整数
printf("d%\n",b); //最终输出时仍为整数1而不是true
return 0;
}
(二)逻辑运算
- 逻辑运算是对逻辑量进行的运算,结果只有0(代表false)或者1(代表true)
- 逻辑量是关系运算或逻辑运算的结果
运算符 | 描述 | 示例 | 结果 |
!(单目运算符) | 逻辑非 | !a |
|
&& | 逻辑与 | a&&b |
|
|| | 逻辑或 | a||b |
|
例:用C语言表达数学中的区间,如:x∈(4,6)或x∈[4,6]
- 错误示例:4<x<6,这个式子会先计算4<x,结果为0或1(即true或false)再比较0或1与6的大小,结果依然为逻辑值(0或1)
- 正确示例:开区间:4<x&&x<6
- 正确示例:闭区间:4<=x&&x<=6
例:判断一个字符c是否为大写字母
- c>='A'&&c<='Z'
优先级:!>&&>||
- &&和||优先级低于关系运算,高于赋值运算
注:逻辑运算是自左向右进行,如果左边已经能出结果则不会做右边的运算
- 对于&&,左边是false就不做右边
- 对于||,左边是true就不做右边
- 所以最好不要把赋值包括复合赋值组合进表达式
(三)条件运算和逗号运算
1.条件运算
例:count=(count>20)?count-10:count+10
分别对应 条件?条件满足值:条件不满足值
等于if(count>20)
count=count-10;
else
count=count+10;
- 优先级高于赋值运算但是低于其他运算符低,但是会增加表达式难度
2.逗号运算(主要在for中使用)
for中想要多个计算,如:for(i=0,j=10;i<j;i++,j--)
二、多路分支
(一)switch-case
#include <stdio.h>
int main(void)
{
int type;
scanf("%d",&type)
switch(type){
case 1:
printf("您好");
break;
case 2:
printf("早上好");
break;
case 3:
printf("晚上好");
break;
case 4:
printf("再见");
break;
default:
printf("啊?");
break;
}
return 0;
}
即输入type值后直接跳进对应数值,不会从1,2,3顺次向下判断(但是级联if-else会)
switch(控制表达式){
case 常量:
语句
——
case 常量:
语句
——
default:
语句
——
}
- 控制表达式只能是整数型结果
- 常量可以是常数也可以是常数计算表达式(C99 only)
- case为分支标号
- 如未遇到break则会执行到下一个case中,直到遇到break或switch结束
- 分段函数不适合用switch-case(不是最佳)