程序设计中常用思维方法(循环).ppt_第1页
程序设计中常用思维方法(循环).ppt_第2页
程序设计中常用思维方法(循环).ppt_第3页
程序设计中常用思维方法(循环).ppt_第4页
程序设计中常用思维方法(循环).ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Monday, May 13, 2019,扬州大学信息学院,迭代、归纳与循环 思维,Monday, May 13, 2019,扬州大学信息学院,分析: 解决该问题的N-S图如右:,例1:用牛顿迭代法求x的平方根。牛顿迭代公式为:,迭代变量 S1,s2,Monday, May 13, 2019,扬州大学信息学院,#include #include main() float x,s1=1;s2,err; scanf(“%f”, ,(1)err=s2-s1;,(2)s1=s2,(3)s2=0.5*(s1+x/s1),Monday, May 13, 2019,扬州大学信息学院,例2:统计输入的行数、单词的个数(设单词是一个不包含任何空白字符的字符序列)以及输入的总的字符个数。,分析: (1)要表示输入的行数、单词的个数和输入的总字符数,可设以下三个变量nl、nw、nc,初值均为0; (2)对于nl,每输入一个n增1,对于nc,每输入一个字符,增1,而对于nw,只有当输入的字符为非空白字符、非回车且前一个字符为空或回车时才增1; (3)设计变量inword,当其值0时,表示当前字符的前一字符为空白或回车,当其值为1时,表示当前字符的前一字符非空或回车,此当前字符仍为该单词中的内容; (4)inword的初始值为0; (5)故nw增1的条件是:当前字符非空白或回车且inword=0;,Monday, May 13, 2019,扬州大学信息学院,#define YES 1; #define NO 0; #include main() int c, nl, nw, nc, inword; inword=NO; nl=nw=nc=0; while (c=getchar()!=#) + nc; if (c=n) +nl; if (c= = |c= =n | c= =t) inword=NO; else if (inword= =NO) inword=YES; +nw; printf(“nl=%d nw=%d nc=%dn”,nl,nw,nc); ,Monday, May 13, 2019,扬州大学信息学院,归纳法与循环,(1)归纳法,是从大量的特殊性中总结出规律性或一般性的结论。 (2)归纳,在程序设计上主要表现为递归和迭代。我们常常用递归和迭代的方式把一个复杂的计算过程化为简单过程的多次重复,这种重复很容易用循环来实现; (3)归纳法的另一重要用途是用于数列和级数求和;,Monday, May 13, 2019,扬州大学信息学院,例3:猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,发现只剩下一个桃子了。求第一天共摘多少个桃子。,Monday, May 13, 2019,扬州大学信息学院,Sn=(Sn+1+1)*2 程序如下: main() int s, i; s=1; for (i=1;i=9;i+) ?; printf(“s=%dn”,s); ,Monday, May 13, 2019,扬州大学信息学院,例4:有一张足够大的纸,厚0.09毫米,问将它对折多少次后可以达到珠穆朗玛峰的高度(8848米)?,Monday, May 13, 2019,扬州大学信息学院,分析: (1)采用归纳法; (2)设a为高度,初值为910 -5米; (3)对折后,高度为前一次高度的2倍,每次乘2后判断乘积是否已超过8848米。若已超过,则记下乘2的次数就是对折的次数; (4)请读者自己编程;,Monday, May 13, 2019,扬州大学信息学院,*枚举法: 就是逐一列举出可能解的各个元素,并加以判断,直到求得所需要的解。 常用在排列、组合、数据分类、信息检索、多解方程的求解上;,枚举法与循环 思维,Monday, May 13, 2019,扬州大学信息学院,使用枚举法,必须掌握两条原则: 确定搜索的范围(这个范围必须是有限的); 选择枚举的策略(按照一条什么样的路径来逐一枚举); 这两条原则使用得好坏,对程序的工作量有巨大的影响。,Monday, May 13, 2019,扬州大学信息学院,例5:对于-5x11;-10y9;-6z18,求方程:x3+y3+z3=3的全部整数解。,Monday, May 13, 2019,扬州大学信息学院,程序如下: #include main() int x, y, z; for(x= -5; x12; x+) for(y=-10; y10; y+) for(z=-6; z19; z+) if (?) printf(“%5d,%5d,%5dn”,x,y,z); ,x*x*x+y*y*y+z*z*z= =3,Monday, May 13, 2019,扬州大学信息学院,例6:百钱百鸡问题。用100元钱买100只鸡,每只公鸡5元,每只母鸡3元,每3只小鸡1元,要求每种鸡至少买一只,且必须是整只的,问各种鸡各买多少只?,Monday, May 13, 2019,扬州大学信息学院,分析: (1)这是一个组合问题,归根到底是求三元一次方程的一组解; (2)设 i,j,k分别表示公鸡、母鸡和小鸡的只数。为了确定i,j,k的取值范围,可以有不同方法。不同的方法,程序的计算量相差甚远; (3)方法一:i :1 20;j:1 33;k:1100; (4)方法二:i :1 18;j:1 31;k:100ij; (5)方法三:由i +j+k=100及5i +3j+k/3=100得14i+8j=200,由此可得: i :1 13;j:1 23;k=100ij; (6)方法四:由方法三中的14i+8j=200得7i+4j=100可得: i :1 13;j=(100 7 i)/4;k=100ij;,Monday, May 13, 2019,扬州大学信息学院,main() int i,j,k; for(i=1;i=20;i+) for(j=1;j=33;j+) k:=100-i-j; if(?) printf(“k=%d,j+%d,i=%dn”,k,j,i); ,i*5+j*3+k/3=100,Monday, May 13, 2019,扬州大学信息学院,例7:求整数a和b的最小公倍数。,Monday, May 13, 2019,扬州大学信息学院,分析: (1)如果 i 是a 和b的最小公倍数,则 i 必能被 a 和 b 整除,同时 i 必须是自然数,所以其取值范围是; (2)方法一:i 从1开始,依次增加,直到第一个能被a和b整除为止,这个 i 就是a和b的最小公倍数; (3)方法二:令从i 从a开始,并使 i 每次增加a而不是增加1,这就保证了 i 总是a的倍数。故每次只要判断 i 能否被b整除就可以了。一旦判断成立,i 就是a和b的最小公倍数;,Monday, May 13, 2019,扬州大学信息学院,程序一: #include main( ) int a,b, i; scanf(“%d%d”, ,Monday, May 13, 2019,扬州大学信息学院,程序二: #include main( ) int a,b, i; scanf(“%d%d”, ,Monday, May 13, 2019,扬州大学信息学院,例8:用循环语句打印下列图案: * * * * * *,Monday, May 13, 2019,扬州大学信息学院,程序如下: main( ) int i , j; for (i=1; i=6; i+) for (j=1; j=20-i ; j+) printf(“ ”); for (j=1; j=2*i-1;j+) printf(“*”); printf(“n”); ,Monday, May 13, 2019,扬州大学信息学院,例:用循环语句打印下列图案: * * * * * * *,Monday, May 13, 2019,扬州大学信息学院,分析: (1)将该图案分成上下两部分处理; (2)定行、定行中的字符个数、定每行打印的起始位置。,Monday, May 13, 2019,扬州大学信息学院,几种循环的比较,P.114 自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论