C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计

上传人:E**** 文档编号:89187652 上传时间:2019-05-20 格式:PPT 页数:59 大小:1.19MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计_第1页
第1页 / 共59页
C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计_第2页
第2页 / 共59页
C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计_第3页
第3页 / 共59页
C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计_第4页
第4页 / 共59页
C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 蔡启先 第7章 C程序的模块化设计(59页珍藏版)》请在金锄头文库上搜索。

1、第7章 C程序的模块化设计,第7章 C程序的模块化设计,用计算机解决较大的问题时,由于问题复杂涉及许多方面,每一方面有可能包含许多小问题,需要设计规模较大的程序,而且设计工作一般需要多个人甚至若干小组分头完成。因此如何组织程序设计,如何将程序分块,需要遵循什么样的原则,才能将各个程序块组合成一个功能完善的系统,这就不能简单地采用编小程序的方法来编大程序,而必须采用一种新的方法模块化程序设计方法来设计程序。,7.1 程序的模块化与模块化程序设计,7.2 VC+和Turbo C的程序模块化组织,7.3 编译预处理,第 7 章 C 程 序 的 模 块 化 设 计,7.4 综合示例,7.1 程序的模块

2、化与模块化程序设计,7.1.1 概述,7.1.2 C语言模块化程序设计,7.1.3 源文件之间的接口,7.1.4 分割编译,1程序的模块化和模块划分的原则,所谓模块化程序设计,是将一个大程序分解为多个功能相对独立的模块,由主程序规定好各个模块应完成的功能以及各个模块之间的联系(接口)。使用时,由主程序调用有关模块,将它们装配成一个能解决某个复杂问题的大程序。当然,每个程序模块还可以分解为若干个子模块,各个子模块还可以按需要分解为更低层次的模块,并且安排好各级子模块和其上一级模块之间的联系接口。这样编制出的程序,就是模块化的程序。,7.1.1 程序的模块化与模块化程序设计,1程序的模块化和模块划

3、分的原则,模块的划分方法主要有两种:功能分解法和面向对象法。 面向对象法是目前基于可视化程序设计的主流方法 在结构化程序设计中,主要还是采用功能分解法。 功能分解法是面向对象法的基础。 。,7.1.1 程序的模块化与模块化程序设计,1程序的模块化和模块划分的原则,模块的划分应遵循如下原则: (1)独立性原则 每个模块应该只能完成一项功能,可独立运行、调试、修改和维护。模块之间的联系应尽可能少,一般只限于上层模块和其所属的下层模块之间有联系,且程序模块之间的接口应尽可能简单。 (2)信息屏蔽原则 不需要了解模块内部细节,即可装配到程序中使用,当需要对程序进行修改时,只需对有关的少数模块进行修改,

4、而不影响到其它模块。同时,模块调用后不产生副作用,即不会把上一级程序中不应改变的数据给以改变。,7.1.1 程序的模块化与模块化程序设计,1程序的模块化和模块划分的原则,(3)可验证性原则 每个模块可单独验证其正确性。,7.1.1 程序的模块化与模块化程序设计,实际上,很多分解后的子模块可以套用现成的经过实践检验的程序,以提高编程的效率和模块自身的可靠性。,2模块的层次结构和“自顶向下,逐步求精”的设计方法,层次结构是一个系统的各个组成部分之间所具有某种特定关系的反映。其处理层次的原则是: 上层模块可调用下层模块,而下层模块不能调用上层模块。整个程序按调用方式分为若干层次,每一层次由若干模块组

5、成。,7.1.1 程序的模块化与模块化程序设计,例如一个企业管理系统,2模块的层次结构和“自顶向下,逐步求精”的设计方法,“自顶向下,逐步求精”的设计方法的基本思想是,从功能上确定最上层模块(称为主模块或主控模块),然后再按功能划分下一层模块,再继续向下划分再下一层模块,这样逐层细化,直至底层模块功能较为基本,很容易用程序设计语言完全描述。,7.1.1 程序的模块化与模块化程序设计,在逐步求精的过程中,应注意直接相关的上下层模块的接口问题,2模块的层次结构和“自顶向下,逐步求精”的设计方法,程序模块也有专用型模块和通用型模块之分。 专用型模块在程序的层次结构中有固定的位置和固定的上层调用模块。

