基本编程技术_第1页
基本编程技术_第2页
基本编程技术_第3页
基本编程技术_第4页
基本编程技术_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、基本编程技术基本编程技术 要目要目n循环程序设计循环程序设计n简单的重复动作简单的重复动作n递推、迭代和逼近递推、迭代和逼近n浮点计算的误差累积浮点计算的误差累积n从循环的中间退出从循环的中间退出n循环中的变量循环中的变量程序设计:关注基本技术和规律程序设计:关注基本技术和规律n要完成一个程序,首先要分析问题寻找解决方案,这需要要完成一个程序,首先要分析问题寻找解决方案,这需要聪明才智和想象力,以及相关领域的知识和技术聪明才智和想象力,以及相关领域的知识和技术n要把设计变成可运行程序,既需要发挥智力,又需要有条要把设计变成可运行程序,既需要发挥智力,又需要有条有理的工作,还要非常细心。有理的工

2、作,还要非常细心。一个小错误一个小错误就可能使程序无就可能使程序无法编译或法编译或不能正确执行不能正确执行 n学习程序设计需要注意规律性的东西学习程序设计需要注意规律性的东西n三种流程模式是重要总结,需要掌握其使用方法和规律三种流程模式是重要总结,需要掌握其使用方法和规律q顺序模式最简单顺序模式最简单q选择模式:要确定判断条件以及不同情况下的动作选择模式:要确定判断条件以及不同情况下的动作q开始学习编程的难点就在实现重复执行的循环。重复执开始学习编程的难点就在实现重复执行的循环。重复执行比较复杂,牵涉问题多行比较复杂,牵涉问题多循环程序设计循环程序设计n在程序里写循环的基础是发现计算中需要循环

3、。应注意计在程序里写循环的基础是发现计算中需要循环。应注意计算中的重复性动作,通过引进循环可能统一描述和处理算中的重复性动作,通过引进循环可能统一描述和处理n常见的重复动作实例,如需要:常见的重复动作实例,如需要:q对一批类似数据做同样的加工处理对一批类似数据做同样的加工处理q累积一批可以按规律计算出的数据(累加等)累积一批可以按规律计算出的数据(累加等)q反复从一个结果算出下一结果(递推)反复从一个结果算出下一结果(递推)n有些情况可以或需要用循环处理:有些情况可以或需要用循环处理:q如果重复次数确定,可以写一些独立操作,但重复次数如果重复次数确定,可以写一些独立操作,但重复次数多时就应该考

4、虑用循环统一描述,以简化程序多时就应该考虑用循环统一描述,以简化程序q如果重复次数无法确定,就必须用循环。因为这时不知如果重复次数无法确定,就必须用循环。因为这时不知道写多少个独立的操作,无法处理道写多少个独立的操作,无法处理基本循环技术基本循环技术n例:求例:求13到到315的所有数的平方根之和的所有数的平方根之和可以一个个地加,但更方便的是写一个循环完成工作可以一个个地加,但更方便的是写一个循环完成工作q需要一个变量保存部分和,逐步把各个平方根加上去需要一个变量保存部分和,逐步把各个平方根加上去q需要一个变量保存变动轨迹,从初值开始每次修改需要一个变量保存变动轨迹,从初值开始每次修改n很典

5、型很典型for循环。假定已有总和变量循环。假定已有总和变量sum和循环变量和循环变量n:for (sum = 0.0, n = 13; n = 13; -n) sum += sqrt(n);n两个循环等效。没有特殊需要都应采用向上循环两个循环等效。没有特殊需要都应采用向上循环n请用请用while语句重写上面两种方式语句重写上面两种方式循环控制和浮点数循环控制和浮点数n求求 13, 315 间每隔间每隔7的各整数之和也很容易的各整数之和也很容易q课堂练习课堂练习n一般不用浮点数控制循环一般不用浮点数控制循环,尤其是增量为小数或包含小数,尤其是增量为小数或包含小数时。例:求从时。例:求从0到到10

6、0每隔每隔0.2的数的平方根之和。写:的数的平方根之和。写:double sum, x;for (sum=0.0, x=0.2; x=100.0; x+=0.2) sum += sqrt(x);有问题。浮点计算有误差,不能保证循环体执行有问题。浮点计算有误差,不能保证循环体执行500次次应写:应写:int n; double sum;for (sum = 0.0, n = 1; n = 500; +n) sum += sqrt(0.2*n);求一系列完全平方数(多种算法)求一系列完全平方数(多种算法)n考虑打印出考虑打印出 1 到到 200 间的完全平方数。存在多种方法间的完全平方数。存在多种

