目录
1. 分支结构的介绍
C语言是一门结构化的程序设计语言,C语言中存在三种结构,分别指的是顺序结构,选择结构,循环结构
顺序结构:从A程序执行直接执行到B程序,A-------->B
选择结构:有多种路径可选择,在多种路径中选择达成最终结果
今天着重介绍循环结构
我们通过if,switch语句实现分支结构,使用for、while、do while实现循环结构
2.if语句
2.1if语句的使用语法
if(表达式)
在C语言中约定俗成的就是,0为假,非0表示真
如果当if()的表达式所输出的值为非零,则为真,便继续执行接下来的语句
但如果里面的值为零,则判定为假,便会跳过if语句下面的语句
2.2 else
那我们有没有办法让if里面表达式为假的时候,从而执行其他语句而不是直接跳出
else便有这个作用,使用语法如下:
if(表达式)
接语句1
else
语句2
当if里面的表达式为真的时候,执行语句1,当if里面 表达式为假的时候,执行语句2
2.3 分支中包含多条语句
根据上面的代码运行结果可以看出,if和else都是控制它们下一行的代码,那么真的·是这样吗?
根据语法规则,if和else语句都默认只控制一条语句
如图所示,当满足if语句的要求的时候会执行下一行的语句,不满足则不会执行,但对于下一行后面的代码无法进行控制,此时也自然需要else语句对if分支结构做更好的优化
在else的帮助下,我们就可以保证每个数字都能对应打印正确了
但是每一个if和else只能对应控制一行的语句,有没有办法能控制多行代码呢?
在我们需要达成上面的条件时,我们就需要用写代码经常会用到的大括号了{}、
可以看的出来,if语句后面的大括号里面的内容相当于一个语句被if语句所控制,一旦if语句里面为真,则会执行大括号里面的语句
else同理,大括号的运用在代码中是很常见的,一个大括号里面的内容可以被if,else等等当做一条语句从而执行
2.4 嵌套if
上述if语句中,我们只能有两种路径可以走,要么走if语句的路径,要么走else的路径,但一个项目中只有两个路径肯定是不够的,那么如何有更多路径的选择呢?
那么我们可以使用else if,构成多重判断
如上图所示,只需要在正常的if和else使用的中间加上else if便可以多出一条路径,反复使用else if便可以创造多条路径使用
2.5 else与if匹配问题
还存在一个问题,if和else是互相匹配的,一个if语句执行不成功便会执行else语句所控制的内容,那如果存在多个if语句呢?else语句对应的应该是哪一个if语句呢?
大家觉得,代码最终运行结果是打印出12345还是00000呢?
根据结果显示,很明显else是与if(b=1)进行匹配的
总结:当存在多个if或者else语句的时候,每一个else都自动与离它最接近的那个if语句进行匹配
3.switch语句
3.1 switch语句的语法
switch(表达式)
{
case 表达式的结果:
case 表达式的结果:
.......
break;
}
那么我们写代码来实践一下
显而易见的是,上面的代码很明显出错了,这是因为switch语句在执行下面的每一个case语句中的代码,一旦case语句中的代码执行完成了,实际上根据代码运行的原则,它是会继续向下运行的,这样就会导致后面的语句全部被打印
值得注意的是,case语句相当于是switch语句里面表达式里面的值的一个入口,如果算出的是1,那么就会从大括号里面的case1进去运行接下来的程序,然后一直从上至下的执行代码
有进自然要有出,case语句相当于入口,那么break语句,根据英文本意(跳出)也可以知道是作为出口的角色
重点:case和后面的数字之间必须存在空格
3.2 break语句
通常我们会在每一个case语句(入口)的后面加上一个break(出口)使得程序从switch语句中及时跳出来
加上break之后,这个判断数字除以3后余数是多少的程序就没有问题了
case语句如果没有遇到break跳出的话,是会一直执行下去的
当然,break也不是每一个case语句都必须要有的,比如我们希望case语句就是一直执行下去,不需要它通过break跳出来
比如像这样的代码,多个case只需要对应一个break,因为多个case输出的结果都是一样的
3.3 default子句补充
上面我们是通过switch里面的表达式所输出的结果,从而对应的case(入口)来执行语句,那如果我们的表达式结果太多了,当我们输出的值并不是case后面的数字,我们此时就可以使用default子句来输出这种情况
当输出的值不在case语句之内,此时便使用default子句来执行这种意外的情况
重点:default子句不一定要放在最后,它本身同样是跟case一样的是一个入口
既然都是入口,那么default子句和case语句随便放在哪都行,只要是在switch语句中的大括号里面,只不过我们通常习惯把default子句放在最后面