C语言中的基本结构 2 ——分支结构篇

本文介绍了C语言中的分支结构,包括If语句(单分支、嵌套分支),Switch语句,以及三目运算符的使用。通过实例展示了如何运用这些结构进行条件判断和程序控制,同时提到了它们的优缺点和适用场景。
摘要由CSDN通过智能技术生成

目录

前言:

何为分支结构?

能实现分支结构语句和运算符。

1. If语句类

2. Switch语句

3. 三目运算符

一、 If类

1.if···语句

2. if··· else···语句

3.if···else if···else 语句

二、Switch

三、三目运算符 ?  :


前言:

书接前文,上一篇我们讲到了C语言三种结构中的顺序结构,这回让我们来看看其中的第二种结构——分支结构。

(小提示:阅读本文章需要了解scanf和printf语句以及条件运算符(&&、==、!=等)和逻辑表达式)

何为分支结构?

我们一生会经过很多路口,不管是每天走过车水马龙的十字街头还是在某些人生的节点,我们需要做出自己的判断,然后选择该往哪里走。

在C语言领域也有相对应的分支结构。它首先对运行的程序进行判断,如果符合分支结构的要求,那么你就可以往我这条分支里面走。如果不符合进入这一条分支的条件,那么根据我们前一篇提到的顺序结构,程序会继续往下走,直到找到自己能够进入的分支或是一直走到程序结束也不进入分支。

能实现分支结构语句和运算符。

1. If语句类

    ①. if语句

    ②. if

         else语句.

    ③. if

         else if

         else if

         ······

         else语句

2. Switch语句
3. 三目运算符

    ?  :

一、 If类

1.if···语句

我们小时候常造句:如果明天不下雨,我们就去春游。

在C语言中,If语句就是那个 “如果”,它的后面需要跟上一对括号,里面放着判断的条件。

百闻不如一见,让我们写一个从键盘读取数字判断成绩等级的代码(假设满分是100分)。

(代码解释:如果 a>=80 就打印“你的成绩很优秀”。)

我们设置 “优秀” 的条件是成绩大于等于80分。可以看到,当我们输入a的值是80时,满足 if 语句限制的条件,因此可以进入这一条语句内部,将我们输入的文字打印出来。当我们输入的值是50时,不满足大于等于80的条件,因此这时程序不能进入 if 语句,同时根据顺序结构,程序需要继续往下执行,执行到 “return 0;”时程序结束,没有任何信息的打印。

这时候我们会想:如果我们想将60分以上的成绩定为良好该怎么办呢?能再加一个 if 语句进行描述吗?

如果我们在程序中再加一条 if 语句,确实可以完成对于成绩良好的判断,可是当我们再次输入80时结果却出现了问题:由于C语言的顺序结构,当我们输入80时,既满足第一个 if 语句的条件也满足第二个 if 语句的条件,因此将两个语句内的文字都打印了出来。下面给大家介绍另一种分支语句——if···else···,它或许能解决我们目前遇到的问题。

小知识:如果你知道逻辑表达式,你可以将 if(a >= 60)的条件限制为 if(a >= 60 && a < 80)完成我 

              们需要的将60~80分划为良好的任务,本文在此不再扩展。

2. if··· else···语句

我们在 if 语句的基础上再加上一条 else 语句,那么一条简单的 if 语句将扩展成为 if else 语句。else语句的作用是将 if 语句没有涉及到的所有的情况全都归属于 else。 我们的代码举例如下:

(代码解释:如果 a>=80 就打印“你的成绩很优秀”,否则打印“你的成绩良好”。)

if···else···语句可以满足我们需要的将60~80分划为良好,80分以上则是优秀的任务,但是当我们输入80分以下的任何一个数字时,else语句都会被执行,程序同样也存在着缺陷。我们似乎回到了 if 语句遇到的问题,如果想要解决这一问题就需要再进一步细分成绩等级,这时我们就得借助新的工具 if···else if···else 语句了。

3.if···else if···else 语句

if···else if···else语句和 if···else···语句类似。只不过 if···else···只有两种选择,不执行 if 语句就执行 else语句。而 if···else if···else 可以根据你的需要增加 ···else if··· 语句来扩充选择路径。

如果我们使用if···else if···else语句,既可以完成对80分以上的判断,也可以完成60~80分以及60分以下的判断,并且即使我们输入的80既满足了 a>=80的条件也满足了a>=60的条件,也只执行了第一条 if 语句的内容而跳过了后续的分支条件,这就是if···else if···else语句一大特点,当程序进去过任何一个满足的条件后出来时就直接跳出分支语句,不再考虑其他条件。

同样,我们可以通过增加···else if···及其判断条件来增加选择。

二、Switch

switch 的构造如上。常量1、2等数字并不代表它们真的只能是数字1、2、3按顺序排列,事实上它们可以是任何的常量,例如字符 'a'、'b'、'c'其实也可算作常量。

语句之后的break是为了让程序跳出switch,不再执行之后的代码。如果省略,程序将会在switch内一直往下走直到遇到break或者从default离开。

default,上述所有条件都不满足,程序将从default离开switch。

对于二选一或者三选一的问题,使用if类的语句很容易进行解决。可是有时候我们面对多选的问题虽然也可以用 if···else if···else if···解决,但程序会显得非常的臃肿,例如,让我们来写一个从键盘输入数字并显示星期几的代码:

使用 if ···else if···完成

使用 switch 完成

(switch后面括号内的n就是我们上面提到的整型表达式,1~7的数字就是对应不同的n的输入值进行分支选择的路径,大致的意思就是如果n是1,就打印星期一等等)

两者完成的结果一致,可是 if else 需要多次使用 else if,在处理简单的多分支问题时的效率不及switch。

switch语句也有它的不足之处:

1.它只能处理整型的数据,对于浮点型的3.14等数据无法进行判断处理;

2.对于在一定范围内的数据switch需要一一列举,无法像 if 一样可以通过逻辑表达式进行处理。

例如如果一个数字在80~100我们输出“优秀”,if(number>=80 && number <= 10)即可完成,而switch需要从80到100一个个用case判断。

三、三目运算符 ?  :

三目运算符也就是三元运算符,它由两个符号组成,因此可以携带三个运算对象,分别由? : 分隔开。问号前放置判断条件,冒号左侧是条件成立时返回的结果,冒号右侧是条件不成立时返回的结果。

以寻找两数最大值为例。

(代码解释:a>=b成立吗,如果成立,那么就将a的值赋给max,否则将b的值赋给max)

这一条求解最大值max = (a > b) ? a : b  的三目运算符等价于下列的 if···else···语句     

以上就是我们这次关于分支结构的文章,因为我也在对C语言的学习和锻炼中,疏忽遗漏之处在所难免,还望广大读者朋友批评指正。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值