7、方法n方法一:逐个检查区间里各个整数,遇到平方数就打印。方法一:逐个检查区间里各个整数,遇到平方数就打印。重复做,每次检查一个数。循环的框架为:重复做,每次检查一个数。循环的框架为:for (n = 1; n = 200; +n) if (n 是完全平方数是完全平方数) 打印打印 n;n其中的一个数是否完全平方数没有直接判断手段。可以考其中的一个数是否完全平方数没有直接判断手段。可以考虑顺序检查,是否有某个数的平方恰为虑顺序检查,是否有某个数的平方恰为n这构成了(循环内的)新循环,需要另一循环变量这构成了(循环内的)新循环,需要另一循环变量另另m从从1开始递增,直至开始递增,直至m*m大于大于

8、n结束,等于就输出结束,等于就输出n:for (m = 1; m * m = n; +m) if (m * m = n) 打印打印 n;求一系列完全平方数求一系列完全平方数n综合起来可得到完整程序:综合起来可得到完整程序:#include int main () int m, n; for (n = 1; n = 200; n+) for (m = 1; m * m = n; m+) if (m * m = n) printf(%d , n); printf(n); /* 最后输出一个换行符最后输出一个换行符 */ return 0;n内层循环结束:内层循环结束:q找到找到m使使m*m=n(n

