欢迎来到天天文库
浏览记录
ID:28842230
大小:218.00 KB
页数:19页
时间:2018-12-14
《第六章循环结构程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第六章循环结构程序设计许多问题的求解归结为重复执行的操作,比如数值计算中的方程迭代求根,非数值计算中的对象遍历。重复执行就是循环。重复工作是计算机特别擅长工作之一。重复执行不是简单地重复,每次重复,操作的数据(状态、条件)都可能发生变化。重复的动作是受控制的,比如满足一定条件继续做,一直做直到某个条件满足,做多少次结束。也就是说重复工作需要进行控制-循环控制。C语言提供了三种循环控制语句(不考虑goto/if构成的循环),构成了三种基本的循环结构:(1)while语句构成的循环结构(“当型循环”)(2)do-while语句构成的循环结构(“直到
2、型循环”)(3)for语句构成的循环结构(“当型循环”)6、1while语句(当型循环)while(表达式)语句;或:while(表达式){语句序列;}while语句的一般形式是:循环体循环条件其中:表达式称为“循环条件”,语句称为“循环体”。为便于初学者理解,可以读做“当条件(循环条件)成立(为真),循环执行语句(循环体)”执行过程是:1)先计算while后面的表达式的值,如果其值为“真”则执行循环体,2)在执行完循环体后,再次计算while后面的表达式的值,如果其值为“真”则继续执行循环体,如果表达式的值为假,退出此循环结构。while循环
3、的执行流程:当表达式为“真”循环体使用while语句需要注意以下几点:(1)while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。(2)当循环体为多个语句组成,必须用{}括起来,形成复合语句。(3)在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。例6-1:利用while语句,编写程序计算1+2+3+…+100。解:算法1:直接写出算式S1:result<=1+2+3+4+5+…+100很简单。但是写都写得累死了。算法2:考虑到1+2+3+…
4、+100可以改写为:(((1+2)+3)+…+100),S1:p1<=1+2S2:p2<=p1+3S3:p3<=p2+4…S99:p99<=p98+100结果在p100里。此算法也一样麻烦,要写99步,同时要使用99个变量。本算法同样不适合编程。但是可以从本算法看出一个规律。即:每一步都是两个数相加,加数总是比上一步加数增加1后参与本次加法运算,被加数总是上一步加法运算的和。可以考虑用一个变量i存放加数,一个变量p存放上一步的和。那么每一步都可以写成:p+i,然后让p+i的和存入p,即:每一步都是p<=p+i。也就是说p既代表被加数又代表和。这
5、样可以得到算法3。执行完步骤S99后,结果在p中。算法3:S0:p<=0,i<=1S1:p<=p+i,i<=i+1S2:p<=p+i,i<=i+1S3:p<=p+i,i<=i+1…S99:p<=p+i,i<=i+1从算法3表面上看与算法2差不多,同样要写99步。但是从算法3可以看出S1-S99步骤实际上是一样的,也就是说S1-S99同样的操作重复做了99次。计算机对同样的操作可以用循环完成,循环是计算机工作的强项(计算机高速度运算)。算法4就是在算法3的基础上采用循环功能的算法实现。算法4:S0:p<=0,i<=1(循环初值)S1:p<=p+i
6、,i<=i+1(循环体)S2:如果i小于或等于100,返回重新执行步骤S1及S2;否则,算法结束(循环控制)。p中的值就是1+2+…+100的值。从算法4可以看出这是一个典型的循环结构程序,流程图:i<=1,sum<=1当i≤100sum<=sum+Ii<=i+1打印summain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf(sum);}结论:编制循环程序要注意下面几个方面:(1)遇到数列求和,求积的一类问题,一般可以考虑使用循环解决。(2)注意循环初值的设置。一般对于累加器常常设置为0
7、,累乘器常常设置为1。(3)循环体中做要重复的工作,同时要保证使循环倾向于结束。循环的结束由while中的表达式(条件)控制。例6-2:利用while语句,计算机1+1/2+1/4+…+1/50.观察数列1,1/2,…,1/50。=1/1,1/2,,1/50。分子全部为1,分母除第一项外,全部是偶数。同样考虑用循环实现。其中累加器用sum表示(初值设置为第一项1,以后不累加第一项),循环控制用变量i(i:2-50)控制,数列通项:1/i。main(){floatsum=1;inti=1;while(2*i<=50){sum=sum+1.0/(2
8、*i);i+=1;}printf(sum);}main(){floatsum=1;inti=2;while(i<=50){sum=sum+1.0/i;
此文档下载收益归作者所有