第3章 结构化程序设计12-07 下载本文

博学谷——让IT教学更简单,让IT学习更有效 值为0时,整个循环过程才会结束。

while循环的执行流程如图3-18所示。

开始循环条件真执行语句假

图3-18 while循环的流程图

接下来通过while语句来实现1~4之间自然数的打印,如例3-8所示。 例3-8

1 #include 2 void main() 3 { 4 5 6 7 8 9 10 }

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 2 void main() 3 { 4 5 6 7 8 9 10 }

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 2 void main() 3 { 4 5 6 7 8 9 10 }

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 2 void main() 3 { 4 5 6 7 8 9 10 11 12 13 }

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