1. if语句
1.1 if
if语句的语法形式如下
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行.(C语言中0为假,语句不执行,非0为真,语句执行)
1.2 else
else语句的语法形式如下
下面用判断奇偶数的程序来验证这个逻辑
上面这段代码中 11%2 的结果是1,不等于0,因此if()条件判断为假,于是乎来到else语句,输出了“11是奇数”。
1.3 分支中包含多条语句
当 if 或 else 引领多条语句时要用大括号把这些语句都包起来,否则它们只控制离它们最近的下面那条语句,当然我习惯即使它们只引领一条语句我也会用大括号包起来,提高代码可读性的同时还便于后期的更改。
1.4 嵌套if
if语句是可以多重嵌套的,格式如下
C语言中还支持使用 else if 其等同于
下面是针对else if使用场景的一段代码实例,else if 主要用途是在同一变量中的多次平行比较,使得代码看起来更加工整
1.5 悬空else问题
解决这个问题的核心就是要明白else的匹配机制,else 总与距离最近的上面一个 if 匹配,举个例子:
这段代码是不会打印出来任何东西的,因为当 a==1 判定为假后就不会进入下一句 if 而我们看到的 else 虽然是和第一个 if 对齐的,但是这并不能说明任何问题,根据else的匹配机制它是与第二个if相匹配的,但是第二个if根本没进去,所以程序也根本不会走到else上,因此不会打印任何东西。
当然,处理这个问题还有一个更加简单直接的方法,就是使用大括号,这不仅会降低代码出bug的可能性,还能提高代码的可读性,利人利己。
2.关系操作符
> < <= >= ==(等于) !=(不等于)
关系表达式的返回结果是1(真)和0(假)
注意:==(相等) 和 =(赋值) 是不一样的 例如 if(a=5) 这时电脑会判定 if 的条件是5(为真),为了避免这种情况出现我建议在比较常量和变量的时候,建议将常量放在等号左边,这样即使错将 == 写成了 = 计算机会因编译不过去而报错。
注意:关系操作符不能连用 a<b<c 当 a<b 成立时语句就变成判断 1<c 是否成立,这样很容易出现bug,当需要执行该类任务时应该使用逻辑操作符连接两个关系操作符进行判断 a<b && b<c
3.条件操作符
条件操作符也叫三目操作符
exp1 ? exp2 : exp3
作用是:表达式1为真吗?为真执行表达式2,为假执行表达式3
4.逻辑操作符 && || !
! :逻辑取反操作符(改变单个表达式的真假)
&& :与操作符,就是并且的意思
|| :或操作符,就是或者的意思
4.1逻辑取反运算符 !
将真变成假,将假变成真
上一段代码中将if()条件中的 flag 从假便成了真,所以打印了hehe。
4.2与操作符 &&
操作符两端同时为真才为真,只要有假,就为假
4.3或操作符 ||
操作符两端同时为假才为假,只要有真,就为真
4.4练习,打印闰年
这一段代码展示了逻辑操作符的基本用法,在第二条注释中展示了如何将 if 和 else if 语句的内容合并,但是这么做是有风险的,这涉及到下一个知识点“短路”,我建议非必要不要堆叠逻辑操作符。
4.5短路
C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,如果得到的值满足输出结果所需要的条件,就不再对右边表达式求值。这种情况称为短路。因为有短路这种情况的存在,在多个逻辑运算符叠加的时候市场出现bug。
这段代码展示了短路的危害,当计算机在判断第一个逻辑时因为 a=0 结果是假,此时已经不用再对后面的逻辑进行判断,直接得到结果:假。
所以这段代码中只有a加1了,因为没有运行到 ++b 和 c ++ 的缘故,打印出来的 b 和 c 的值并没有变化。
5.switch语句
除了if 语句外,C语言还提供了switch语句来实现分支结构
switch语句是一种特殊形式的if else结构,用于判断有多个结果的情况,他把多重的else if改成更易用、可读性更好的形式
switch()必须跟整形
case 必须跟整型常量表达式(也可以是字符,因为字符是以ASCII码存储的,也算作整形)
在case语句表达的时候要灵活运用breeak,跳出switch
下面展示一段代码,其功能是输入1-5输出工作日,输入6、7输出休息日
这段代码中灵活运用了break的位置,用户即使输入的不是5,但也会因为前面的case并没有添加break而顺延到从case 5的情况,所以打印工作日和break这两条语句便不用重复写许多次,节省工作量。
default语句的含义是switch()得到的值不属于任何一种case,这时就执行default中的语句。
事实上在编写case和default中的语句时都不需要用大括号括起来,但是为了方便阅读代码,我还是推荐使用大括号。
6.while循环
C语言提供了3中循环语句,而while就是其中一种,while语句的语法结构和if语句非常相似.
6.1 while语句的执行流程
6.2 while循环的实践
写一段代码在屏幕上打印1-10
7.for循环
7.1 语法形式
for循环是3种循环中使用最多的,for循环语法形式如下
for(表达式1 ; 表达式2 ; 表达式3)
语句(如果循环体想要加上更多语句要使用大括号)
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
7.2 for循环的执行流程
7.3 for循环的实践
写一段代码在屏幕上打印1-10
很明显for循环是while循环的上位替代,while循环中,初始化、结束判断、调整,这三部分是分开写的,而for循环将它们都集合再了一行中,这样做更利于代码的维护
8. do-while循环
8.1语法形式
8.2 do while 循环的执行流程
9.breeak 和 continue
break的作用是跳出循环,不管后面循环还有多少次,只要执行到break,都直接跳出整个循环.
continue的作用是跳过本次循环continue后面的代码,直接去判断部分.
在各个循环的执行流程图中都有breeak 和 continue逻辑的体现。
10.循环的嵌套
练习:找出100~200之间的素数,打印出来
sqrt()开平方(库函数)——>头文件 <math.h>
11.goto语句
goto语句可以实现在同一个函数内跳转到设置好的标号处
这段代码中打印完hehe之后使用goto语句跳到了标号next的位置
注意:goto语句如果使用不当会导致代码在函数内部随意乱跳,打乱程序正常运行流程,所以尽量不要使用,但是它并不是一无是处,在多层循环代码中,如果想快速跳出goto还是很方便的。