C语言程序设计课件第12章 建构法程序设计_第1页
C语言程序设计课件第12章 建构法程序设计_第2页
C语言程序设计课件第12章 建构法程序设计_第3页
C语言程序设计课件第12章 建构法程序设计_第4页
C语言程序设计课件第12章 建构法程序设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

第12章建构法程序设计本章主要内容:12.1一个简单的C语言程序12.2一个复杂的C语言程序(重点)本章教学要求:了解建构法程序设计的概念熟悉建构法程序设计的方法12.1一个简单的C语言程序建构法程序设计:就是从简单的一个C语言程序开始,不断分析其存在的问题,并不断地去解决它,完善它,直到一个比较理想的程序为止。

12.1.1已知半径求圆的面积1.初始程序这个程序算法很简单,需要输入的是半径,需要输出的是圆面积,计算的公式是s=3.14*r*r,程序需要设计两个实型变量r、s分别存储半径和面积。源程序【1】:第12章建构法程序设计12.1一个简单的C语言程序1.初始程序分析:在这个程序中,如果给出的半径都是不小于0的实数,程序肯定可以给出该圆的面积,并保留2位小数;但是,当输入的半径是小于0的实数时,程序应该给出输入的半径越界的提示,而程序仍然给出了一个圆面积值。这样的程序称为具有正确性,却不具有健壮性。说明:程序的正确性是指输入正确的数据,给出正确的结果。程序的健壮性是指程序对错误的数据有相应的处理。如何修改程序?第12章建构法程序设计12.1一个简单的C语言程序2.改进程序在输入半径以后对输入半径范围内的数据,按圆面积计算,并输出圆面积;对半径范围外的数据,给出越界提示。程序改进为源程序【2】如下:说明:程序中带下划线的部分是在源程序【1】的基础上新增加的代码。当输入半径小于0时,程序的运行结果:请输入半径:-3↙输入半径越界!请输入不小于0的实数!第12章建构法程序设计12.1一个简单的C语言程序12.1.2求5个圆的面积。上面的程序运行一次只能计算一个圆的面积,如果程序运行一次可以计算5个圆的面积,如何修改程序呢?1.初始程序1是否在程序的运行部分外面加一个循环控制就可以呢?程序需要设计一个循环控制变量i,完成循环5次的控制。源程序【3】:第12章建构法程序设计12.1一个简单的C语言程序2.初始程序2初始程序1是程序运行后,必须输入5个数据才能结束。能否使程序变得通用一些,在程序运行时输入要循环的次数,也就是处理数据的个数,再按照这个给定的次数,控制循环。程序改进为源程序【4】如下:分析:程序运行时,如果我们给出的半径都是不小于0的实数,程序可以计算给定个数的圆的面积;但是,当我们输入的半径有小于0的数时,程序给出输入半径越界的提示,但是并没有让重新输入,这样就少计算了一个圆面积。如何改进程序?第12章建构法程序设计12.1一个简单的C语言程序3.改进程序分析:在初始程序1上修改程序:当输入半径范围外的数据时,除给出越界提示外,还要允许重新输入半径,直到输入半径范围内的数为止。程序改进为:思考:(1)当r小于0时,为什么i--?(2)请在初始程序2(源程序【4】)上按照改进要求修改程序。第12章建构法程序设计12.1一个简单的C语言程序12.1.3求n个圆的面积。上面的程序可以处理多个圆面积,但是这多个圆的信息没有保存,如何让这些圆的信息保存下来呢?当反复使用一组类型相同的数据时,可以考虑用数组存储。如何修改程序呢?1.初始程序要想保存圆的信息(主要是半径),就要用数组来存储它们。比如保留5个圆的半径,要设置一个至少有5个元素的一维数组存储圆的半径。程序改进为源程序【6】:第12章建构法程序设计12.1一个简单的C语言程序1.初始程序说明:第1个圆半径保存在a[0]中,第2个圆半径保存在a[1]中,第3个圆半径保存在a[2]中,第4个圆半径保存在a[3]中,第5个圆半径保存在a[4]中。2.改进程序1源程序【6】只是把半径保存下来了,如果想把半径和面积再对应输出一遍,如何修改程序呢?源程序【7】如下:第12章建构法程序设计12.1一个简单的C语言程序2.改进程序1说明:对于域宽控制:半径占6列,面积占10列,采用右对齐。一行输出一个半径和对应的面积。思考:如果每次输入半径后,不计算不输出圆面积,而在最后一起输出半径和圆面积,如何修改程序?第12章建构法程序设计12.1一个简单的C语言程序3.改进程序2在源程序【7】的基础上,还可以按照半径的升序输出半径和面积。也就是在输出前先对输入的半径排序,再输出。程序改进为:思考:(1)如果按降序对半径排序,如何修改程序?(2)如果在输出信息中,还想知道是第几次输入的半径,如何修改程序?第12章建构法程序设计12.2一个复杂的C语言程序在设计程序时,当某一程序段相对独立,具有完整的功能时,可以把这段代码写成函数,在使用时随时调用;当这组数据,在下一次程序运行时还要使用,可以先用文件保存起来,需要时再读取。12.2.1把接受n个半径写成函数1.初始程序在源程序【8】的基础上把接受5个半径写成函数,在主函数中对它调用完成所需要的功能。源程序【9】如下:第12章建构法程序设计12.2一个复杂的C语言程序说明:把输入半径写成一个函数,在主函数中需要的时候调用它,这样可以使主函数的结构变得简单。划线部分为调用语句。能否把对半径的排序,5个半径和面积的输出也写成函数呢?2.改进程序把5个半径的排序写成一个排序函数sort(),把5个半径和面积的输出写成输出函数output(),程序改进为:源程序【10】如下:第12章建构法程序设计12.2一个复杂的C语言程序说明:从这个程序中可以看出,程序的主要功能以函数的形式出现后,这个功能就变成了一个通用的功能,就是对n个数据的处理了。在主函数中,随时可以改为对10个数,20个数的处理。思考:(1)把主函数改为对20个半径的处理。(2)把程序的主要功能写成函数,程序结构是简单了,把大问题划分成了小问题,程序也更加通用了。但事物都是一分为二的,请大家分析,使用函数后程序付出的代价是什么?第12章建构法程序设计12.2一个复杂的C语言程序12.2.2把接受的n个半径保存成文件1.初始程序引入数组后,虽然可以反复使用半径。但是,一旦关闭程序,再次运行时,半径数据就都不存在了。原因就是这些半径没有以文件的形式存储在外存上。下面写一个函数,把数组r的数据以文件的形式存放在外存上。在源程序【10】的主函数前增加writefile(floata[],intn)函数,主函数改为:第12章建构法程序设计12.2一个复杂的C语言程序2.改进程序1能否写一个函数,把存入外存的文件读过来,然后排序输出。在上述程序中再增加一个读文件函数readfile()。主函数改为:第12章建构法程序设计12.2一个复杂的C语言程序3.改进程序2能否把主函数完成的主要功能以功能菜单的形式提供给用户,用户根据需要有选择地执行这些功能。根据上面的修改要求,我们编写了下列程序,请调试。第12章建构法程序设计12.2一个复杂的C语言程序思考:(1)在output()函数中,加入字符型变量yn的作用是什么?函数最后一行代码中getch()的作用?(2)在写文件函数中,把n个半径数组保存到d盘根目录上,文件名为filer.txt是固定的。能否把文件名作为参数传给写文件函数,使保存数据的文件名根据需要而改变。(3)在主函数中,当选择0退出程序时执行的代码scanf("\n%c",&yn);的格式控制符中增加了

温馨提示

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

评论

0/150

提交评论