- 1、本文档共67页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[第5章模块化程序设计2
《解析C程序设计(第2版)》第5章 模块化程序设计 第5章 模块化程序设计 讲授方法——解析法 “解析法”是从实际问题入手,剖析求解问题的关键点(进行知识的发现),然后结合问题讲解需要的知识点,最后给出问题的求解办法和实现过程,并举一反三。 各章节以问题入手,分析并讲述需要的知识点,然后再实现该问题,并通过思考题延伸知识点或引入新的问题,环环相扣,层层推进,充分体现解析法的精髓,达到通俗易懂、由浅入深的效果,举一反三,培养迁移知识的能力。 本章内容 复杂问题的求解 怎样来分析和完成“高校信息管理系统”呢? 一个大系统(或子系统)不可能用一个主函数来完成,必须将大问题分解成小问题,再由若干人、若干函数(模块)来完成。 高校信息管理系统功能分解 模块化程序设计思想 为了完成上述大型系统的开发,我们将软件开发看成是一项工程来做,其过程大致分为:系统定义、需求分析、系统设计、编写程序、系统测试、系统维护等阶段。 软件工程的思想:将一个大的系统采取“分而治之”方法解决。 模块化程序设计思想 开发一个软件系统时,最好的办法是从编写主程序开始,在主程序中,将问题作为一个整体考虑,然后找出完成整个任务的主要步骤,再沿着这条主线将整个问题继续分解为独立的模块。 这种“自顶向下、逐步细化”的思想就是模块化程序设计的主要思想。 为什么需要模块化程序设计 模块化程序设计方法 功能分解 自顶向下、逐步求精的过程 模块分解的原则 保证模块的相对独立性 高聚合、低耦合 模块的实现细节对外不可见 外部:关心做什么 内部:关心怎么做 设计好模块接口 接口是指罗列出一个模块的所有的与外部打交道的变量等 定义好后不要轻易改动 在模块开头(文件的开头)进行函数声明 模块分解的原则 模块化程序设计的优点 C程序的一般结构 函数设计的原则 函数的功能要单一,不要设计多用途的函数 函数的规模要小,尽量控制在50行代码以内 1986年IBM在OS/360的研究结果:大多数有错误的函数都大于500行 1991年对148,000行代码的研究表明:小于143行的函数比更长的函数更容易维护 参数和返回值的规则 参数要书写完整,不要省略 对函数的入口参数进行有效性检查 没有参数和返回值时,用void填充 每个函数只有一个入口和一个出口,尽量不使用全局变量 尽量少用静态局部变量,以避免函数具有“记忆”功能 C语言中的函数与模块 在C语言中,每个模块都是由函数完成的。 一个小模块就是一个函数。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。程序员要善于利用库函数,以减少重复编写程序段的工作量。 在编写某个函数时,遇到具有相对独立的功能的程序段,都应独立成另一个函数,而在一个函数中调用另一个函数;当某一个函数拥有较多的代码时(一般函数代码50行左右),也应将函数中相对独立的代码分成另一个函数。 C语言就是模块化程序设计语言。 简化的模块化问题 提出问题 【例5-1】求一元二次方程ax2+bx+c的根,并考虑判别式的各种情况。 主函数可以调用其他函数,反之,不然。 自定义函数之间能否调用呢?能。 函数不能嵌套定义,但是函数能嵌套调用,即函数调用函数,前者称为调用函数,后者称为被调函数。 在主函数main()中输入a、b、c,并调用求根函数root();在求根函数中再计算判别式disc,并判断3种情况,根据每种情况调用不同的根计算函数root1()、root2()、root3()。 实现代码 /* LI5_1.C */ #include stdio.h #include math.h /* 自定义函数的声明 */ void root(int a,int b,int c); float root1(int a,int b,int c); void root2(int a,int b,int c); void root3(int a,int b,int c); /* 主函数 */ int main() { int a,b,c; printf(Input a,b,c: ); scanf(%d,%d,%d,a,b,c); root(a,b,c); /* 调用求方程根函数 */ return 0; } /* 求方程根函数 */ void root(int a,int b,int c) { float disc,r; disc=b*b-4*a*c; /* 求判别式的值 */ if(disc==0) { r=root1(a,b,c); /* 调用求两个相等实根函数 */ printf(x1=%7.
文档评论(0)