博学谷——让IT教学更简单,让IT学习更有效 值为0时,整个循环过程才会结束。
while循环的执行流程如图3-18所示。
开始循环条件真执行语句假
图3-18 while循环的流程图
接下来通过while语句来实现1~4之间自然数的打印,如例3-8所示。 例3-8
1 #include
int x = 1; { }
printf(\条件成立,打印x的值 x++; // x进行自增
//定义变量x,初始值为1
结束while (x <= 4) // 循环条件
运行结果如图3-19所示。
图3-19 运行结果
例3-8中,x的初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此,打印结果中x的值分别为1、2、3、4。需要注意的是,例3-8中的第8行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。
?脚下留心:语句后的分号”;”
在编程时会经常性的在结尾加上分号,在使用while循环语句时,一定要记得勿在()后面加分号,这样就造成了循环条件与循环体的分离。如下面的代码:
while(1); {
printf(“无限循环”);
16
博学谷——让IT教学更简单,让IT学习更有效
}
像这样的代码在while()循环条件后加了分号,这就会造成无法循环的错误,而且这种小错误在排查时很难发现,读者在编写程序时要留心。
3.5.2 do-while循环语句
do…while循环语句和while循环语句功能类似,区别是while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,其具体语法格式如下:
do {
执行语句 ………
} while(循环条件);
在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如图3-20所示。
开始执行语句真循环条件假结束
图3-20 do…while循环的执行流程
接下来使用do…while循环语句将例3-8进行改写,如例3-9所示。 例3-9
1 #include
int x = 1; do {
printf(\条件成立,打印x的值 x++; // x进行自增
//定义变量x,初始值为1
} while (x <= 4); // 循环条件
运行结果如图3-21所示。
17
博学谷——让IT教学更简单,让IT学习更有效
图3-21 运行结果
例3-9和例3-8的运行结果一致,这说明do …while循环和while循环能实现同样的功能。然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。若将例中的循环条件x<=4改为x < 1,例3-9会打印x=1,而例3-8什么也不会打印。
3.5.3 for循环语句
在前面的小节中分别讲解了while循环和do…while循环。在程序开发中,还经常会使用另一种循环语句,即for循环,它通常用于循环次数已知的情况,其具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式) { }
执行语句 ………
在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。
for循环语句的流程图如图3-22所示。
开始初始化表达式循环条件假真执行语句操作表达式结束
图3-22 for循环语句流程图
因为for循环语句中表达式较多,接下来就以图3-22为主对for循环的执行逻辑进行详细讲解。 第一步,初始化表达式确定初始条件。
第二步,进入到循环条件,判断初始化的条件是否成立,如果成立,则执行{}内的语句;如果
不成立就结束。
第三步,执行完{}内的语句后,执行操作表达式,将条件改变。
第四步,改变条件后,再去执行循环条件,判断条件改变后是否成立,重复第二步。就这样依
次循环,直到条件不成立。
18
博学谷——让IT教学更简单,让IT学习更有效
例如,对自然数1~4求和,实现方式如例3-10所示。 例3-10
1 #include
int sum = 0; //定义变量sum,用于记住累加的和 for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化 { }
printf(\打印累加的和
sum += i; //实现sum与i的累加
运行结果如图3-23所示。
图3-23 运行结果
例3-10中,变量i的初始值为1,在判断条件i<=4为真的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为假,结束循环,执行for循环后面的代码,打印“sum=10”。
为了让读者能熟悉整个for循环的执行过程,现将例3-10运行期间每次循环中变量sum和i的值通过表3-1列举出来。
表3-1 sum和i循环中的值
循环次数 第一次 第二次 第三次 第四次 sum 1 3 6 10 i 1 2 3 4 3.5.4 循环的嵌套
有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套。 常用的几种嵌套语句如表3-2所示。
表3-2 常用的几种循环嵌套 常用的循环嵌套形式 while() { while() {….} } while() { do { do{…} while(); }while(); for( ; ;) { … for( ; ;) {… for( ; ;) {…} } do {… 19
博学谷——让IT教学更简单,让IT学习更有效
do{…} while(); } while(){…} … } for( ; ;) {…} … } 其中for循环中嵌套是最常见的循环嵌套,其语法格式如下所示:
for(初始化表达式; 循环条件; 操作表达式) { }
……
for(初始化表达式; 循环条件; 操作表达式) { } ……
执行语句; ……
接下来使用循环嵌套来打印出九九乘法表,如例3-11所示。 例3-11
1 #include
int i, j;
for (i = 1; i <= 9; i++) { }
for (j = 1; j <= i; j++) { }
printf(\
printf(\后面有一个空格,间隔开每一列的距离
运行结果如图3-24所示。
图3-24 运行结果
在例3-11中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用控制每一行有几列,每一行的列数逐行增加,最后输出一个直角三角形的九九乘法表。该嵌套循环的流程图如图3-25所示。
20