【连载】(选择执行语句if else和switch)乐创DIY C语言讲义​——3.8节(4)

4 选择执行语句
有些时候,我们希望程序既不顺序执行,也不只做单一的判断(代码运行还是不运行),很多时候,我们往往只希望对某一个条件的不同状态分别执行不同的语句,这样就构成C语言中的选择执行语句了。C语言中的选择执行语句有两种实现方式,一种是使用前面所说的“if …… else”形式,还有一种是使用“switch …… case”的形式,这种形式在有些地方也被称为“开关语句”。选择执行语句的执行顺序图如图3-8-14所示。
图3-8-14 选择执行语句结构
(1)“if …… else ……”选择语句
if语句的用法我们之前已经详细地讨论过,它是表示判断某一条件是否需要被执行的一种语句,但是,如果在if后面加了else之后,它们整体的意思就有改变了,就变成两个条件里面一定要运行一个这样子的二选一形式了,有点类似于我们要说的,“要么怎么样,否则怎么样”这样子的形式。
if……else……的一般形式如下所示:
表达式如果成立,就运行下面的执行语句,否则就运行else里面的执行语句。还是举字符判断的例子来说,输入一个字符,如果是字母就将其打印出来,如果是数字,就打印Good bye。此时这里的判断条件就是这个输入的字符要大于0的ASCII码,并且要小于9的ASCII码,因此我们可以写出如图3-8-15的代码。
图3-8-15字符判断代码
看到这里,有疑问的读者可能会问了,图3-8-15中的例子只是判断数字和字符,那万一我们要判断大写字母,小写字母,数字和其他字符呢?这种互斥逻辑的程序貌似不够用。这里,C语言还提供了另一种if……else if……else的多入口选择执行语句,其一般形式为:
如果条件1满足,就执行条件1里面的程序语句,如果条件2满足,就执行条件2里面的程序,……,如果上述条件都不满足,就执行else里面的语句。这里要注意,一般这种逻辑下,最后一个else里面的内容不要省略,因此大家在使用这种形式的时候,要充分考虑到这些关系的逻辑性,以及互斥性。
现在我们就可以利用这种程序架构来设计一个程序,用以区分输入字符是大写字母,小写字母,数字还是其他字符了,其代码如图3-8-16所示。

图3-8-16 判断输入字符类型

if和else构成的选择执行语句是单入口的,这里要注意下,哪怕我们在第一个if里面修改条件值,使它满足第二个if……else入口,这个程序也不会跳进去,这里大家需要注意下,测试代码如图3-8-17所示。
图3-8-17  if……else单入口测试
图3-8-17所示,首先定义一个number变量并给它赋值,使之满足if的第一个条件,在第一个条件中将number赋值,使之满足第二个条件入口,依次类推,结果程序运行完成后,我们可以发现,不管这个number的值怎么被修改,它只不过在最开始满足的第一个入口处运行。
(2)“switch  …… case ……”开关语句
“switch  …… case ……”又被称为开关语句,它的一般形式为:
这里需要注意的是,switch后面的表达式返回值必须为整数,变量也必须为整数。而下面case后面的值表示的是表达式的状态,它们千万不能重复,最后的default表示的是不满足上面任意一个case时的情况,可以不加,但是为了程序的严谨性,一般在使用时都加上去。以上就是对switch语句的介绍,好了现在让我们用switch语句写个简单的测试程序吧,对一个输入的数值,如果输入1则打印one,依次类推。这个程序的思想很简单,先获取输入的值,如果是任意一个数字,就跳到相应的case入口中,执行不同的打印,如图3-8-18所示。
图3-8-18 数字打印
在我们写完代码之后,发现程序并没有按照我们预期的运行结果去运行,我们明明输入了一个4,按理来说应该就打印出一个four,现在这个程序把4之后的所有内容都打印出来了。这个就是switch语句的特性,只规定入口,而没有规定出口,上述程序中字符‘4‘是一个入口,条件满足了,进去之后,就把以下的程序都执行了。因此我们需要在程序进入入口后,执行完相应的程序,马上退出这个开关语句,而前面我们说了,C语言中有一个关键词,可以里面控制程序的跳出,这个就是break。综上所述,图3-8-18中的代码应该改成图3-8-19中所呈现的代码。
图3-8-19 数字打印正确程序
其实switch之规定入口而没规定出口是合理的,因为很多程序可能需要有多个入口,这个在后面我们会经常用到。
C语言中还有最后一种程序执行方式,即跳转执行,这种方式由于有不确定的安全性,因此早就已经退出主流编程界,本书不讨论,有兴趣可以自己去搜资料,非常简单,一看就会。
(0)

相关推荐