6、 通用型模块具有可能被多个模块调用的功能。有些可能是同一层次中的多个模块都要调用它。,7.1.1 程序的模块化与模块化程序设计,在模块化程序设计中,不仅从功能上要做好模块的层次结构设计,还要考虑模块之间的数据接口,注意数据的全局性和局部性,还应该注意通用模块的安排。,C语言提供了众多的支持模块化软件开发的功能,主要是: 函数式的程序结构。程序整体由一个或多个函数组成,每个函数具有各自独立的功能和明显的界面。主调函数对被调函数的调用很好地体现了模块化层次结构之间的上下层调用关系。 允许使用不同存储类别的变量,控制模块内部及外部的信息交换。 具有编译预处理功能,既支持了模块化程序设计,又为程序的调

7、试、移植提供了方便。,7.1.2 C语言模块化程序设计,1从功能的观点看C函数,一个C函数可看成一个“黑盒”,我们在调用该函数时不必知道该函数是如何完成其功能的,但必须知道: 被调函数的功能; 被调函数的入口参数; 被调函数的出口参数。,7.1.2 C语言模块化程序设计,2从模块的组织看C函数和C源文件,在模块化的C程序中,main()函数作为最上层模块即主控模块。,7.1.2 C语言模块化程序设计,在模块化的C程序中,main()函数作为最上层模块即主控模块。 从C函数的来源来看,一般有3种,对它们的组织和应用应分别处理。 (1)库函数:往往分类集中存放于某些头文件(.h文件)中,并通过编译

8、预处理命令#include将库函数组合到源程序中。 (2)处于同一个C源程序文件中的C函数。一般关联性较强的函数,比如某一模块及其下属多层次模块,或者代码行不多的函数,可安排在同一个源程序文件中,程序执行时可带来较高的效率和性能。,2从模块的组织看C函数和C源文件,7.1.2 C语言模块化程序设计,(3)C源文件。 以“.C”为扩展名的C文件,其主要内容就是一个或多个C函数。它有自己的功能和其它源文件的接口,这些接口通常是外部变量、外部函数(见7.1.3节)或者数据文件(见第10章)。一般C源文件相对独立性强,它可以独立编辑修改、编译和调试,一般用于相对联系较少的模块,可分别由不同的设计人员进

9、行并行开发。,2从模块的组织看C函数和C源文件,7.1.2 C语言模块化程序设计,这样要解决较复杂的或者规模较大的问题,我们可将要完成的大任务分解为多个较小的任务,每个较小任务又可继续分解为更小的任务。对每一个处于底层的小任务可以编写相应的函数来实现它。然后通过函数调用的方法将多个这样的函数按功能组合成一个调用函数,多个这样的调用函数又可成为被调函数并按功能组织成更高层次的调用函数,如此,一个源文件就能完成某一个复杂任务。 同样,更为复杂更大规模的问题可能要由多个源文件构成,通过分割编译再组合为一个大的可执行文件(见7.1.4节)。,3模块化组织C程序,7.1.2 C语言模块化程序设计,通常用

10、菜单程序来实现各模块的层次结构。,例7.1 主控模块菜单函数。 #include void main( ) char choice=1; while(choice!= 0) printf(“ * 企 业 管 理 系 统 *n”); printf(“=n”); printf(“ 1. 办公室管理 2. 人事管理n”); printf(“ 3. 物质管理 4. 计划管理n”); printf(“ 5. 生产管理 6. 财务管理n”); printf(“ 7. 技术管理 8. 销售管理n”); printf(“ 9. 质量管理 0. 退出系统n”); printf(“=n”); printf(“ 请