9、是完全平方数)是完全平方数)q试探了所有可能,但都不成功(试探了所有可能,但都不成功(n不是)不是)求一系列完全平方数求一系列完全平方数n可以考虑把判断完全平方数定义为函数(可以考虑把判断完全平方数定义为函数(请自己做请自己做)n方法二:可看到需要打印的一定是从方法二:可看到需要打印的一定是从1开始连续的一些整数开始连续的一些整数的平方,可以从的平方,可以从1开始打印到某个数平方大于开始打印到某个数平方大于200for (n = 1; n * n = 200; +n) printf(“%d ”, n * n); /*注意打印什么注意打印什么*/n方法一:产生所有备选数据(方法一:产生所有备选数

10、据(1到到200的整数),检查排除的整数),检查排除不合格的。生成与检查是解决问题的常用方法。不合格的。生成与检查是解决问题的常用方法。n方法二:是针对具体问题的特殊方法,通常更简单,效率方法二:是针对具体问题的特殊方法,通常更简单,效率更高。解决问题时应特别注意挖掘这种特殊方法更高。解决问题时应特别注意挖掘这种特殊方法判断素数(定义谓词)判断素数(定义谓词)n写一个函数判断整数是否为素数写一个函数判断整数是否为素数n类型特征可用类型特征可用 int isprime(int),令其返回令其返回0/1值值nn是素数当且仅当它没有真因子。是素数当且仅当它没有真因子。m是是n的因子可以用条件的因子可

11、以用条件(n%m = 0)描述,如果描述,如果mn 就够了。函数定义:就够了。函数定义:int isprime (int n) /* n是否素数是否素数 */ int m = 2; for ( ; m * m = n; m+) if (n % m = 0) return 0; return 1; /* 没有因子,是素数没有因子,是素数 */判断素数判断素数n从循环中退出:从循环中退出:isprime发现一个因子就可做结论发现一个因子就可做结论return使使函数结束函数结束,使循环没做到条件不成立就结束了,使循环没做到条件不成立就结束了这也是一种结束循环的方式这也是一种结束循环的方式n这个函数

12、不完善,对于这个函数不完善,对于1它将给出它将给出“是素数是素数”的结论,对负的结论,对负数给出的结果也可能不合理数给出的结果也可能不合理q应该在循环前处理特殊情况:应该在循环前处理特殊情况:qif (n = 1) return 0;循环程序设计:简单总结循环程序设计:简单总结n写出循环的基础是发现程序里需要循环(前面说过)。但写出循环的基础是发现程序里需要循环(前面说过)。但发现重复动作到写好循环,还需考虑和解决许多具体问题发现重复动作到写好循环,还需考虑和解决许多具体问题n首先是确定循环体的每次执行中完成哪些工作。这是实现首先是确定循环体的每次执行中完成哪些工作。这是实现循环的基础,也是把

13、确定一系列工作的实现归结到确定一循环的基础,也是把确定一系列工作的实现归结到确定一次工作的实现次工作的实现n下一问题是循环控制,要确定循环怎样开始、继续和停止。下一问题是循环控制,要确定循环怎样开始、继续和停止。循环控制牵涉的问题很多,需要确定:循环控制牵涉的问题很多,需要确定:q循环中需要使用的变量循环中需要使用的变量q循环开始前应该给它们什么初值,循环体中如何修改循环开始前应该给它们什么初值,循环体中如何修改q在什么情况下应该继续(或应该终止)循环,循环终止在什么情况下应该继续(或应该终止)循环,循环终止后如何得到需要的结果,等等后如何得到需要的结果,等等n具体问题还包括使用语言的哪种结构

14、实现循环等具体问题还包括使用语言的哪种结构实现循环等 从循环中退出从循环中退出n通过循环条件确定循环结束或继续是最规范清晰的做法。通过循环条件确定循环结束或继续是最规范清晰的做法。但有时这种方式不合用,需要从执行的循环中间退出但有时这种方式不合用,需要从执行的循环中间退出前面素数判断函数有这种情况,通过前面素数判断函数有这种情况,通过return退出退出写一个函数写一个函数first5(int m, int n)first5(int m, int n)要求函数要求函数first5first5往屏幕上输出往屏幕上输出m,nm,n之间第一个能被之间第一个能被5 5整除整除的数,例如用的数,例如用m

15、ainmain函数调用函数调用first5(7, 12)first5(7, 12)则输出则输出10,10,调调用函数用函数first5(16,19)first5(16,19)则输出则输出”No such nmuber!”No such nmuber!”。循环中的变量循环中的变量n下面总结循环程序设计中的一些情况和问题下面总结循环程序设计中的一些情况和问题n循环中常出现几类变量,注意这些有助于对循环的思考和循环中常出现几类变量,注意这些有助于对循环的思考和分析。也是写循环程序的经验总结分析。也是写循环程序的经验总结注意:这一分类并不绝对,不同类别间没有清晰界限注意:这一分类并不绝对,不同类别间没

16、有清晰界限1.循环控制变量(循环控制变量(循环变量循环变量):它们在循环前设初值,循环):它们在循环前设初值,循环中递增中递增/递减,达到递减,达到/超过界限时循环结束。它们控制循环的超过界限时循环结束。它们控制循环的进行进行/结束。结束。for语句的设计就是考虑这类变量的特点语句的设计就是考虑这类变量的特点for(n = 0; n = 0; -n) . .for(n = 2; n 52; n += 4) .这种循环是固定次数的循环,有可能展开为一组语句这种循环是固定次数的循环,有可能展开为一组语句但重复次数太多或可能变动,就应该用循环描述但重复次数太多或可能变动,就应该用循环描述循环中的变量

17、循环中的变量2.累积变量:常用累积变量:常用 += 或或 *= 等更新。其初值经常用相关运算等更新。其初值经常用相关运算的单位元(对加法用的单位元(对加法用0;乘法用;乘法用1为初值)。循环结束时,为初值)。循环结束时,这种变量的终值常被作为循环计算的结果这种变量的终值常被作为循环计算的结果3.递推变量:前两类变量的推广。通常是几个协同工作的变递推变量:前两类变量的推广。通常是几个协同工作的变量,每次循环由几个变量推出一个新值,其余依次更新量,每次循环由几个变量推出一个新值,其余依次更新对三个变量对三个变量 x1、x2、x3,循环体可能有语句序列:循环体可能有语句序列:x1 = x2;x2 = x3;x3 = . x1 . x2 .;n要写好一个循环,可以注意其中需要哪些变量,参考上面要写好一个循环,可以注意其中需要哪些变量,参考上面的分类确定它们的用途的操作方式的分类确定它们的用途的操作方式循环程序设计循环程序设计n写循环时需要考虑和解决的问题:写循环时需要考虑和解决的问题:q循环涉及到哪些变量,需要引进哪些临时性变量?循环涉及到哪些变量,需要引进哪些临时性变量?q循环如何开始?循环开始前给各个变量什么初值?循环循环如何开始?循环开始前给各个变量什么初值?循环中各变量的值如何改变?中各变量的值如何改变?q什么情况下继续(或终止)循环?什么情况下

温馨提示

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

评论

0/150

提交评论