目录
前言:C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合,下文将讲述C语言中循环结构相关语句语法。
一、while循环语句
1.while语句语法
当表达式判定结果为真(非零)则执行语句,执行完语句后再判断表达式是否为真,若为真则再次循环语句,若为假(零)则不执行语句结束循环。
2.while语句的执行流程
3.while循环的简单例子
例子:使用while循环打印0~10
#include<stdio.h>
int main()
{
int i = 0;
while (i<=10)//当i<=10时进入循环
{
printf("%d ", i);
i++;//每次循环i自增1
}
return 0;
}
运行结果:
二、for循环语句
1.for语句语法
一个for循环有三个表达式,那么三个表达式都是用来进行循环条件判断的吗?不是!
表达式1:
用于循环变量的初始化,那什么是循环变量呢?类似于上文在进行while循环之前,先定义整形变量int并赋初值,这个i就称为循环变量。
表达式2:
用于循环结束的判断,这里就和while循环的表达式的意义一致。
表达式3:
用于循环变量的调整,那什么是循环变量的调整呢?顾名思义,就是表达式3可以使循环变量的值发生改变,并逐渐趋近不可循环条件。
2.for循环的简单例子
例子:使用for循环打印0~10
int main()
{
int i = 0;
for (i = 0/*循环变量赋初值*/; i <= 10/*可进行循环范围*/; i++/*调整循环变量*/)
{
printf("%d ", i);
}
return 0;
}
运行结果:
3.for语句的执行流程
首先表达式1给循环变量赋初值,然后根据表达式2进行判断,若判定为真,则执行语句块,接着执行表达式3给循环变量值作调整(自增、自减),再次根据表达式2进行判断,若判断为真,则重复上述操作,若为假,结束循环。
三、while循环与for循环的对比
以打印0~10为例:
for 和 while 在实现循环的过程中都有初始化、判断条件、循环变量调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优一些。
四、do while循环语句
1.do while语句语法
do while语句语法和while循环大同小异,不同之处就在于do while循环会先执行语句再进行循环条件的判断,也就意味着do while循环一定会执行一次。
2.do while语句的执行流程
3. do while循环的简单例子
例子:使用do while循环打印0~10
#include<stdio.h>
int main()
{
int i = 0;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
运行结果:
例子:对于语句必然循环一次的证明
五、break语句与continue语句的功能解释
上文中,我们没有讲述break语句与continue语句的功能,其二可见于语句执行流程图中,其实通过流程图,我们也能大概知道其意义,现在我们来正式解释说明一番。
break意为“打破、结束”,当循环过程遇到break,那么循环就会被直接打破,此时将跳出循环(注:仅跳出一层循环),那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。
continue意为“继续”,当循环过程遇到continue,那么跳过本次循环中 continue 后边的代码,继续进行下一次循环的判断,那以后我们在循环中,想要在某种条件下不再进行continue后边的代码,立马进入下一次循环,则可以使用continue来实现。
break语句与continue语句功能举例
这里我用for循环进行演示:
例1(continue):打印0~10,不打印5
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i <= 10; i++)
{
if (i == 5)//当 i == 5 时执行continue语句跳过本次循环
continue;
printf("%d ", i);
}
return 0;
}
运行结果:
例2(break):打印0~10,打印到5不再继续打印
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i <= 10; i++)
{
if (i == 5)//当 i == 5 时执行break语句结束循环
break;
printf("%d ", i);
}
return 0;
}
运行结果:
例3(break):break只能跳出一层循环
int main()
{
int i = 0;
for (i = 1; i <= 2; i++)
{
printf("第%d次打印0~10", i);
int j = 0;
for (j = 0; j <= 10; j++)
{
if (j == 5)
break;
printf("%d ", j);
}
printf("\n");
}
return 0;
}
运行结果:
这里可以看出,每次 j == 5 条件成立,仅结束最内一层(break所在的那一层)循环,对于外层循环没有影响。
六、补充说明
1.当循环体只有一条语句时,可以不加花括号,当为多条时,需要加上花括号。
2.各个循环语句是支持嵌套的。
3.注意循环条件表达式,若其永久为真(两种情况:1.需要其无限循环;2. 循环变量调整不当导致永远无法跳出循环),循环将进入死循环。
4.goto语句跳出深处循环嵌套。
ps:循环体是程序中一种重复执行的结构,通过它可以多次执行一段代码。