目录
三、嵌套(if...else if...else)---可以有多个else if
c语言是结构化的程序设计语言,这里的结构指的是顺序结构、分支结构、循环结构这三种结构。其中顺序结构我们可以理解为按从上往下的顺序一个接一个的去读代码,读到谁就是谁发挥作用,其实也就是我们正常去看代码的思想(从上往下一个接一个的看),理解就好,这里我们就不过多赘述了。
那么接下来开始我们今天的主角分支结构语句,我们可以使用if(if...else、if...else if...else)和switch来实现分支语句。
一、if语句
if语句的语法形式如下:
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
例子:输入一个整数,判断是否为奇数。
我们输入的是3,3是奇数,if的表达式成立,所以向下执行print函数。
当我们输入4时,4不是奇数,表达式不成立,所以不执行printf函数,直接返回0(代码运行结束)。
右边呈现了我们奇数判断的逻辑,那么左边是什么意思呢?实际上,在c语言中,0表示假,非0表示真。也就是说当表达式里为整型0时,if语句是不会向下执行的,反之则会执行。
举个例子:
由此,我们得知if后面的括号中可以是判别式(例如:num % 2 == 1),也可以是一个整型数值(例如:1或者0)
需要注意的是,if语句后想要执行多指令时,需要使用大括号括起来。
例如:我们想写一个通过是否成年来判断是否可以谈恋爱的代码。
当我们运行起来这段代码可以看到,不管我是否大于等于18岁,都会打印出来"可以谈恋爱了"。
这就是因为我们想要让两个printf函数都在if语句中执行,而并没有用大括号将他们两个括住导致。这样写if语句只会决定离他最近的那个printf函数是否执行,而不会决定其他代码是否执行,所以我们输入的年龄无论是否成年,都会打印出"可以谈恋爱了"。
那么我们加上大括号再来看看。
这样就达到了我们想要的结果。
二、if...else
if...else语句的语法形式如下:
同样举判断是否可以谈恋爱的例子:
当年龄大于等于18岁时,我们用if输出了"可以谈恋爱了",那当输入的年龄小于18岁时,我们可以输出"不可以谈恋爱"吗?要想达到这样的效果,我们就需要用到if...else。
那么我们也就明白了if...else的用法,那就是如果if后的小括号里的表达式成立(为真),那就执行if后的语句1,如果表达式不成立(为假),那么就执行else后的语句2。
else后有一个以上作用语句时,我们依然需要用大括号括住,不过一般我们写代码都会用大括号阔上,养成好习惯。
同样表达式为0时,执行else后的语句2,表达式为非零时,执行语句1。
三、嵌套(if...else if...else)---可以有多个else if
在if else语句中, else可以与另⼀个if语句连用,构成多重判断。
举个例子:判断一个数是0还是正数或者负数。
根据运行结果我们可以知道嵌套语句的执行顺序,当if后的表达式1成立(为真)那就执行语句1,后面的都不执行,如果else if后的表达式2成立(为真)那就执行语句2,其他的都不执行,如果表达式1和2都不成立(为假)那么执行else后的语句3。
其实还有另一种嵌套方法,这里我们再举个例子:输入一个整数,如果是整数,再判断是奇数还是偶数,并输出,如果不是正数,输出非正数。
这里第一个if后的语句中的if...else也是一种嵌套。
四、多个else与if的配对的问题(悬空else问题)
如果有多个if和else,我们可以记住这样一条原则:else总是与距离其最近的if配对。
我们先看如下代码,观察一下他的运行结果是什么?
很多人第一次看到都会觉得运行结果是hehe或者haha,那我们来看一下运行结果。
结果是什么都没输出。我们来分析一下,我们知道else应该与距离其最近的if配对,我们换一种书写格式。
这是我们刚刚讲的嵌套,我们再来看一遍这个代码。由于a不等于1,所以第一个if的表达式不成立(为假),那么就不执行语句1(也就是嵌套进if语句的if...else语句)。然后直接return 0; ,所以什么也不输出。
如果我们希望else与第一个if配对,那么我们可以这样写。
运行结果为haha。
只要带上适当的大括号,我们的代码就会显得逻辑清晰许多,所以再今后的学习和练习中,大家在书写分支语句时,要养成写大括号的好习惯。