C程序设计 - - 循环结构程序设计

2019-03-04 14:17

第6章 循环结构程序设计

许多问题的求解归结为重复执行的操作,例如输入多个同学的成绩、对象遍历、迭代求根等问题。这种重复执行的操作在程序设计语言中用循环控制来实现。几乎所有实用程序都包含循环。特别是在现代多媒体处理程序(图像、声音、通讯)中,循环更是必不可少。

根据开始循环的初始条件和结束循环的条件不同,C语言中用如下语句实现循环 (1) while语句。 (2) do-while语句。 (3) for语句。

(4) 用goto语句和if语句构成循环。

循环结构在程序设计中十分重要。所谓循环结构就是当给定条件成立时,反复执行某段程序,直到条件不成立时为止。给定的条件称为循环条件,反复执行的程序段称为循环体。

6.1 while语句

while语句最简单的情况为循环体只有一个语句,其形式如下: while(表达式) 语句;

但是,while语句通常使用更复杂的形式,也就是其一般形式: while(表达式) {

语句序列; }

其中表达式是循环条件,语句序列为循环体。其执行过程是:先计算while后面圆括号内表达式的

假(0)值,如果其值为真(非0),则执行语句序列(循环表达式体),然后再计算while后面圆括号内表达式的值,

真(非0)并重复上述过程,直到表达式的值为“假”(值为0)时,退出循环,并转入下一语句去执行。 循环体While循环的执行流程如图6-1所示。

使用while语句时,需注意如下几个问题: (1) while语句的特点是先判断表达式的值,然

图 6-1 while循环流程图后根据表达式的值决定是否执行循环体中的语句,因

此,如果表达式的值一开始就为“假“,则循环体将一次也不执行。

(2)当循环体由多各语句组成时,必须用左、右花括号括起来,使其形成复合语句。如: while(x>0) {

s+=x x--; }

1

(3)为了使循环最终能够结束,而不至于使循环体语句无穷执行,即产生“死循环”。因此,每执行一次循环体,条件表达式的值都应该有所变化,这既可以在表达式本身中实现,也可以在循环体中实现。

【例6-1】利用while语句,编写程序,求1+2+3+?+100的值。

这是一个求100个数的累加和问题,加数从1变化到100,可以看到加数是有规律变化的。后一个加数比前一个加数增1,第一个加数为1,最后一个加数为100;因此可以在循环中使用一个整型变量i,每循环一次使i增1,一直循环到i的值超过100,用这个办法就解决了所需的加数问题;但是要特别注意的是变量i需要有一个正确的初值,在这里它的初值应当设定为0。

下一个要解决的是求累加和。设用一个变量sum来存放这100个数和的值,可以先求0+1的和并将其放在sum中,然后把sum中的数加上2再存放在sum中,依次类推,这和人们心算的过程没有什么区别,sum代表着人们脑中累加的那个和数,不同的是心算的过程由人们自己控制。在这里,sum累加的过程要放在循环中,由计算机来判断所加的数是否已经超过100,加数则放在变量i中,并在循环过程中一次次增加1。整个流程如图6-2所示。

图6-2累加求和流程图

以下就是求累加和的典型算法。

main() {

int i=1, sum=0; /*i的初值为1,sum的初值为0*/ while(i<=100) /*当i小于或等于100时执行循环体*/ {

sum=sum+i; /*在循环体中累加一次,i增加1*/ i=i+1; /*在循环体中i增加1*/ }

printf(\}

程序运行后的输出结果: sum=5050 注意:

(1) 如果在第一次进入循环时,while后圆括号内表达式的值为0,循环一次也不执行。在本程序中,如果i的初值大于100将使表达式i<=100的值为0,循环体不执行。

(2) 在循环体中一定要有使循环趋向结束的操作,以上循环体内的语句i=i+1使i不断增加1,当i>100时循环结束。如果没有这一语句,则i的值始终不变,循环将无限进行。 (3) 在循环体中,语句的先后位置必须符合逻辑,否则将会影响运算结果,例如,若将上例中的While循环体改写成:

while(i<=100)

{ i++; /*先计算i++,后计算sum的值*/

2

sum=sum+i; }

运行后,将输出:

sum=5150

运行的过程中,少加了第一项的值1,而多加了最后一项的值101。

【例6-2】利用while语句,计算1+1/2+1/4+?+1/50的值,并显示出来。 #include“stdio.h” main() { float sum=1; int i=2; while (i<=50) {

sum +=1/(float) i; i+=2; } printf(\}

运行结果: sum=2.907979