11、选择(0-9):”); choice=getchar( );,switch(choice) case 1: b1( ); break; /* 调用办公室管理控制菜单函数 */ case 2: b2( ); break; /* 调用人事管理控制菜单函数 */ case 3: b3( ); break; /* 调用物质管理控制菜单函数 */ case 4: b4( ); break; /* 调用计划管理控制菜单函数 */ case 5: b5( ); break; /* 调用生产管理控制菜单函数 */ case 6: b6( ); break; /* 调用财务管理控制菜单函数 */ case 7:

12、 b7( ); break; /* 调用技术管理控制菜单函数 */ case 8: b8( ); break; /* 调用销售管理控制菜单函数 */ case 9: b9( ); break; /* 调用质量管理控制菜单函数 */ case 0: exit(0); /* 退出管理系统,返回操作系统 */ default: printf(“选择有错,请重新键入(0-9):”); ,1利用外部变量在源文件之间传递数据,源文件之间的接口通常是外部变量、外部函数或者数据文件。,7.1.3 源文件之间的接口,通常外部变量的存储类型有两种说明: 将存储类型说明为static型,则此外部变量只能在所定义的源

13、文件内部使用。 省略存储类型。则此外部变量就能被其它源文件里的函数调用。调用的方法是,要调用的源文件里必须有该变量的extern说明。,2函数在源文件之间的调用,7.1.3 源文件之间的接口,函数也可以被其他源文件调用。 如果函数定义为static型,则此函数只能被所定义的源文件里的函数调用,这种函数被称为内部函数。 而省略存储类型的函数则是外部函数。它可能被其它源文件里的函数调用,调用的方法是,要调用的源文件里必须有该函数的extern说明。,7.2 VC+和Turbo C的程序模块化组织,7.2.1 Visual C+ 6.0的程序模块化组织,7.2.2 Turbo C的程序模块化组织,V

14、isual C+ 6.0以项目工作区(Workspace)的形式来组织文件模块。每个项目工作区(可自行命名)可包括一个或者多个项目(Project)。每个项目(可自行命名)由工作区目录中的项目工作区文件(Project Files)组成。一般项目工作区文件目录中包含三种文件夹:源文件(Source Files)、头文件(Header Files)和资源文件(Resource Files)。其中,源文件夹内存放本项目的所有C/C+源文件,文件扩展名为.c或.cpp,但只能有一个且必须有一个源文件含有main()函数。他们都是用户编写的多模块C程序文件。系统可分别对各个源文件进行编译,编译成功后再

15、连接成一个与项目同名的.exe文件。也可以同时对项目工作区文件里的所有源文件进行编译,如果没有错误即产生一个与项目同名的.exe文件。,7.2.1 Visual C+ 6.0的程序模块化组织,图7-8 项目工作区的组成,Turbo c以项目(Project)的形式来组织文件模块。每个项目(可自行命名)由一个项目文件和多个源文件(Source Files)组成。项目文件的扩展名为.prj,其内容为本项目所包含的所有程序模块的名称,实际上也包括了各个源文件所包含的库文件。源程序文件的扩展名为.c,但只能有一个且必须有一个源文件含有main()函数。他们都是用户编写的多模块C程序文件。,7.2.2 Turbo C的程序模块化组织,7.3 编译预处理,编译预处理方式以命令的形式,指示在对源程序进行编译之前的预先处理。编译预处理命令的结果将和源程序一起编译产生目标代码。 编译预处理命令以#号打头,占用单独的一行,命令尾不能有“;”号。它可以放于程序中的适当位置,一般放在程序前面或函数的前面。 C语言提供的预处理功能主要有3种: 宏定义命令 #define 文件包含命令 #include 条件编译命令 #if#else#endif,7.3 编译预处理,7.3.1 宏定义,7.3.2 文件包含,7.3.3 条件编译,宏定义的功能是用一个指定的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号