C语言中的基本结构3——循环结构篇
一、前言
前两篇博客我们结束了对于顺序结构和分支结构的介绍,本篇我们将学习C语言中最后一个基本结构——循环。
二、何为循环结构
在不知道循环结构前如果需要打印1~10的数字,我们得从1 printf 到10,1~10的任务量尚且可以对付,那如果需要从1打印到1000、10000呢?使用 printf 的办法就显得捉襟见肘了,键盘的Ctrl键、C键、V键恐怕都得摁出火花来。为了解决这一难题,C语言向我们提供了三种能够实现循环的语句。
1.while语句
2.do···while语句
3.for语句
在学习之前,我们需要知道程序能顺利完成循环要求的三个条件,即:循环条件的初始化、循环的判断、循环条件的调整。
当程序运行进入循环语句后,除非不再满足循环的判断条件,或者通过特殊方式(例如return、break)提前跳出循环,否则将会陷入死循环中,一直不停地重复执行循环语句的内容。
了解到这些基本要求后下面开始我们的学习。
三、三种循环语句
1.while
while语句的基本结构为
//1.初始化数据
while (/*2.对条件做出判断*/)
{
//执行内容
//3.对条件做出调整
}
以打印1~10为例
我们首先将n的值初始化为1,在while语句先进行判断,符合条件就执行打印的操作,将第一次的 n 表示的值打印完成后 n 自增1,当 n 自增到10后仍满足循环的条件,再次打印并自增到11,此时再进行判断就不再满足<=10的条件了,于是程序离开while循环。
如果少了对条件的调整会怎样?
能够很清楚地看到:当我们将 n++注释掉后再次运行,控制台内不停地循环打印 n 的初始值1,它既不会打印其他的数字,也不会主动停下,无止息的只有控制台内跳动着的1,这时我们将控制台关闭了就好。如果以后遇到自己的代码运行起来后出现类似的情况,就可以考虑是不是循环变量的调整出现了问题并做出修改。
小tip:单一的 while()语句括号后不需要加分号,加了分号编译系统就认为单独的一个 while()是一条语句,那么就会反复地执行判断,这同样也是死循环。
2.do···while
do···while 与 while 非常类似,其区别在于对于第一次进入循环是否做出判断。while 在每一次的执行时都会进行条件的判断,而 do while 则不管三七二十一,先执行一次再说。
3.for
for语句可以说是while语句的浓缩版了,它集初始化、条件判断、条件调整为一体。三个条件由两个分号隔开。
for (/*初始化; 条件判断; 条件调整*/)
{
//执行内容
}
for语句同样可以完成while的功能。
四、循环的嵌套
循环语句是可以实现嵌套的。
以打印乘法表为例:
最外层的循环以 i 控制,当第一次进入最外层循环时 i=1,此时内层循环的判断条件为 j<=1,内层循环的次数也只有一次,因此在控制台的第一行打印1*1=1后便离开内层循环,再次回到外层循环,执行换行的打印。
以此类推,当 i 逐步变化到 9 时,内层循环的判断条件也变成 j<=9,所以在最后一行 i 反复使用了9次,而 j 的值从1变到了9。(为了让打印的结果更符合我们的习惯,所以我将内层循环%d的显示顺序变成了 j,i。%-2d为对齐方式,意思是向左对齐2个空格)
五、如何根据需要使用适合的循环语句?
一般而言,只要情况合适,三种循环结构都是可以使用的。但是在处理不知道循环次数的情况下,while比for更加合适。比如在很多oj题中,我们事先并不知道究竟有多少组数据的输入,对于循环次数的限制也无从谈起,因此使用下面的while语句进行判断更加合适。
while("scanf(内容) != EOF")
当输入内容符合条件时就可以一直进行循环。
六、循环的辅助:continue和break
通常当程序进入循环后在下一次循环前会执行完循环体中的所有语句。而continue和break可以让程序提前进入下一轮循环或者是直接离开循环
1.continue
continue的功能是:当程序运行到continue时不再执行本次循环后面的代码,直接开始下一轮的循环。
例如我们打印1~10时附加条件
if (i == 8)
{
continue;
}
观察运行结果,除了8以外所有的数字都显示了出来
2.break
break的功能是:当程序运行到break时,直接跳出break所在的循环。
我们将上面代码的附加条件修改为
if (i == 8)
{
break;
}
观察运行结果,当打印完数字7后 i 增加到8,程序执行了break后所有的数字都不再打印
3.其余的方法:goto,return离开循环
使用goto和return同样也可以离开循环。
1.goto
其中因为goto的使用会破坏程序的顺序结构而饱受诟病。其结构为:
goto 名称;
······
名称:
只要程序走到了goto语句,那么它就会寻找你要让它去的地方,从那个地方再开始执行。
体会goto设定的不同位置带来的不同结果。
需要注意,goto语句在使用时会造成顺序结构的颠倒,有死循环的危机,因此在编程时如非必要,尽量不要使用goto语句
2.return
看到出现return,有不少朋友会感到惊奇:return 不是应该只有一个 return 0 吗,一个程序中难道可以同时存在多个return?!答案是是的,一个程序中允许多个return的出现。
return 的功能比break更加强大,它不仅能结束循环,更是能直接结束程序的运行。
在执行了return语句后,程序就直接结束了,这也是为什么我们编写的所有C代码必须有return 0的原因,如果没有return 0,那么程序就不知道该在何时结束。
七、结束语
C语言的三个基本结构大致介绍到这里,之后我们会对前面涉及到但没有讲的运算符、条件表达式等知识点进行学习。休息一下,马上回来。
标签:语句,return,goto,C语言,break,while,循环,结构 From: https://blog.csdn.net/2302_76585709/article/details/137202708