注意:在此程序中,在循环体中进行累加计算时,必须要对变量i进行强制类型转换,即利用(float)i使其变为浮点型中间变量后再参加运算,否则,由于i中存放的是大于1的整型量,所以,1/i将按整型规则运算,其结果总是为0。

6.2 do-while循环语句

do-while循环结构的形式如下: do

语句序列(循环体); while(表达式); 例如: do {

i++; s+=i;

}

while(i<10); 说明:

(1) do是C语言的关键字,必须与While联合使用。

(2) do-while循环由do开始,用while结束。必须注意的是:在while(表达式)后的“;”不可丢,它表示do-while语句的结束。

(3) while后一对圆括号中的表达式,可以是C语言中任意合法的表达式。由它控制循环是否执行。

(4) 按语法,在do和while之间的循环体只能是一条可执行语句。若循环体内需要多

3

个语句,应该用大括号括起来,组成复合语句。

do-while 循环的执行过程是这样的(如图6-3所示): (1) 执行do后面循环体中的语句。

(2) 计算While后面一对圆括号中表达式的值。当值为非零时,转去执行步骤1;当值为零时,执行步骤(3)。 循环体(3) 退出do-while循环。

真(非0)由do-while构成的循环与while循环十分相似,

表达式它们之间的主要区别是: while循环结构的判断控制

假(0)出现在循环体之前,只有当 while后面表达式的值为

非零时,才能执行循环体;在do-while构成的循环结图 6-3 do-while循环流程图构中,总是先执行一次循环体,然后再求表达式的值,

因此,无论表达式的值是零还是非零,循环体至少要被执行一次。

和while循环一样,在do-while循环体中,一定要有能使while后表达式的值变为0的操作,否则,循环将会无限制的进行下去。

i=1【例6-3】利用do-while语句,

i=1编写程序,求1+2+3+?+100的值。

sum=sum+1sum=sum+1根据do-while循环的结构,先i=i+1i=i+1画出流程图,见图6-4((a)是传统

直到i>100真(非0)流程图,(b)是N-S图)。程序如下:

i<=100#include\

假(0)main ()

(a)(b){

图 6-4 用do-while循环实现累加 int i=1,sum=0; do { sum=sum+i; i=i+1; }while(i<=100); printf(\}

程序运行后的输出结果: sum=5050

使用do-while语句应注意如下几个问题: (1) 由于do-while语句是先执行一次循环体,然后再判断表达式的值。所以,无论一开始表达式的值为“真”还是为“假”,循环体中的语句都至少被执行一次,这一点同while语句是有区别的。 (2) 如果do-while语句的循环体部分是由多个语句组成的话,则必须用左、右花括号括起来,使其形成复合语句。 (3) C语言中的do-while语句是在表达式的值为真时重复执行循环体,这一点与别的语言中类似语句有区别,在程序设计时应引起注意。

【例6-4】 利用do-while语句计算1+1/2+1/4+…+1/50的值,并显示出来。 main() {

4

int i=2; float sum=1; do { sum+=1/(float)i; i+=2;

}while(i<=50);

printf(\}

运行结果: sum=2.907979

在一般情况下,用while语句和do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。如例6-1和例6-3中的循环体是相同的,得到的结果也相同。但在while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。

【例6-5】while和do-while循环的比较

main() main() { {

int sum=0,i; int sum=0,i; scanf(\ while(i<=10) do { { sum=sum+i; sum=sum+i; i++; i++;

} }while(i<=10);

printf(\} }

本例左半部分用while循环求i到10的连加和,i的值由用户输入。右半部分用do-while循环实现相同的功能。当输入i的值小于或等于10时,二者得到的结果相同。例如,当输入的i=1时,用while结构和do-while结构得到的结果是都是55;而当输入的i的值大于10时,二者得到的结果就不同了。例如,当输入的i=15时,用while结构得到的结果是0;而用do-while结构得到的结果是15。这是因为此时对while循环来说,一次也不执行循环体,而对do-while循环来说,则要执行一次循环体。由此可以得到结论:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,两者结果不同(指两者具有相同循环体的情况)。

6.3 for语句

for语句构成的循环通常称为for循环。for循环的一般形式如下:

for(表达式1;表达式2;表达式3) 循环体; 例如:

for(k=0;k<10;k++) printf(“*”);

以上for循环在一行上打印10个“*”号。

for是C语言的关键字,其后的圆括号中通常含有3个表达式,各表达式之间用“;”隔开。这三个表达式可以是任意表达式,通常主要用于for循环的控制。紧跟在for(…)之

5


C程序设计 - - 循环结构程序设计.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:单片机学习习题答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: