C语言循环
C语言的循环while、for、do…while…1、while循环while(表达式){语句}先判断表达式为真时执行while里面的语句执行大括号中的语句之后再次回到while处的表达式判断其是否为真如果为真则继续向下执行所以我们可以看到当表达式为真时while下面大阔号括起来的语句会一直循环直到表达式为假时则跳出循环。举例inti1;//初始化变量while(i8)//判断循环条件即表达式{printf(%d ,i);//打印i;//打印完i自加1}当我们运行上述程序,你会得到1 2 3 4 5 6 7 8 .那我们来走一次这个程序1第一轮当i1时判断i是否小于等于81是小于8 的执行循环体while大括号里面的内容打印i1之后执行i此时i2。回到while处判断循环条件是否成立。2第二轮当i2时判断i是否小于等于82是小于8 的执行循环体while大括号里面的内容打印i2之后执行i此时i3。回到while处判断循环条件是否成立。3第三轮当i3时判断i是否小于等于83是小于8 的执行循环体while大括号里面的内容打印i3之后执行i此时i4。回到while处判断循环条件是否成立。4第四轮当i4时判断i是否小于等于84是小于8 的执行循环体while大括号里面的内容打印i4之后执行i此时i5。回到while处判断循环条件是否成立。5第五轮当i5时判断i是否小于等于85是小于8 的执行循环体while大括号里面的内容打印i5之后执行i此时i6。回到while处判断循环条件是否成立。6第六轮当i6时判断i是否小于等于86是小于8 的执行循环体while大括号里面的内容打印i6之后执行i此时i7。回到while处判断循环条件是否成立。7第七轮当i7时判断i是否小于等于87是小于8 的执行循环体while大括号里面的内容打印i7之后执行i此时i8。回到while处判断循环条件是否成立。8第八轮当i8时判断i是否小于等于88是等于8 的执行循环体while大括号里面的内容打印i8之后执行i此时i9。回到while处判断循环条件是否成立。8第八轮当i9时判断i是否小于等于89是大于8 的不满足循环条件此时结束循环。可以看到while这个循环轮次展示了典型的while循环执行流程条件检查→执行语句→计数器更新→下一轮循环。在算法中这样的循环结构常用于需要重复执行固定次数的场景比如遍历数组、重复计算等。2、for循环for(表达式1表达式2表达式3){语句}我们先来解释一下这个for循环的结构1表达式1表示初始化如int i0。而这个表达式只执行一次。2表达式2判断部分即满足条件则继续循环不满足则停止循环。3表达式3调整部分如i,i–。这三个部分都可以省略不写for() .但是判断部分省略会使循环条件恒成立导致死循环。同样也使用for循环实现打印数字1-8for(inti1;i8;i){printf(%d ,i);}上述程序还可以表示为inti0;for(i1;i8;i){printf(%d ,i);}是一样的只是第一个它是初始化和赋值一起操作了第二个分开了而已。当我们运行上述程序,你会得到1 2 3 4 5 6 7 8 .那我们来走一次这个程序1初始化阶段i被初始化为1这表示循环的起点为1.2条件检查每次循环开始前都执行一次判断条件如满足i8条件为真则执行循环体里面的语句打印i的值。不满足i8条件即i8则条件为假停止循环。3当条件为真则执行printf(%d ,i);语句打印i4执行完循环体即大括号中的语句后执行增量i自加后的i又回到判断条件进行判断此时i2,将2与8相比5一直重复上述操作。6直到当i9时则不满足i8的条件那么循环停止不再执行循环体中的语句。对比for循环和while循环我们把这两个程序拿出来看一下这个是while语句构成的循环这个是for语句构成的循环两个进行对比图中红色的框表示的是初始化蓝色的框表示判断条件紫色的框为调整部分。所以不管是for循环还是while循环都包含这三个表达式但for循环的表达形式更为紧凑while循环会分散一些。所以使用for循环时循环体中语句太多的时候千万不要忘了调整部分表达式。这两种循环方式都可以实现同样的效果但对于while()循环常用于不清楚具体循环次数的程序中而for循环用于循环次数明确的地方。这只是小建议当我们了解了这两个循环我们是不是可以尝试实现求1-100中3的倍数。我觉得刚学习编程对我来说比较重要的是思考然后理清楚逻辑实现的办法。所以我在完成程序的时候会一步一步的告诉自己要实现什么然后再去调试不满足要求在修改。为了实现1-100中3的倍数那解题思路1首先应该实现数字1-100那么可以通过循环将这100个数字实现。2其次有了所有的数字那么就要从这些数字中寻找3的倍数。说到3的倍数这是什么意思3、6、9、12、15…这些是不是都是3的倍数我们是不是可以理解为3的倍数就是可以被3整除的数。那么如果要被3整除没有余数。所以我们可以对数字求3的模判断是否为0如果余数为零则是3的倍数不为零则不是3的倍数。这个地方可以使用判断。3最后找到一个3的倍数是不是要打印出来看看结果对不对如果不对那么修改程序。根据上述的思路我们走一遍这里我们使用for循环本人比较喜欢for循环1使用for循环实现1-100;for(inti1;i100;i)//从1可开始100结束23整除没有余数i%30(3) 打印出来看看结果printf(%d,i);好将这三个语句组合起来实现功能#includestdio.hintmain(){for(i1;i100;i){if(i%3){printf(%d,i);}}return0;}上面的程序 便可实现1-100里3的倍数数字打印。3、do…while…循环do{语句}while(表达式)这个循环体有一个特点就是不管一开始条件是否满足都会先执行一次。即先执行大括号中的语句然后在判断表达式是否为真确定是否进行下一个循环。例#includestdio.hintmain(){inti0;do{printf(haha\n);}while(i0);}输出为haha。对比之前的循环会先判断条件表达式是否满足即先判断i0满不满足要求在本题中i0则是不满足的则不会执行循环体。但do…while…循环不一样他先执行一次do后面大括号中的循环体语句然后再判断i是否大于零。4、break和continue说到循环就不得不提到break和continue之前在分支switch语句时也出现了break那这两个又是什么语句呢首先明确他们的概念1break表示永久终止循环执行时只要遇到了break 那么不管之后还有多少次循环都不再执行跳出循环体向下执行。例intmain(){inti0;inta0;for(i1;i4;i)//循环4次{if(i3)//i等于3时跳出循环{break;}printf(%d\n,i);打印i}a8;printf(%d\n,a);return0;}上述程序打印出来的是1 2 8为什么原本这个循环他应该执行4次的但是遇到break语句之后提前终止的循环那么他具体怎么实现的1第一轮当i1时判断i是否小于等于41是小于4 的执行循环体while大括号里面的内容由于1不等于3即不满足if条件语句中的表达式所以不会执行if语句大括号里面的内容直接执行打印i1之后执行i此时i2。2第二轮当i2时判断i是否小于等于42是小于4 的执行循环体while大括号里面的内容由于2不等于3即不满足if条件语句中的表达式所以不会执行if语句大括号里面的内容直接执行打印i2之后执行i此时i3。3第三轮当i3时判断i是否小于等于43是小于4 的执行循环体while大括号里面的内容由于3等于3即满足if条件语句中的表达式所以执行if语句大括号里面的内容break语句此时直接跳出循环不再执行打印。4跳出循环后还需要按顺序执行循环外的语句将8赋值给a并打印出来。所以为什么后面要加上a 8;printf(“%d\n”, a);这两句话是为了让大家清楚break只是跳出了循环体不执行后面的循环了不是跳出结束了整个程序。2continue表示跳过本次循环continue后面的代码执行下一次循环。例intmain(){inti0;inta0;for(i1;i4;i){if(i3){continue;}printf(%d\n,i);}a8;printf(%d\n,a);return0;}我将上面的代码做了一个修改即将break语句置换成了continue这个时候所得到的效果就不一样了。这便是打印出来的效果大家可以看到他只是跳过了3这次循环后面的循环依旧执行。那么他具体怎么实现的1第一轮当i1时判断i是否小于等于41是小于4 的执行循环体while大括号里面的内容由于1不等于3即不满足if条件语句中的表达式所以不会执行if语句大括号里面的内容直接执行打印i1之后执行i此时i2。2第二轮当i2时判断i是否小于等于42是小于4 的执行循环体while大括号里面的内容由于2不等于3即不满足if条件语句中的表达式所以不会执行if语句大括号里面的内容直接执行打印i2之后执行i此时i3。3第三轮当i3时判断i是否小于等于43是小于4 的执行循环体while大括号里面的内容由于3等于3即满足if条件语句中的表达式所以执行if语句大括号里面的内容continue语句此时直接跳出本次循环不再执行continue语句后面的打印语句所以3便没有打印出来。之后执行i此时i4。4第四轮当i4时判断i是否小于等于44是等于4 的执行循环体while大括号里面的内容由于3等于3即满足if条件语句中的表达式所以执行if语句大括号里面的内容continue语句即不满足if条件语句中的表达式所以不会执行if语句大括号里面的内容直接执行打印i4之后执行i此时i5。5就不满足循环要求了所以直接结束循环了。这里有一个可以给大家拿去思考的程序本人感觉挺有意思的放上来让大家看看intmain(){inti1;while(i10){if(i5){continue;}printf(%d ,i);i;}}大家可以想象看这个程序的输出是什么呢以上是循环的内容但不是所有因为循环还有goto语句本人对该循环不是特别清楚待本人学习清楚了再给大家描述。同样的写的不好请各位担待本人一定虚心接受指正争取更上一层六。