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