C语言的循环有三种,分别是while 、for(用的最多)、do while(用的较少)。
while:
while(运行下去的条件,即当括号内的表达式为真的时候,代码块运行一次)
{代码块,也称循环体}
(或者当代码只有一行的时候,我们可以不需要大括号)
比如我们做一个简单的while代码
那么这个代码大的运行条件就是a要小于10。
最终会打印0到9的数字,当第九次代码块执行后,a=10,下一次代码就不会执行了
因此我们可以发现,条件表达式总会比循环体多执行一次,而这一次的判断就将我们的循环停止1了下来。(在没break,continue,goto等情况下)
for:
当我们做用while写一个很长的循环体的时候,可能程序员看变量增减的时候不怎么方便
这里(如果初学者看不懂没关系)如果看第二个while我们还要看最上面a的初始值,比较麻烦
因此for就体出了它的优势
for(变量的赋值;运行条件;变量改变方式)
{代码块}
每次for先看变量的赋值和运行条件,满足运行条件后,再运行代码块,然后再运行变量的改变方式
另外,小括号里面的三个式子可以省略(a;;c)(;;c)(;b;)(;;;)
a去掉那么循环前面就要给a赋值,b去掉这个循环不能停止除非用break,c没有就无意义的死循环了,当a,b,c都没有就相当于一个无限循环。
可能这样看不懂,我们来写个例子
for先看赋了0的a是否小于10,满足,然后执行打印a,然后a++
与while的进行对比我们发现,for循环将一个变量的出生改变停止都结合到了一个小括号里面
那么这样写,我们的代码块就纯粹是执行循环任务,与我们控制循环的代码(a++或者其他的)分看,从而很方便程序员的查看。
那么我们上面的代码就可以改成
这样是否就好分析许多,当我们发现代码有问题的时候,for循环可以让我们将控制循环的变量的代码和进实际操作运行的代码分别开,我们可以更好的检查哪里出现了错误。
因此我推荐大家使用for循环。
do while:
do{代码块}
while(条件语句);
如果条件不满足,循环就结束。
举例:
而这种循环的特点就是,最少做一次循环。先do再判断下一次循环能否进行。
因此有时候可能我们不需要它执行一次,那么这个循环我们就用不了。但是有些场景用它又很方便
比如,我们玩游戏最少都是一次,因此我们可以将游戏运行代码放到do里面,然后最后失败让玩家输入相应的数据通过while来判断游戏是否进行下去。
三件套的差别:
while偏向不需要变量限制的的代码块,for偏向有变量限制的代码块,do while偏向至少运行一次的代码块。
那么循环三件套我们就学习完了,但是并不能满足编程要求
break:
有时候我们不需要循环彻底进行,就要用到break提前让循环停止
举例:
这是一个判断是否为质数的
如果看不懂可以看下面这个
以97为例,意思就是将2到96的数字都被97除以一遍,如果有一次整除了这个循环就可以停止了
还有我们有时候不知道要运行多久,就要用到无限循环,最后用到break停止。
就像追女孩子一样,中途一天女孩子对你说不喜欢你,你肯定就要停止了。
continue:(从continue跳过这次循环,continue下面的且在代码块里的代码不会运行)
比如下面一个例子,我们要打印1到9且不包括4的数时,我们不可能在4的时候用break吧,当然要用if.
这样可能看不出,当我们代码多后,continue就很重要
goto:
命名:{代码块}
goto 命名;
举例:打印0到10,白色的a就是goto要去的地方,平时运行并不会滤过命名里面代码从上往畅通无阻。当遇到goto时,会转回命名里代码块往下一直运行。
goto我不推荐大家用,因为会让我们代码的运行顺序打乱。让代码逻辑变得复杂,程序员不好分析。
但是,有些情况我推荐大家使用:
当我们在进行循环嵌套的的时候,可能三四的循环,会导致很难停下循环,要从内到外逐一停止,这样会很麻烦。如果用goto可以直接跳出多层循环将其停止,比如goto的代码块是break,我们就可以直接停止。
循环的嵌套:
有时候我们可能无法满足一个循环运行带来最终效果,那么就可以循环嵌套。
例如打印3到100的质数。
我们上面已经将如何判断一个数是否为质数,那么我们只要在这个循环外面再加一个循环来输入3到100的数字,就可以满足我们的要强求。
因此我们看一个问题是否需要多层循环的时候,我们可以将这个问题细小化。先写出某一个循环,在向外套循环或者向里加循环。
无限循环:
有时候我们可能不知道循环要运行多久,因此就需要无限循环和break。
while(非零数),非零即真,那么就是无限循环
for(;;;)
do while( 非零)
f:{}goto f;
这四种都可以无限循环,,但推荐while(1),写的很简单明了。
如果有错误的请指正!