目录
一,逻辑类型和判断
1,逻辑类型
bool类型
首先需要包含一个头文件 stdbool.h
即需要在代码开头写下
#include<stdbool.h>
才能使用bool true和false
2,逻辑运算
计算机除了可以进行赋值运算(a=656),四则运算(加减乘除)和关系运算(大于小于等于不等于),还可以进行逻辑运算(或且非)。
逻辑运算是对逻辑量进行的运算,结果只有0或1。
逻辑量是关系运算或逻辑运算的结果。
运算符 | 描述 | 示例 | 结果 |
! | 逻辑非 | !a | 如果a是true结果就是false,如果a是false结果就是true |
&& | 逻辑与 | a&&b | 如果a和b都是true结果就是true,否则就是false |
|| | 逻辑或 | a||b | 如果a和b有一个是true结果为true,两个都是true,结果为false。 |
优先级
!大于&&大于||
总结
优先级 | 运算符 | 结合性 |
1 | () | 从左到右 |
2 | !+-++-- | 从右到左(单目的+和-) |
3 | */% | 从左到右 |
4 | +- | 从左到右 |
5 | <<=>>= | 从左到右 |
6 | ==!= | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | =+=-=*=/=%= | 从右到左 |
短路,对于&&和||,如a&&b,如果计算a时已经可以判断a&&b的值,则计算机不会计算b。
这种情况叫做短路。所以不要把赋值和复合赋值组合进表达式。
3,条件运算和逗号运算
(1)条件运算
结构
条件?满足条件后的值:不满足条件后的值
例如
a>10?a=11:a=9
表示若a>10则赋值a为11,否则赋值为9.
优先级
条件运算符高于赋值运算符,低于其他所有的运算符。
结合性为自右向左
注意:条件表达式本身比较复杂难以读懂,如果条件表达式出现了嵌套则太过混乱,所以不推荐使用嵌套表达式。
(2)逗号运算
优先级 最低
结合性 自左向右
因为其优先级为最低所以进行计算必须加()
i=(11,12);
逗号可连接两个表达式,并取右方表达式为结果,如上i为12。
但目前其唯一用处是在for中使用。
for(i=1,a=5;i<=a;i=i+1)
如上可以进行多个运算。
二,级联和嵌套的判断
1,嵌套的if else
(1)认识嵌套
当if else后的语句至少有一个独立的if时,则为嵌套的if语句。
if(条件)
{
完整的if
}
如
if(a=0)
{
if(a>o)
{
a=10/a
}
else
{
a=10/-a
}
}
加那么多的大括号会使代码很长,但这样做十分有必要,解释在下面。
(2)else的匹配
else是if语句中十分重要的部分,也是最易出错,混乱的部分,因此掌握好else与if的对应关系,对认清语句的意思十分重要。其规则如下:
(1)else与其最近的if相对应。
(这个if必须没有与其他else对应,因为if和else如同夫妻一样,只能一夫一妻或单身。
即若最近的if有配偶,则寻找第二近的if,以此类推。)
(2)对于大括号内的if无法与大括号外的else配对。
其次可熟记格式
for()
{}
else
{}
这也是上面要求使用大括号的原因。
为了让if代码简介明了,推荐以下遵循规则:
<1>完整的写出if else,不省略大括号。
<2>对于多级if else,需要缩进一定距离。
if(){
if(){
if(){}
else{}}
else()
}
else{}
如上,通过保持配对if else缩进同样距离,不同级if else不同缩进距离,使代码清楚整齐。
二,级联的if else
有些时候,我们的程序需要 根据值的取值范围不同 做出不同的行为,如分段函数。
这时,虽然上述方法可以使代码易懂,但是随着if else的多级嵌套,代码会向右偏移,故人们在早期规定了特殊的排列方式:级联。
if(){
}else{if(){
}else{if(){
}else{if(){
}else{if(){
}else{
}
}
}
}
}
但是通去除else的大括号,并以else对齐,反而更简洁明了。
if(){
}else if(){
}else if(){
}else if(){
}else if(){
}else{}