资源描述:
《程序设计中常用思维方法(循环).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、迭代、归纳与循环思维7/22/2021扬州大学信息学院TF输入x,初始化s1x<0s2=0.5*(s1+x/s1)e=s2-s1输出出错信息
2、e
3、>=1.0e-6s1=s2s2=0.5*(s1+x/s1)e=s2-s1输出s2分析:解决该问题的N-S图如右:例1:用牛顿迭代法求x的平方根。牛顿迭代公式为:迭代变量S1,s27/22/2021扬州大学信息学院#include#includemain(){floatx,s1=1;s2,err;scanf(“%f”,&x);if(x<0)printf(“xisanegative”);else
4、{s2=0.5*(s1+x/s1);——(1)——;while(fabs(err)>=1.0e-6){——(2)——;——(3)——;err=s2-s1;}printf(“sqrt(%f)=%f”,x,s2);}(1)err=s2-s1;(2)s1=s2(3)s2=0.5*(s1+x/s1)7/22/2021扬州大学信息学院例2:统计输入的行数、单词的个数(设单词是一个不包含任何空白字符的字符序列)以及输入的总的字符个数。分析:(1)要表示输入的行数、单词的个数和输入的总字符数,可设以下三个变量nl、nw、nc,初值均为0;(2)对于nl,每输入一个‘’增1,对于
5、nc,每输入一个字符,增1,而对于nw,只有当输入的字符为非空白字符、非回车且前一个字符为空或回车时才增1;(3)设计变量inword,当其值0时,表示当前字符的前一字符为空白或回车,当其值为1时,表示当前字符的前一字符非空或回车,此当前字符仍为该单词中的内容;(4)inword的初始值为0;(5)故nw增1的条件是:当前字符非空白或回车且inword=0;7/22/2021扬州大学信息学院#defineYES1;#defineNO0;#includemain(){intc,nl,nw,nc,inword;inword=NO;nl=nw=nc=0;while
6、((c=getchar())!=‘#’){++nc;if(c==‘’)++nl;if(c==‘‘
7、
8、c==‘’
9、
10、c==‘t’)inword=NO;elseif(inword==NO){inword=YES;++nw;}}printf(“nl=%dnw=%dnc=%d”,nl,nw,nc);}7/22/2021扬州大学信息学院归纳法与循环(1)归纳法,是从大量的特殊性中总结出规律性或一般性的结论。(2)归纳,在程序设计上主要表现为递归和迭代。我们常常用递归和迭代的方式把一个复杂的计算过程化为简单过程的多次重复,这种重复很容易用循环来实现;(3)归纳法的另一重要用
11、途是用于数列和级数求和;7/22/2021扬州大学信息学院例3:猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,发现只剩下一个桃子了。求第一天共摘多少个桃子。7/22/2021扬州大学信息学院Sn=(Sn+1+1)*2程序如下:main(){ints,i;s=1;for(i=1;i<=9;i++)——?——;printf(“s=%d”,s);}7/22/2021扬州大学信息学院例4:有一张足够大的纸,厚0.09毫米,问将它对折多少次后可以达到珠
12、穆朗玛峰的高度(8848米)?7/22/2021扬州大学信息学院分析:(1)采用归纳法;(2)设a为高度,初值为9×10-5米;(3)对折后,高度为前一次高度的2倍,每次乘2后判断乘积是否已超过8848米。若已超过,则记下乘2的次数就是对折的次数;(4)请读者自己编程;7/22/2021扬州大学信息学院**枚举法:就是逐一列举出可能解的各个元素,并加以判断,直到求得所需要的解。常用在排列、组合、数据分类、信息检索、多解方程的求解上;枚举法与循环思维7/22/2021扬州大学信息学院使用枚举法,必须掌握两条原则:确定搜索的范围(这个范围必须是有限的);选择枚举的策略(按照一条什
13、么样的路径来逐一枚举);这两条原则使用得好坏,对程序的工作量有巨大的影响。7/22/2021扬州大学信息学院例5:对于-5≤x≤11;-10≤y≤9;-6≤z≤18,求方程:x3+y3+z3=3的全部整数解。7/22/2021扬州大学信息学院程序如下:#includemain(){intx,y,z;for(x=-5;x<12;x++)for(y=-10;y<10;y++)for(z=-6;z<19;z++)if(——————?——————)printf(“%5d,%5d,%5d”,