从最浅层剖析C语言——第三节(超详细讲解if、switch分支结构)

目录

1. 分支结构的介绍

2.if语句

2.1if语句的使用语法

2.2 else

2.3 分支中包含多条语句

2.4 嵌套if

2.5 易错点:else与if匹配问题

3.switch语句

3.1 switch语句的语法

3.2 break语句

3.3 易错点:default子句补充


1. 分支结构的介绍

C语言是一门结构化的程序设计语言,C语言中存在三种结构,分别指的是顺序结构,选择结构,循环结构

顺序结构:从A程序执行直接执行到B程序,A-------->B

选择结构:有多种路径可选择,在多种路径中选择达成最终结果

6e30477fa86f48949caf88bf17b579fe.jpg

 今天着重介绍循环结构

我们通过if,switch语句实现分支结构,使用for、while、do while实现循环结构

2.if语句

2.1if语句的使用语法

if(表达式)
在C语言中约定俗成的就是,0为假,非0表示真

ebb5c9b160494e1083464191783cdf39.jpeg

如果当if()的表达式所输出的值为非零,则为真,便继续执行接下来的语句

c709e0b7ac47418fafde75474a33bbee.png

但如果里面的值为零,则判定为假,便会跳过if语句下面的语句

79454fa174204efe957a7665700b0a57.png

2.2 else

那我们有没有办法让if里面表达式为假的时候,从而执行其他语句而不是直接跳出

else便有这个作用,使用语法如下:

if(表达式)

接语句1

else

语句2

当if里面的表达式为真的时候,执行语句1,当if里面 表达式为假的时候,执行语句2

6822cb7cea9148af935314d4d2e8d5a7.png

2.3 分支中包含多条语句

根据上面的代码运行结果可以看出,if和else都是控制它们下一行的代码,那么真的·是这样吗?

根据语法规则,if和else语句都默认只控制一条语句

5e729a1463ba454c962046a2db0b7fae.png

c06a07950b1d47419525f7facc8bb4a7.png

如图所示,当满足if语句的要求的时候会执行下一行的语句,不满足则不会执行,但对于下一行后面的代码无法进行控制,此时也自然需要else语句对if分支结构做更好的优化

fcfdfe7c189145a2a6165aa5b66bd2dc.png

在else的帮助下,我们就可以保证每个数字都能对应打印正确了

但是每一个if和else只能对应控制一行的语句,有没有办法能控制多行代码呢?

在我们需要达成上面的条件时,我们就需要用写代码经常会用到的大括号了{}、

a3eb552ca9e543b389c2fe6df0767c8c.png

可以看的出来,if语句后面的大括号里面的内容相当于一个语句被if语句所控制,一旦if语句里面为真,则会执行大括号里面的语句

else同理,大括号的运用在代码中是很常见的,一个大括号里面的内容可以被if,else等等当做一条语句从而执行

2.4 嵌套if

上述if语句中,我们只能有两种路径可以走,要么走if语句的路径,要么走else的路径,但一个项目中只有两个路径肯定是不够的,那么如何有更多路径的选择呢?

那么我们可以使用else if,构成多重判断

168342ab9e564d94b04a0748b88e5ac8.png

如上图所示,只需要在正常的if和else使用的中间加上else if便可以多出一条路径,反复使用else if便可以创造多条路径使用

2.5 else与if匹配问题

还存在一个问题,if和else是互相匹配的,一个if语句执行不成功便会执行else语句所控制的内容,那如果存在多个if语句呢?else语句对应的应该是哪一个if语句呢?

955bd51058d84e5d9639023dd47e9077.png

大家觉得,代码最终运行结果是打印出12345还是00000呢?

767fb41fe94c467aaf85583aac0e3e2c.png

根据结果显示,很明显else是与if(b=1)进行匹配的

总结:当存在多个if或者else语句的时候,每一个else都自动与离它最接近的那个if语句进行匹配

3.switch语句

3.1 switch语句的语法

switch(表达式)

{

case 表达式的结果:

case 表达式的结果:

.......

break;

}

那么我们写代码来实践一下

84a1a897516b42bab739609f221e7e3e.png

显而易见的是,上面的代码很明显出错了,这是因为switch语句在执行下面的每一个case语句中的代码,一旦case语句中的代码执行完成了,实际上根据代码运行的原则,它是会继续向下运行的,这样就会导致后面的语句全部被打印

值得注意的是,case语句相当于是switch语句里面表达式里面的值的一个入口,如果算出的是1,那么就会从大括号里面的case1进去运行接下来的程序,然后一直从上至下的执行代码

有进自然要有出,case语句相当于入口,那么break语句,根据英文本意(跳出)也可以知道是作为出口的角色

重点:case和后面的数字之间必须存在空格

3.2 break语句

通常我们会在每一个case语句(入口)的后面加上一个break(出口)使得程序从switch语句中及时跳出来

8d6916fe7dcf4703a97b0f6883c7c987.png

加上break之后,这个判断数字除以3后余数是多少的程序就没有问题了

case语句如果没有遇到break跳出的话,是会一直执行下去的

当然,break也不是每一个case语句都必须要有的,比如我们希望case语句就是一直执行下去,不需要它通过break跳出来

878c5244b52d40c2ad868d3808b197f2.png

比如像这样的代码,多个case只需要对应一个break,因为多个case输出的结果都是一样的

3.3 default子句补充

上面我们是通过switch里面的表达式所输出的结果,从而对应的case(入口)来执行语句,那如果我们的表达式结果太多了,当我们输出的值并不是case后面的数字,我们此时就可以使用default子句来输出这种情况

04eead3162a54f96afed1aaf6f22c608.png

当输出的值不在case语句之内,此时便使用default子句来执行这种意外的情况

重点:default子句不一定要放在最后,它本身同样是跟case一样的是一个入口

既然都是入口,那么default子句和case语句随便放在哪都行,只要是在switch语句中的大括号里面,只不过我们通常习惯把default子句放在最后面

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值