一、while循环
1.认识while循环
首先,while语句是循环语句,会多次执行语句
我们先看他的结构:
while(表达式) 循环体;
同样,如果表达式为真,则会执行循环体;执行完循环体后会再回到表达式中再去判断表达式是否为真,如果为假,则会跳出循环体,若真,则还会继续执行循环体。
while后面同样默认跟一条语句,若需要循环多条语句,需要加上大括号{}。
while语句循环流程
我们先不看虚线部分,如果表达式为真,执行循环体,会再次回到表达式上;如果表达式为假,则会直接跳出循环。
2.简单while循环
我们现在需要用while循环打印1-10数字
#include<stdio.h> int main() { int i=1; while(i<=10)//i满足条件进入 { printf("%d ",i);//循环体部分 i++;//循环调整部分 } return 0; }
可以将该例题与上面的流程图比对。大括号{}内为循环体,循环体一般由循环语句和调整部分组成;如果没有了调整部分,在没有终止语句的前提下,那么就是死循环
3.while循环中的continue
continue一般用于循环语句中,用于跳出本次循环,对表达式重新判断。
我们现在需要用while循环打印1-10数字,遇到5不打印
#include<stdio.h> int main() { int i=1; while(i<=10)//i满足条件进入 { if(i==5) continue;//执行continue的时候,会直接跳过后面的语句 printf("%d ",i);//循环体部分 i++;//循环调整部分 } return 0; }
上面代码打印结果为1 2 3 4;为什么呢?因为当i==5的时候,会执行continue语句,那么就会直接跳过后面的循环体,对表达式重新判断。此时i为5,没有被改变,再次进入循环体还是会执行continue,所以只会打印1 2 3 4,后面便死循环了。
我们重新纠正一下代码
#include<stdio.h> int main() { int i=0; while(i<10)//i满足条件进入 { i++;//循环调整部分写在前面 if(i==5) continue; printf("%d ",i);//循环体部分 } return 0; }
打印结果为:1 2 3 4 6 7 8 9 10。这里是先对循环部分进行调整,即使跳过了某次循环,也不会导致死循环。
4.while循环中的break
在循环中,只要遇到break就直接跳出循环,在while中也是同理。
我们用上面的例子
#include<stdio.h> int main() { int i=1; while(i<=10)//i满足条件进入 { if(i==5) break; printf("%d ",i);//循环体部分 i++;//循环调整部分 } return 0; }
这里代码运行的结果依然是1 2 3 4,但是这里不会死循环,因为当执行break的时候,已经是跳出while循环了
二、for循环
1.认识for循环
语法结构:
for(表达式1;表达式2;表达式3) 循环体;
表达式1为初始化语句,表达式2用来判断循环是否进行,表达式3用来调整循环;三个表达式之间必须要用分号(;)隔开
for循环流程图:
2.简单for循环
用for循环在屏幕上面打印数字1-10
#include<stdio.h> int main() { int i=0; for(i=1;i<=10;i++)//初始化、判断、调整部分都在同一个括号里面 { printf("%d ",i);//循环体 } return 0; }
执行顺序:1.初始化 i=1(只执行一次) 2.判断 i<=10 3.执行循环语句 printf("%d ",i) 4.调整 i++ 5.判断 i<=10 ............
3.for循环中的continue
continue:同while循环一样,执行到continue语句,直接跳过后面内容,执行判断部分,但是与while循环中的continue还是由=有区别的
直接看上面的例子
#include<stdio.h> int main() { int i=0; for(i=1;i<=10;i++)//初始化、判断、调整部分都在同一个括号里面 { if(i==5)//当1==5的时候,跳过本次循环 continue; printf("%d ",i);//循环体 } return 0; }
这里的输出结果为1 2 3 4 6 7 8 9 10;这里遇到continue只会跳过循环语句,还是可以对循环进行调整,使其继续往下执行
4.for循环中的break
break在while循环和for循环中的作用一样,只要执行就会直接跳出该循环。
#include<stdio.h> int main() { int i=0; for(i=1;i<=10;i++)//初始化、判断、调整部分都在同一个括号里面 { if(i==5)//当1==5的时候,跳出循环 break; printf("%d ",i);//循环体 } return 0; }
程序的运行结果为1 2 3 4
5.for循环的变种
第一种:在循环内定义变量(不建议)
#include<stdio.h> int main() { for (int i = 1; i < 5; i++)//直接在循环内定义变量,为局部变量,出了循环便不再存在 { printf("%d ",i); } return 0; }
第二种:省略三个表达式(最好2不要省略,容易出问题)
#include<stdio.h> int main() { for (;;)//表达式可以省,但是分号不能省 { printf("加强嫦娥");//因为少了判断部分,默认为真,则会死循环 } return 0; }
注意:嵌套使用省略初始化部分会有问题
正常代码:
不正常代码:
原因:因为没有初始化j的值,j的值只会加不会减,当i=1在进入循环的时候j的值还是3
第三种:多个变量控制表达式
#include<stdio.h> int main() { int i = 0; int j = 0; for (i=0,j=0;i<3&&j<3;i++,++j)//可以多个变量,但是要满足一个表达式 { printf("加强嫦娥\n"); } return 0; }
6.注意事项
不要在for循环的循环体内改变循环变量,会使其循环失效
第一种情况:直接赋值
第二种情况:相等写成赋值
三、do...while循环
1.认识do...while循环
语法结构:
do 循环语句;//循环语句可包括执行语句和调整部分 while(表达式);
执行的流程图:
由此可见,do...while循环至少会执行一次循环语句,其他的跟while语句一样;场景较少, 所以用的比较少
2.简单例子
在屏幕上面打印数字1-10
#include<stdio.h> int main() { int i = 1; do { printf("%d ",i);//先执行语句 i++;//循环调整部分 } while (i<=10);//再进行条件判断 return 0; }
3.continue在do语句的作用
同while语句中的continue一样,会跳过本次后面的代码,直接进行下一次判断
#include<stdio.h> int main() { int i = 1; do { if (i == 5) continue;//当执行到continue的时候,只会打印1 2 3 4,然后死循环 printf("%d ",i); i++; } while (i<=10); return 0; }
4.break在do语句的作用
作用同while、for语句一样,只要执行到就会直接终止该循环
#include<stdio.h> int main() { int i = 1; do { if (i == 5) break;//当执行到的时候直接跳出循环,所以打印结果为1 2 3 4 printf("%d ",i); i++; } while (i<=10); return 0; }
四、goto转向语句
1.定义
goto语句一般和标记跳转的标号结合
2.作用
一般用于跳出多层循环,也可以达成一种循环的效果
3.举例
记号2后面需要用冒号,不能用分号。
4.作用范围
只能在同一个函数内使用,跨函数无法使用。可以往前跳,也可以往后跳
五、总结
1.循环的选择
当循环次数不确定的时候选择while循环,循环次数确定时选择for循环
2.continue与break
while循环中不适合使用continue;for循环中continue比较适合
break在三种循环结构中都是一样的作用,都合适
3.while与do...while
do...while循环是至少会执行一次程序,while循环可能一次都不会执行。
其他情况两种循环的特点相同。