循环语句
我们日复一日都要完成的事情!
1
三种循环语句
while
for
do while
还记得一开始我们说的循环代码 ,码3万行有效代码,你就能成为大牛,这便是循环。
while语句
if语句:当条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。但是我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢? C语言中给我们引入了:while语句,可以实现循环。
语法结构
while(判断表达式) { //循环体 }
和if语句一样,当表达式结果为0循环结束,表达式结果非0循环继续。
这是while语句的最简单用法!
让我们学习一下高级一点的语法!
从执行流程图中可以看出,while语句还能与break,continue关键字一起使用!
我们来看两个代码看看它们有什么不同点。
break:直接跳出while循环
continue:不执行这次循环continue后面的代码,重新进入下一下while循环。
因为执行完continue后就重新回到了
while判断,没有进行i++;而后if(i==100)一直判断为真,一种执行continue语句,循环往复。i一直不变。
break和continue在while循环中的作用总结:
break:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。
continue:用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
for语句
我们可能会很疑惑,都已经学了while循环语句为啥还要学习for语句,难到道for循环有什么过人之处!我们先来看同样是一个程序while和for循环有什么不同!
实现一个1~100相加的程序
//while循环 int i=1,sum=0; // 初始化 while(i<=100) //判断 { sum=i+sum; i++; //调整 } //for循环 int i=0,sum=0; for(i=0;i<=100;i++) //初始化,判断,调整 { sum=sum+i; }
从上面代码可以看出while循环的控制循环的3个部分比较分散,如果循环体语句过长,调整部分i++就有可能找不到,看一个循环也比较难读。
而for语句就很好的解决了这个问题,循环的三个控制部分都包含在for()增强了代码的可读性,循环一目了然。
for语句语法
for(exp1;exp2;exp3) { //循环体 // 当循环体中只有一条循环语句时{}可以省略 }
exp1表达式1为初始化部分,用于初始化循环变量的。
exp2表达式2为条件判断部分,用于判断循环时候终止。
exp3表达式3为调整部分,用于循环条件的调整。
for循环的执行流程图
看了流程图你大致了解了for循环的执行过程
第一次进入for循环先执行exp1表达式1,然后条件判断exp2表达式2,为真进入循环,为假,退出循环;为真,执行循环语句,而后回到循环头部,先执行exp3调整部分,再进行exp2的判断部分,为真继续循环,为假退出循环,如此循环往复,直到exp2判断为假。
for循环和break,continue搭配使用
和while循环一样也能和break,continue搭配使用
和while循环中的break得到的结果一样,因为break永久终止循环。
而continue在for循环中并没有造成是死循环,因为continue会退出本层循环回到循环头部,不执行后面continue后面代码,但是for循环的调整部分都在循环头部,不同于while在循环体内,可能会在continue后面而跳过执行!
for循环的注意事项
第一次,进循环,执行exp1初始化,便不会执行exp1,而exp3调整部分是每次循环结束一次后回到if头部先执行,再判断
for(exp1;exp2;exp3)表达式1,2,3都可以省略,但省略了exp2条件判断表达式会造成死循环。
表达式之间用;隔开,一个表达式可以有多个小的语句,小语句之间用,隔开,比如for(i=0,j=0;i<100;i++,j++)
for循环变种
变种1
省略表达式exp2造成死循环
变种2
for语句的循环控制变量一些建议:
不可在for 循环体内修改循环变量,防止 for 循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i=0; for(i=0;i<10;i++) //前闭后开 for(i=0;i<=9;i++) //前闭后闭
来个笔试题测试一下
int i=0,k=0; for(i=0,k=0;i++) { printf("hehe"); }
判断上面代码打印hehe的循环次数。
答案:循环一次也不执行!
对了嘛?是不是很坑,判断表达式k=0赋值为0,我们一直强调表达式为0,判断为假,退出循环
do while语句
语法结构
do
{
循环语句
}while(表达式);
可以看到do while语句,不同于for while语句先判断,再执行循环语句,可能循环一次也不进行;而do while先do进行一次循环,再判断表达式。
和while语句大致相同。
和break,continue搭配使用
和while一样的结果
do while注意事项
当循环必须执行一次时使用,一般用的比较少。
while()后面要有;分号。
goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
for(...) { for(...) { for(...) { if(disaster) goto error; } } } error: // 处理错误情况
注意:
goto语句的标识符自定义,标识符后接:即可跳转到指定位置
goto语句虽然可以跳转到指定位置但无法跳转到自定义函数内
虽然goto语句在特殊情况下有奇效,但是基本都能有其他循环语句代替,所以尽量避免使用。