进一步的判断和循环
bool类型
- 在C语言中要使用bool类型的变量,必须使用stdbool.h库函数。
- 在C语言中没有专门用来输出bool类型的占位符,还是使用%d来作为占位符。
- C语言中bool类型输出的结果非零即一。
逻辑运算
- 逻辑运算是对逻辑量进行的运算,结果只有0或1.
- 逻辑量是关系运算或逻辑运算的结果。
运算符 | 描述 | 示例 | 结果 |
! | 逻辑非 | !a | 如果a是true结果就是false,如果a是false结果就是true |
&& | 逻辑与 | a && b | 如果a和b都是true,结果就是true;否则就是false |
|| | 逻辑或 | a || b | 如果a和b有一个是true,结果为true;两个都是false,结果为false |
运算符的优先级
优先级 | 运算符 | 综合性 |
1 | () | 从左到右 |
2 | ! + - ++ – | 从右到左(单目的+和-) |
3 | * / % | 从左到右 |
4 | + - / % | 从左到右 |
5 | < <= > >= / % | 从左到右 |
6 | == != | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | = += -= *= /= %= | 从右到左 |
- &&和||都是短路逻辑运算符,如果左边的结果已经能决定结果了,就不会做右边的计算。
#include<stdio.h>
int main()
{
int a = 6, b = 1;
int c, d;
c = a == 6 && b++ == 1;// 执行完了整个表达式
printf("a = %d,b = %d,c = %d\n", a, b, c);
d = a == 6 || b++ == 1;// 只执行了表达式的前半部分
printf("a = %d,b = %d,d = %d\n", a, b, d);
return 0;
}
条件运算符
- 条件运算符的优先级高于赋值运算符,但是低于其他运算符。
- 条件运算符是自右向左结合的。
- 条件运算符的格式:w < x ? x : w;
如果w < x成立,那么输出x,否则输出w。
逗号运算
- 逗号用来连接两个表达式,并以其右边的表达式的值作为它的运算结果。
- 逗号的优先级是所有的运算符中最低的,所以它两边的表达式会先计算。
- 逗号的组合关系是自左向右,所以左边的表达式会先计算,而由边的表达式的值就留下来作为逗号运算的结果。
#include<stdio.h>
int main()
{
int i = 0, j = 0, k = 0;
i = (3 + 4, 5 + 6);
printf("i = %d\n", i);
j = (j + 2, 3 + 8);
printf("j = %d\n", j);
k = (k + 1, k + 4, k * 4);
printf("k = %d\n", k);
return 0;
}
级联和嵌套的判断
#include<stdio.h>
int main()
{
int a, b, c;
printf("请输入你要比较的3个正整数:");
scanf("%d %d %d", &a, &b, &c);
int max = 0;
if (a > b)
if (a > c)
max = a;
else
max = c;
else
if (b > c)
max = b;
else
max = c;
printf("The max is %d\n", max);
return 0;
}
- 当 if 的条件满足或者不满足的时候要执行的语句也可以是一条 if 或 if-else 与,这就是嵌套的 if 语句。
- 没有 {…} 的情况下 else 总和最近的 if 相匹配。
多路分支
- switch-case多路分支语句格式:
switch (控制表达式) {
case 常量:
语句;
…
case 常量:
语句;
…
default:
语句;
…
} - 控制表达式只能是整数型的结果。
- 常量可以是常数,也可以是常数计算的表达式,不可以出现变量。
- switch 语句可以看作是一中基于计算的跳转,计算控制表达式的值后,程序会跳转到向匹配的 case(分支标号)处。分支标号只是说明 switch 内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有 break,就会顺序执行下一个 case 语句,直到遇到一个 break,或者 switch 结束为止。
#include<stdio.h>
int main()
{
int type;
printf("请输入type的值:");
scanf("%d", &type);
switch (type)
{
case 1:
printf("你好!\n");
break;
case 2:
printf("早上好!\n");
break;
case 3:
printf("晚上好!\n");
break;
case 4:
printf("再见!\n");
break;
default:
printf("啊,什么啊?\n");
}
return 0;
}
判断和循环常见的错误
- if 语句常见的错误:
(1)忘记大括号:永远在 if 后面加上 {…}
(2)if 后面的分号:if 后面不用写 “;”
(3)错误使用 == 和 = :==表示相等,= 表示赋值
(4)用错 else:else 在没有 {}的情况下只和最近的 if 相匹配 - 循环常见的错误:
(1)经常会进入死循环
(2)注意循环的次数以及条件