目录
一、逻辑类型和运算
1.bool
使用前要加头文件:
#include <stdbool.h>
2.逻辑运算
! | 非 | |
&& | 与 | a和b都是true,结果为true;否则false。 |
|| | 或 | a和b有一个为true,结果为true;两个都是false,结果为false。 |
例:
可以代码这样描述:
x > 4 && x < 6
判断一个字符c是否是大写字母? 可以用代码这样描述:
c >= 'A' && c <= 'Z'
优先级的问题
单目运算符优先级比双目运算符优先级高
优先级排序:!> && > ||
短路
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边的计算。
对于&&,左边是false时就不做右边了。
对于||,左边是true时就不做右边了。
注意
不要把赋值,包括复合赋值组合进表达式!
例如a==6 && b+=1是错误的。
3.条件运算符
count = ( count > 20 ) ? count - 10 : count + 10;
// 条件 条件满足时的值 条件不满足时的值
可以用程序来解释条件运算符的作用:
if ( count > 20 )
count = count - 10;
else
count = count + 10;
4.逗号“,”运算符
- 优先级低于“=”,优先级最低。
- 逗号的组合关系是自左向右,逗号运算的结果为逗号右侧表达式的值。
- 在for中的使用:
for ( i=0,j=10; i<j; i++,j--);
二 、级联和嵌套的判断
1.else的匹配
else总是和最近的那个if匹配
例如:
if (code == READY)
if (count < 20 )
print ("一切正常\n");
else
print("继续等待\n");
建议
在if或else后面总是用{},即使只有一条语句的时候。
2.级联的if-else if
- 表示分段函数
if ( x < 0 ) {
f = -1;
} else if ( x == 0 ) {
f = 0;
} else {
f = 2 * x;
}
- 建议单一出口
建议:
int f;
if ( x < 0 ) {
f = -1;
} else if ( x == 0 ) {
f = 0;
} else {
f = 2 * x;
}
printf ("%d", f);
不推荐:
if ( x < 0 ) {
printf ("%d", -1);
} else if ( x == 0 ) {
printf ("%d", 0);
} else {
printf ("%d", 2*x);
}
3.多路分支
switch-case
switch (控制表达式){
case 常量 :
语句
.......
case 常量 :
语句
.......
default:
语句
.......
}
- 控制表达式只能是整数型的结果
- 常量可以是常数,也可以是常数计算的表达式
- break 跳出,否则顺序执行
测试程序
#include <stdio.h>
int main()
{
int type;
scanf("%d", &type);
switch ( type ) {
case 1:
case 2:
printf("你好\n");
break;
case 3:
printf("晚上好\n");
case 4:
printf("再见\n");
break;
default:
printf("啊,什么啊?\n");
break;
}
return 0;
}