目录
一、循环结构
二、break和continue 语句
三、goto 语句
四、Q & A
//该篇文章使用的部分素材和内容来自比特就业课
一、循环结构
1.while循环
其基本使用方法如上图所示,程序会首先判断表达式,当值为0(假)时,循环直接结束。当值不为0(真)时,则执行循环程序,程序每执行一遍,都会重新对表达式进行判断。
while循环的使用事例:
题:在屏幕上打印1 ~100
2.for循环
其基本使用方法如上图所示。
表达式1:用于循环变量的初始化,多个变量用逗号隔开
表达式2: 用于循环结束的条件判断
表达式3:用于循环变量的调整
❗️注意:各表达式用分号隔开!
在for循环中,程序首先会执行表达式1 来对循环变量进行初始化,然后程序会对表达式2进行判断,当其值为0(假)时,循环结束;反之,当其值不为0(真)时,循环语句会被执行,当语句执行结束后,表达式3会被执行,从而调整循环变量。然后程序会再执行表达式2,来决定是否继续进行循环。
❗️注意:在循环过程中,表达式1只会执行一次,而表达式2和表达式3会随着循环重复执行,通常情况下(无break,continue语句等),表达式2的执行次数会比表达式3多一次,这是因为当表达式3调整循环变量使其达到令表达式2为0(假)的值时,表达式2还要再多运行一次,来判断循环变量的值是否已经到达临界,因为表达式2的执行顺序在表达式3前,所以表达式3在变量值到达临界后不再执行
举个例子:
上图程序中,表达式2分别在:
a为10、11、12、13、14、15、16、17、18、19、20,21时执行,共12次
表达式3则在:
a为10,11,12,13,14,15,16,17,18,19,20时执行,共11次
3.do while 循环
其基本使用方法如上图所示。与while循环和for循环不同的是,do while循环会先执行一次语句,再判断是否继续重复执行,当表达式的判断结果为0(假)时,循环结束;当结果为非0值(真)时,则继续循环。
❗️注意:do while循环中的语句至少执行一次!
do while循环的使用事例:
题:在屏幕上打印1 ~100:
二、break 和 continue语句
在执行循环的过程中,当发生一些特殊情况时,我们可能需要提前终止循环或跳过循环的一些过程,这时我们就需要使用break和continue 两个关键字
break语句:用于永久地终止循环,当break被执行,程序就会跳出循环,继续向下运行。
continue 语句:用于跳过continue后面的语句,在while语句和for语句中的使用有区别。
While中的break:
通过上图可知,当a的值小于5时,if语句的表达式条件不满足,break语句未被执行,因此a正常进行循环,并被打印,而当a的值增加到5时,if语句开始执行,break语句使得while循环永久终止,a不再增加,也不再被打印。
While中的continue:
当我们将上图的break换为continue时:
与break不同的是,continue语句只会跳过某次循环中continue语句后的内容,但通过上图我们却发现,使用continue的结果与break相同,这是因为使a每次循环加1的a++ ;语句在continue的后方,这就导致a的值在达到5之后就不会发生变化,使得if语句的条件总满足,continue语句反复运行,令整个程序陷入了死循环。
若想避免这种情况,使该程序只跳过数字5的打印,则需将a++;语句移至continue前,并将a的初始值设为0(因为a++;语句被移至printf语句的前方,使得结果由先打印,后加1变为先加1,后打印)即可。
for中的break:
与在while语句中的用法类似:
for中的continue:
当我们将上图的break换成continue时:
可以看到,在for循环中,continue虽然在a为5时,跳过了printf语句,但它并不会影响for语句中的表达式3对循环变量的调整,并且由于表达式3的执行顺序在printf语句之后,因此打印结果非常精确地跳过了数字5并终止于数字10。
do while中的break和continue:
do while循环中break和continue的用法与while循环中的用法基本相同。
三、goto语句
goto语句是C语言中的一种特别语法,可以实现在同一个函数内跳转到设置好的标号处。
例如:
在本图中,next为跳转标号(跳转标号可以自己设定,不一定为next,也写成again等)。在上图中,程序在打印完“hehe ”后,由goto语句跳转到了跳转标号next处,并继续执行,打印了“跳过了haha的打印”。
❗️注意:goto语句如果使用的不当,可能会扰乱程序的执行顺序,使程序陷入混乱。
但goto语句也有其优点,可以利用它来快速跳出多层循环。
在上图中有多个循环结构,若想利用break语句来跳出,则需要多个,而若使用goto语句则可快速跳出。
四、Q & A
1. while的执行流程?
答:先判断表达式的真假,假,则结束循环;真,则执行语句,直至表达式条件不满足,终止。
2. for循环后括号内三个表达式的作用及其执行顺序?(注意之间用分号隔开)
答:表达式1用于初始化循环变量;表达式2用于设定循环的执行(判断)条件;表达式3用于调整循环变量。
表达式1率先执行且只执行一次。表达式2随后执行,表达式3最后执行。
3. do-while和while的区别?
答:do while语句至少要执行循环内语句一次,而while则不需要。
4. 循环体内想执行多个语句的时候怎么办?
答:使用大括号。
5. break和continue的区别?
答:break用于永久地终止循环。
continue则用于在某次循环中跳过其后面的语句(for循环中的表达式3不会被跳过)。
6. if可以直接用break和continue吗?在switch里可以应用吗?
答:不可以,break和continue主要应用于循环结构中,不能用于分支结构。
7. while、for、do-while使用break和continue有区别吗?
答:有区别(详情见上文)。
8. 为何不推荐使用goto语句?
答:因为其使用不当易导致程序逻辑混乱。