目录
C语言中的while循环,for循环,do while循环
循环的意义
在某些时候,我们需要多次执行同一块代码或者重复度很高的代码,但显然我们一个一个去敲的话,太浪费时间和精力。这时,我们就需要循环。
循环的类型
在C语言中,有三种基本循环类型,如下:
- while循环:当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
- for循环:多次执行一个语句序列,简化管理循环变量的代码。
- do…while循环:在循环主体结尾测试条件是否为真,其他与 while 语句类似。
我们还可以用这三种基本的循环进行嵌套,得到嵌套循环。
循环控制语句
有了循环,我们就需要去控制循环,循环控制语句能够改变循环里面代码的执行顺序,帮助我们实现代码的跳转。
- break语句:终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。
- continue语句:告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
- goto语句:无条件转移语句,将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。
使用循环
在对循环的知识有了基本的认知后,我们深入了解一下他们。
while循环
只要条件为真,while循环会一直执行,只能在循环主体中更新循环控制变量
语法如下:
while(condition)
{
//代码语句
}
流程图如下:
通过流程图我们可以看到,如果刚开始条件就为false,会直接跳过循环,直接执行while循环后面的语句。
while死循环
#include <stdio.h>
int main()
{
int x=1;
while(x<18)
{
printf("x的值为:%d\n",x);
x--;
}
}
for循环
语法如下
for ( init; condition; increment )
{
statement(s);
}
for循环执行过程
1、首先执行init语句,即先初始化最初的条件,(但如果前面已经写好初始条件,这里也可以略过不写),这里只在进入循环的时候执行一次,之后不会再执行;执行2
2、判断condition是否为真,为真,接着执行3,否则跳出循环;
3、执行循环主体,执行完后执行条件改变语句(increment),更新循环控制变量(这里也可以略过不写,而是在循环主体里面更新循环控制变量,就像while循环;或者不更新,变成死循环);然后再去执行2
for死循环
#include <stdio.h>
int main ()
{
/*没有更新循环控制变量,条件永远为真,是死循环*/
for( int a = 10; a < 20;)
{
printf("a 的值: %d\n", a);
}
return 0;
}
for循环流程图如下
与while循环一样,如果在刚开始循环条件就不为真,也会跳过循环,直接执行后面的语句
do…while循环
与for循环和while循环不同,这两者在循环头部判断循环条件,而do…while循环是在循环的尾部判断条件;这也导致for循环和while循环可能一次都不会执行循环主体,但do…while循环至少执行一次。
语法如下
do
{
statement(s);
}while( condition );
条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止。
流程图如下
do…while死循环
#include <stdio.h>
int main ()
{
/* 定义循环控制变量 */
int a = 10;
/* do 循环执行,在条件被测试之前至少执行一次 */
do
{
printf("a 的值: %d\n", a);
a = a + 1;//更新循环控制变量
//但无论怎么更新,条件始终为真
}while( a > 0 );
return 0;
}
for循环,while循环和do…while循环构成嵌套循环的实例
#include <stdio.h>
int main()
{
int x=1;
while(x<=2)
{
printf("第%d次while循环\n",x);
for(int y=1;y<=2;y++)//嵌套循环
{
printf("第%d次while循环中的第%d次for循环\n",x,y);
int z=1;
do//再次嵌套
{
printf("第%d次while循环中的第%dfor循环的第%d次do...while循环\n",x,y,z);
z++;//更新do...while循环的循环控制变量
} while (z<=2);
}
x++;//更新while循环的循环控制变量
}
}
运行结果如下
第1次while循环
第1次while循环中的第1次for循环
第1次while循环中的第1for循环的第1次do...while循环
第1次while循环中的第1for循环的第2次do...while循环
第1次while循环中的第2次for循环
第1次while循环中的第2for循环的第1次do...while循环
第1次while循环中的第2for循环的第2次do...while循环
第2次while循环
第2次while循环中的第1次for循环
第2次while循环中的第1for循环的第1次do...while循环
第2次while循环中的第1for循环的第2次do...while循环
第2次while循环中的第2次for循环
第2次while循环中的第2for循环的第1次do...while循环
第2次while循环中的第2for循环的第2次do...while循环
如果我们在里面加入循环控制语句break和continue,如下
#include <stdio.h>
int main()
{
int x=1;
while(x<=2)
{
printf("第%d次while循环\n",x);
for(int y=1;y<=2;y++)//嵌套循环
{
if(y==1)
{
continue;//跳过此次循环,直接执行下次循环
}
printf("第%d次while循环中的第%d次for循环\n",x,y);
int z=1;
do//再次嵌套
{
if(z==1)
{
printf("进入了do...while循环\n");
break;//跳出当前循环
}
printf("第%d次while循环中的第%dfor循环的第%d次do...while循环\n",x,y,z);
z++;//更新do...while循环的循环控制变量
} while (z<=2);
}
x++;//更新while循环的循环控制变量
}
}
结果如下,我们可以看到,continue语句使程序不再执行第一次for循环主体,而是直接执行下次for循环。而在每次while循环的第2次for循环里面,虽然每次都进入了do…while循环,但是break语句使得直接终止do…while循环,不再执行后面的语句。
第1次while循环
第1次while循环中的第2次for循环
进入了do...while循环
第2次while循环
第2次while循环中的第2次for循环
进入了do...while循环