☰
分支和循环语句(上)1
2026/10/14 1:58:44 网站建设 项目流程

目录

一、 if语句

1.if

2.else

3.多条语句

4.多分⽀

5.嵌套if语句

6.悬空else问题

二、关系操作符

三、条件操作符

四、逻辑操作符:&& , || , !

1.逻辑取反运算符 !

2.逻辑与运算符&&

3.逻辑或运算符||

4.练习1:闰年的判断

5.短路


⽬标:

1. 掌握分支语句if,else,switch

2. 掌握关系操作符、条件操作符、逻辑操作符在代码中的应用,能够熟练使用

3. 掌握循环语句:for、while、do.while,以及break和continue

4. 理解并熟练应用循环嵌套解决问题

5. 锻炼自己阅读代码的能力

注:不要让自己的懒惰和学校的扫盲式教育阻碍你的前进;

“能不能…”、”…会不会更好”的问题尽量自己去敲代码试试,只有亲自摸索出的答案才会印象深刻。

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实仔细分析,我们的⽇常事都可以拆分为这三种结构或者这三种结构的组合。

我们可以使⽤if、switch实现分⽀结构,使⽤for、while、do while实现循环结构。



一、if语句


1.if


if 语句的语法形式如下:



表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。


例⼦:输⼊⼀个整数,判断是否为奇数

思路:只要是奇数,它除以二时一定余一

※==为判断相等


2.else


⼀个正整数不是奇数,就是偶数。给定⼀个任意的正整数,要判断是奇数还是偶数,怎么表⽰呢?就需要if...else...语句了,语法形式如下:



举例:输⼊⼀个正整数,如果是奇数打印是奇数,否则打印偶数。



练习:输⼊⼀个成绩,成绩 >= 60就输出:拿捏拿捏,否则就输出:补考补考~



3.多条语句


默认在 if 和 else 语句中默认都只控制⼀条语句,⽐如:



上⾯的代码,你会发现输⼊的值不管是>=60 还是<60,"庆祝⼀下" 都会打印在屏幕上。


