上篇文章C语言分支与循环(上)介绍了可以实现分支结构的语句if…else、switch和关系操作符">、>=、<、<=、==、!=“,还有逻辑操作符”&&、||、!"本篇文章将介绍可以实现循环结构的语句while、for、do-while、goto。
1、while与do-while
1.1、while
while 循环首先检查循环条件,只有当条件为真时才执行循环体。因此,如果条件一开始就为假,那么循环体将永远不会执行。而如果条件一直为真,那么循环将一直执行下去。打印1~10的数,如下:
int main(){
int i = 1;
while (i <= 10) //while(条件表达式),此时表示要循环10次。
{
printf("%d ", i); //打印每一次循环时i的值为多少。
i = i + 1; //第一次循环时i=1,此时i=2,那么即将重新回到while循环第二次,以此类推。
}
return 0;
}
1.2、do-while
do while 循环与 while 循环的主要区别在于它们执行循环体的顺序。do while 循环首先执行循环体,然后检查循环条件。因此,即使条件一开始就为假,循环体也会至少执行一次。打印1~10的数,如下:
int main(){
int i = 1;
do //第一次先执行完do循环体的语句再执行while语句。
{
printf("%d ", i);
i = i + 1;
} while (i <= 10); //do循环体的语句执行完毕开始执行while语句。
return 0;
}
1.3、while与do-while的区别
while和do-while的区别就在于前者是先执行while的条件表达式判断真假后是否执行循环体,而do-while无论真假,循环体也就是do里面的语句都会先执行,然后再开始进入while条件表达式判断真假后是否执行循环体。
2、for
2.1、for的语法形式
for ( init; condition; increment )
{
statement(s);
}
- init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
2.2、for的实践
打印1~10的数,如下:
#include <stdio.h>
int main()
{
int i = 0;
//执行i=1,满足i<=10,执行循环体,最后i++,以此类推
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
其中for在循环中是用的最多的语句,do-while是最少用的。从以上部分我们可以看到for其实就是while优化后的版本,如果代码较多的时候使用while就会显得代码分散,而for就比较集中更易于代码维护。
3、goto
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建
议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出
使⽤ goto 就⾮常的⽅便了。
for (...)
{
for (...)
{
for (...)
{
if (disaster)
goto error;
}
}
}
error:
//...
本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。