本章我们就开始讲解分支与循环,可以说,分支与循环贯穿我们整个c语言的学习,因此本章的内容十分重要。
1.什么是分支与循环
其实很好理解,分支就如同树枝一样,一个主干有许多分支,而循环呢,顾名思义即使某个物体在特定条件下,来回重复执行任务,例如时间,每24小时重新开始。
而在c语言中则分为了三种结构:顺序结构、选择结构、循环结构
顺序结构:程序不经历分支与循环,一条一条执行。
选择结构:⽤ if 、 switch语句处理
循环结构:用for 、 while 、 do while语句处理
2.常见的操作符
在认识分支与循环前,我们先了解几种常见的操作符
1.关系操作符
C 语⾔⽤于
⽐较
的表达式,称为 “关系表达式”。
主要有下⾯6个。
•
>
⼤于运算符
•
<
⼩于运算符
•
>=
⼤于等于运算符
•
<=
⼩于等于运算符
•
==
相等运算符
•
!=
不相等运算符
关系表达式通常返回
0
或
1
,表⽰真假。
C 语⾔中,0 表⽰假,所有⾮零值表⽰真
。⽐如,
20 > 12
返回
1
,
12 > 20
返回
0
。
注意:1.相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆
2.多个关系运算符不宜连⽤。
例如:
i < j < k
上⾯式⼦中,
i < j
返回
0
或
1
,所以最终是
0
或
1
与变量
k
进⾏⽐较。
如果想要判断变量
j 的值是否在 i
和
k
之间,应该使⽤下⾯的写法。
i < j && j < k(&&表示并且,下面会讲)
2.条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的。
形式如下 exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果
exp1
为真,
exp2
计算,计算的结果是整个表达式的结果;如果
exp1
为假,
exp3
计算,
计算的结果是整个表达式的结果
。
3.逻辑操作符:&& , || , !
1. 逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
•
!
:逻辑取反运算符(改变单个表达式的真假)。
•
&&
:与运算符,就是并且
意思(两侧的表达式都为真,则为真,否则为假)。
•
||
:或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假
2.短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
有以下代码
month >=
3
&& month <=
5
表达式中&& 的左操作数是
month >= 3
,右操作数是
month <= 5
,当左操作数
month >= 3
的
结果是0的时候,即使不判断
month <= 5
,整个表达式的结果也是0。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
|| 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
3.if语句
1.语法
if ( 表达式 )
语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
2.else
else是与if搭配来使用的,else表示为其余
语法:
if
(
表达式
)
语句
1
else
语句
2
默认在 if 和 else 语句中默认都只控制⼀条语句
上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为
if
语句只能控制⼀条语句,就是
printf("
成年了
\n");
,if语句为真,则打印成年了,
if语句为假,则不打印,对于
printf("
可以谈恋爱了
\n");
是独⽴存在的,不管if语句的条件的真
假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤
{} 将代码括起来, else 后也可以跟上⼤括号
3.if嵌套
在
if else
语句中,
else
可以与另⼀个
if
语句连⽤,构成多重判断
上图中蓝⾊背景的代码就是嵌套在前⾯的
else
⼦句中的,构成了嵌套的if语句。
还有一种嵌套方法
4.悬空else问题
看下面这个例子
为什么什么都不打印
这就是悬空
else
的问题,如果有多个
if
和
else
,可以记住这样⼀条规则,
else 总是跟最接近
的 if 匹配。
上⾯的代码排版,让
else
和第⼀个
if
语句对⻬,让我们以为
else
是和第⼀个if匹配的,当
if
语句不成⽴的时候,⾃然想到的就是执⾏
else
⼦句,打印
haha
,但实际上
else
是和第⼆个
if
进⾏匹配的,这样后边的
if...else
语句是嵌套在第⼀个
if
语句中的,如果第⼀个
if
语句就不
成⽴,嵌套
if
和
else
就没机会执⾏了,最终啥都不打印。
上述的代码可以转为下面这样
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
4.switch 语句
1.语法
除了
if
语句外,C语⾔还提供了
switch
语句来实现分⽀结构。
switch
语句是⼀种特殊形式的
if...else
结构,⽤于判断条件有多个结果的情况。它把多重
的
else if
改成更易⽤、可读性更好的形式。
语法如下:
switch
(expression) {
case
value1: statement
case
value2: statement
default
: statement
}
上⾯代码中,根据表达式
expression
不同的值,执⾏相应的
case
分⽀。如果找不到对应的值,
就执⾏
default
分⽀。
注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
大家虽然可能还不知道怎么用,下面有个例子
可能会有人问break是啥,为什么语法中没有,下面为大家讲解
2.switch中的break
前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?
我们发现没有break的话程序会一直往下执行,直到遇到break停下
只有在
switch
语句中使⽤
break
才能在跳出
switch
语 句,如果某⼀个 case
语句的后边没有
break
语句,代码会继续往下执⾏,有可能执⾏其他
case 语句中的代码,直到遇到 break
语句或者
switch
语句结束。
那有人肯定会说我只要用到switch语句每有case,后面就加上break不就行了,这个是不对的
我们看下面的代码
、
我们发现应该根据实际的情况,来在代码中觉得是否使⽤
break
,或者在哪⾥使⽤
break
,才能正确完成实际的需求。
3.switch语句中的case和default的顺序问题
在
switch
语句中
case
⼦句和
default
⼦句有要求顺序吗?
default
只能放在最后吗?
其实,在
switch
语句中
case
语句和
default
语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把
default
⼦句放在最后处理的。
5.结语
本章的内容结束了,我们认识了分支的结构和处理,到现在我们就可以写一些有趣的代码了,不过我们的学习之路仍未完成,继续加油吧,少男少女哟