这是因为if语句只能控制⼀条语句,就是 printf("拿捏拿捏~\n"); ,if语句为真,则打印;if语句为假,则不打印,对于 printf("庆祝⼀下\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。

那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤{}将代码括起来, else 后也可以跟上⼤括号。如:



4.多分⽀


在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多分⽀的场景。



⽐如:总价“满50减15,满30减8,满20减5,不满20元,不参与活动”,怎么实现?



练习:暗恋对象回消息速度和⼼情指数

如果回复时间⼩于等于1分钟,秒回!今天⼀定有戏

如果回复时间在1分钟到10分钟,还⾏,ta可能在忙

如果回复时间在10分钟到1⼩时,ta可能没看到信息……我去打游戏了

如果回复时间超过1⼩时,别等了,代码不香吗?



5.嵌套if语句


有时候,我们需要在if语句中嵌套if语句,形成多层嵌套的判断。

⽐如:评奖学⾦资格

1. 成绩 >= 85,没有挂科,没有记过处分,有奖学⾦

2. 其中任意⼀个条件不满⾜,都不能评奖

怎么实现?


※嵌套的if语句是没有顺序要求的,但当多项条件不满足时,程序会输出相对最外层的理由,此处若全不满足会输出"成绩不满足"一栏。


6.悬空else问题


如果有多个if和else,可以记住这样⼀条规则,else总是与前⾯最近的、还没有配对的if结合。

看下⾯代码,执⾏的结果是空。



为什么呢?

这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是与前⾯最近的、还没有配对的 if 匹配。

上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。


※此处还要注意一种代码风格问题,不要因为凌乱的排版加重矫正代码的工作量:


若想了解更多代码的书写风格,记得看《高质量C++/C编程指南》,尤其是前三章。


如果代码改成下⾯这样就更加容易理解了。



或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码(用大括号把if二号隔离起来):



当然,也可以追求一下if一号和else的大括号对齐:



只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以以后在写代码的时候要注意括号的使⽤,让代码的可读性更⾼。


二、关系操作符

C语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称为“关系运算符”(relational operator),主要有下⾯6个。



关系表达式通常返回0或1,表⽰真假。

C 语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。关系表达式常⽤于 if 或 while 结构。


①相等运算符==与赋值运算符=是两个不⼀样的运算符,不要混淆(具体含义往前翻)。

※有个小技巧可以判断一下,那就是互换一下变量与数字的位置,通过观察代码能否运行来区分它们。不能再从右向左导致系统报错的是赋值。



上⾯⽰例中,原意是n == 5,但是不⼩⼼写成n = 5。这个式⼦表⽰对变量n赋值5,它的返回值为5,所以if判断总是为真。

为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边。

这样的话,如果把==误写成=,编译器就会报错。


②多个关系运算符不宜连⽤!!



上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。



上面式子中i<j返回0或1,所以最终是0或1与变量k进行比较,如果想要判断变量j的值是否存在i和k之间,应该使用下面的写法:



⽐如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。

如果我们这样写:



当我们输⼊10的时候,依然输出⻘年,这是因为我们先拿18和age中存放的10⽐较,表达式18<=10为假, 18<=age 的结果是0,再拿0和36⽐较,0<=36为真,所以打印了 ⻘年 ,所以即使当age是10的时候,也能打印 ⻘年 ,逻辑上是有问题,这个代码应该怎么写呢?



以上就是关系操作符,我们需要掌握的,剩下的只要按照字⾯意思理解使⽤就⾏,没有特别注意的。


三、条件操作符


条件操作符也叫三⽬操作符,需要接受三个操作数,形式如下。



条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。



练习:使⽤条件表达式实现找两个数中较⼤值。

将:


变为:



条件操作符也能嵌套使⽤,但是不建议嵌套太深,如果嵌套,要注意换⾏对⻬的⽅式来写。


四、逻辑操作符:&&,||,!

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符


1.逻辑取反运算符!



这是一个单目操作符。⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码



如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真


2.逻辑与运算符&&



&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , &&都真才为真,有假则为假。⽐如:如果我们说⽉份是3⽉到5⽉,是春天,那如何使⽤代码体现?



这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜


3.逻辑或运算符||



|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||两边的表达式只要有真就是真,都为假才为假。

⽐如:我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?



4.练习1:闰年的判断

输⼊⼀个年份year,判断year是否是闰年

闰年判断的规则:

1. 能被4整除并且不能被100整除是闰年

2. 能被400整除是闰年

两规则的关系是:1可以单独判断就不用启动2判断;若1不行,则启动2判断,2也不行才不算闰年。



※||两边的括号是可以去掉的,但不建议。


5.短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

如前⾯的代码:



表达式中&& 的左操作数是 month >= 3 ,右操作数是 month <= 5 ,当左操作数 month >= 3 的结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。对于 || 操作符是一样的。


如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。所以, || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。


练习:阅读代码,计算代码输出的结果



结果是a=1,b=2,c=3,d=4,另外i=0。因为后置++导致a=0在让&&识别完后才会加1,因此&&不会再向后运行。

再看一个:



结果是a=2,b=2,c=3,d=4。因为a、b、c用"或"连接,即一旦a=1被系统赋给i使i=1后,后面都不再执行,只有a++会执行使a=3。

把a变为0:



结果是a=1,b=3,c=3,d=4。当代入a=0时,左边为假,则右边有必要判断,符号会使程序运行到右边,也就是++b,++b为真,d++就没必要运行。因此i=2,a++、++b运行使a=1,b=3。


※阅读代码,体会逻辑操作符和短路现象:

游戏中,同时持有‘钥匙’且血量>30%,或被诅咒了,才能进入隐藏房间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询