c语言中的分支结构有if和switch,循环结构有for,while和do while。并且在其中经常会与break,continue,goto语句进行穿插使用。
1.if语句
(1) if
if 语句的语法形式:
表达式为真,则语句执行,表达式为假,则语句不执行。
注意: c语言中0为假,非0为真。
if语句的流程图如下:
(2) else
else语句是必须要与if语句联合使用的,也就是if...else语句。下面我们来看一个例子:如果我想要判断一个人是否成年(18岁),用if...else语句完成应该怎么做呢?
图中我们看到,如果输入10,那么if语句的表达式(age>=18)为假,所以不执行if后面的语句,执行else后面的语句;如果输入20,则表达式(age>=10)为真,执行if后面的语句,不执行else后面的语句。这就是if...else的分支。
(3)分支中包含多条语句
if和else都默认只能控制一条语句
比如:
可以看到无论age是否大于18,第九行语句都会被执行。这是因为if语句只能控制一条语句(第八行),如果想要控制多条语句,可以把要控制的语句用” () "括起来,如:
(4)嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
比如:判断一个数字是0,还是正数或者负数
再比如:如果x是正数,就判断x是奇数还是偶数,并输出;否则输出x是非负数。
(5)悬空else问题
看以下代码:
很多初学者都以为程序运行的结果是打印haha,判断x是0不是1就立马执行else语句,输出结果haha。实际上输出结果什么也没有,这是因为else只能与它最近的if配对,也就是图中第二个if语句,如果第一个if语句条件不成立的话,那么第二个if语句就没有机会执行了,else语句自然而然也没有机会执行了,如果我们把代码写成这样可能会更加容易理解。
所以应该注意, else语句只能与它上面最近的if语句配对。
2.switch 语句
除了if语句,c语言中还有switch语句可以实现分支,switch语句可以说是一种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。
上面就是switch语句的书写格式,其中的case语句可以有多条,switch语句会根据表达式expression的值执行对应的case语句,如果找不到就和=会执行default语句。
注意:switch 后的 expression 必须是整型表达式
case 后的值,必须是整形常量表达式
case 和后边的数字之间必须有空格
3.if语句和switch语句的对⽐
问题:输⼊任意⼀个整数值,计算除3之后的余数。
用if语句完成
用switch语句完成
4.switch中的break和default
(1)break
如果上面的代码中的break语句去掉会出现什么情况呢?
可以看到如果我们把break语句去掉之后,分支全部被执行了,原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
(2)default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊
default 语 句。
比如:输入1到7,并且输出与之对应的星期,如:输入1,输出星期一。
可以看到,当我们输入8的时候,在case语句中找不到与8对应的分支,那么就会执行defalut语句。