第5章模块化程序设计.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章模块化程序设计

《解析C程序设计》第5章 模块化程序设计 第5章 模块化程序设计 本章内容 5.1 怎样解决一个复杂的问题 怎样来分析和完成“高校信息管理系统”呢? 一个大系统(或子系统)不可能用一个主函数来完成,必须将大问题分解成小问题,再由若干人、若干函数(模块)来完成。 高校信息管理系统功能分解 模块化程序设计思想 为了完成上述大型系统的开发,我们将软件开发看成是一项工程来做,其过程大致分为:系统定义、需求分析、系统设计、编写程序、系统测试、系统维护等阶段。 软件工程的思想:将一个大的系统采取“分而治之”方法解决。 模块化程序设计思想 开发一个软件系统时,最好的办法是从编写主程序开始,在主程序中,将问题作为一个整体考虑,然后找出完成整个任务的主要步骤,再沿着这条主线将整个问题继续分解为独立的模块。 这种“自顶向下、逐步细化”的思想就是模块化程序设计的主要思想。 为什么需要模块化程序设计 模块化程序设计方法 功能分解 自顶向下、逐步求精的过程 模块分解的原则 保证模块的相对独立性 高聚合、低耦合 模块的实现细节对外不可见 外部:关心做什么 内部:关心怎么做 设计好模块接口 接口是指罗列出一个模块的所有的与外部打交道的变量等 定义好后不要轻易改动 在模块开头(文件的开头)进行函数声明 模块化程序设计方法的基本原则 模块化程序设计的优点 C程序结构 函数设计的原则 函数的功能要单一,不要设计多用途的函数 函数的规模要小,尽量控制在50行代码以内 1986年IBM在OS/360的研究结果:大多数有错误的函数都大于500行 1991年对148,000行代码的研究表明:小于143行的函数比更长的函数更容易维护 参数和返回值的规则 参数要书写完整,不要省略 对函数的入口参数进行有效性检查 没有参数和返回值时,用void填充 每个函数只有一个入口和一个出口,尽量不使用全局变量 尽量少用静态局部变量,以避免函数具有“记忆”功能 C语言中的函数与模块 在C语言中,每个模块都是由函数完成的。 一个小模块就是一个函数。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。程序员要善于利用库函数,以减少重复编写程序段的工作量。 在编写某个函数时,遇到具有相对独立的功能的程序段,都应独立成另一个函数,而在一个函数中调用另一个函数;当某一个函数拥有较多的代码时(一般函数代码50行左右),也应将函数中相对独立的代码分成另一个函数。 C语言就是模块化程序设计语言。 简化的模块化问题√ 提出问题 例5-1:求三个数中最大数和最小数的差值。 【分析】 主函数可以调用其他函数,反之,不然。 自定义函数之间能否调用呢?能。 函数不能嵌套定义,但是函数能嵌套调用,即函数调用函数,前者称为调用函数,后者称为被调函数。 这里可以定义3个函数:最大值、最小值、最大值与最小值的差,第三个函数将调用前两个函数。 函数的嵌套调用 例5-1问题的实现 课堂练习 用函数的嵌套调用方法计算: 举一反三 弦截法N-S图及程序 弦截法求根程序 函数调用关系 例5-3 例5-3程序 例5-3函数调用关系 思考题 例5-5 用递归方法求n! 递归算法的执行过程分回推和递推两个阶段: 在回推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解; 在递推阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解。 计算5!其递归过程中的“回推”和“递推”,如图5-10所示。 “回推”和“递推” 求解过程 例5-5程序 函数的递归调用 递归调用的说明 上述两种递归调用都是无终止的自身调用。程序中不应出现无终止调用,而只应出现有限次数的有终止的递归调用。可以使用if语句来控制。 在递归程序中:由递归方式与递归终止条件两部分组成。即一个递归的问题可以分为:首先“回推”,然后“递推”。在递归过程中,必须具有一个结束递归过程的条件。 递归调用的说明 C编译系统对递归函数的自调用次数没有限制。 每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出。 由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。 递归形式 5.2 Hanoi(汉诺)塔问题 问题的分析 Hanoi(汉诺)塔问题是一个古典的数学问题,任何一个人都不可能使用传统的方法直接写出移动盘子的每一个具体步骤,僧侣们也无法解决这个问题。 解决Hanoi(汉诺)塔问题的方法可以表述如下: ⑴老和尚移动64个盘子的步骤 第1步,请第2个和尚将前63个盘子从A柱子移到B柱子; 第2步,自己将最下面的第64个盘子从A柱子移到C柱子; 第3步

文档评论(0)

16588ww + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档