04 模块化程序设计(函数)
- 格式:ppt
- 大小:505.50 KB
- 文档页数:80
第四章模块化程序设计1. 教学内容:§4.1 函数4.1.1 C程序结构4.1.2 函数定义与函数声明4.1.3 函数的传值调用4.1.4 函数的嵌套调用4.1.5 函数的递归调用§4.2 变量的存储属性4.2.1 动态变量4.2.2 静态变量4.2.3 外部变量§4.3 编译预处理4.3.1 宏替换4.3.2 文件包含2. 教学目的及要求:1) 熟练掌握函数定义与函数声明2)熟练掌握函数传值、嵌套、递归调用3)理解变量的存储属性3. 学重点:1) 函数定义与函数声明2) 函数的传值、嵌套、递归调用第四章模块化程序设计模块化程序设计是进行大程序设计的一种有效措施,其基本思想是将一个程序按功能进行分割成一些模块,使用权每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。
C语言提供了一些支持模块化软件开发的功能:⑴函数式的程序结构。
⑵允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。
⑶具有编译预处理功能,为程序的高度、移植提供了方便,支持模块化程序。
§4.1 函数函数是具有独立功能的程序段。
4.1.1 C程序结构C程序结构实际上是由函数组成的结构。
所有其它函数均由主函数main()调用。
如下图所示:C程序结构设计在逻辑上遵循自顶向下、逐步细化的层次结构。
【例】:“高等院校事务管理系统”菜单设计。
P1024.1.2 函数定义与函数声明定义函数就是在程序中设定一个函数模块。
一个函数由变量声明与可执行语句组成的独立实体,用以完成一指定功能。
函数定义形式如前所述:【例】:求三个数的平均值按自顶向下的方法可写出计算平均值的主函数和自定义函数,如下:int average(x,y,z) /*声明自定义函数*/ int x,y,z; /*声明形式参数x,y,z为整型数*/ {int aver; /*声明变量aver为整型数*/ver=(x+y+z)/3; /*求x,y,z的平均值,并赋给aver变量*/ return (aver); /*将aver的值作为函数的返回值*/ }㈠函数定义函数定义的内容及形式:函数类型标识符函数名([类型标识符形式参数1],… …){函数体;}⒈函数名函数名是函数的名字。
实验4 函数-模块化程序设计一、实验目的1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。
掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法;2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;3.在编程过程中加深理解函数调用的程序设计思想。
二、实验环境PC微机Windows 操作系统VS 2019 程序集成环境三、实验内容与步骤4.编写一个计算组合数的函数combinNum(int m,int n)。
计算结果由函数返回。
计算组合数的公式是:c(m,n)=m!/(n!*(m-n)!)要求:(1)从主函数输入m和n的值。
对m>n、m<n和m=n 的情况作分别处理后调用函数combinNum(m,n),在主函数内输出结果值。
(2)对m>n、m<n和m=n 的情况各取一组数据进行测试,检查程序的正确性。
代码:#include<stdio.h>int fac(int m){int sum = 1;for (int i = m; i >= 1; i--) {sum *= i;}return sum;}int combin(int m, int n){int a = fac(m);int b = fac(n);int N = fac(m - n);return a / (b * N );}int main(){int m, n;scanf("%d %d", &m, &n);if (m == n || n == 0) printf("1");else if (m < n || m < 0 || n < 0) printf("please input right number");else printf("%d", combin(m, n));return 0;}实验结果:①m > n:②m == n:③m < n:实验分析:本题首先要将m和n的所有情况讨论清楚,然后求组合数时在combin函数里嵌套三个求阶乘的函数分别求公式中三个成分的值比递归调用combin函数来求解简单。
第四章模块化程序设计(函数)【计划课时】授课8课时+上机4课时(预习内容:教材第七章、第八章)一、概述回顾:·程序设计方法:自上而下,逐步细化·C语言:函数式语言在C程序设计中,通常:·将一个大程序分成几个子程序模块(自定义函数)·将常用功能做成标准模块(标准函数)放在函数库中供其他程序调用如果把编程比做制造一台机器,函数就好比其零部件。
·可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调试。
·这些“零部件”可以是自己设计制造/别人设计制造/现在的标准产品而且,许多“零部件”我们可以只知道需向它提供什么(如控制信号),它能产生什么(如速度/动力)。
控制信号速度/动力【例】编写一个儿童算术能力测试软件main() {char ans = …y‟;clrscr();cover(); /*调用软件封面显示函数*/password(); /*调用密码检查函数*/while (ans ==‟y‟|| ans ==‟Y‟){ question(); /*调用产生题目函数*/answers(); /*调用接受回答函数*/marks(); /*调用评分函数*/results(); /*调用结果显示函数*/printf(“是否继续练习?(Y/N)\n”);ans=getch ();}printf(“谢谢使用,再见!”);}/*定义所用函数*/cover() { } /*软件封面显示函数*/password(){ }/*密码检查函数*/question(){ } /*产生题目函数*/answers(){ } /*接受回答函数*/marks(){ } /*评分函数*/results(){ }/*结果显示函数*/函数使用常识:P1021、C程序执行总是从main函数开始,调用其它函数后总是回到main函数,最后在 main函数中结束整个程序的运行。
模块化程序设计模块化程序设计什么是模块化程序设计?模块化程序设计是指将一个大型的软件系统划分为多个独立的模块,每个模块具有独立的功能和责任,通过模块间的接口进行相互通信和协作。
通过模块化程序设计,可以将复杂的问题拆分为多个简单的子问题,提高代码的可维护性和可重用性。
模块化程序设计的优势1. 可维护性模块化程序设计使得代码结构更加清晰,每个模块都有明确的功能和责任。
当需要修改某个模块时,只需要关注该模块,而不需要了解整个系统的细节。
这样可以降低维护的成本,提高代码的可维护性。
2. 可重用性通过模块化程序设计,可以将功能类似的代码封装为一个模块。
当需要实现类似的功能时,可以直接复用已经存在的模块,无需重复编写代码。
这样可以提高开发效率,减少代码冗余。
3. 可测试性模块化程序设计将一个大型的软件系统划分为多个小的模块,每个模块都可以独立进行测试。
这样可以提高测试的准确性和效率。
同时,当需要修复某个模块的 bug 时,只需要测试该模块,而不需要重新测试整个系统。
4. 可扩展性通过模块化程序设计,可以灵活地添加、删除或替换模块,以满足不同的需求。
当系统需要增加新的功能时,可以根据需要添加新的模块,而不需要修改已有的模块。
这样可以提高系统的可扩展性。
模块化程序设计的实践方法1. 模块设计在进行模块化程序设计时,需要合理地划分模块的功能和责任。
一个模块应该具有明确的功能和接口,使用者只需要了解模块的接口和预期行为,而不需要了解模块的具体实现。
同时,模块之间的接口设计应该尽量简单、清晰,并遵循设计原则,如单一职责原则和开闭原则等。
2. 模块间通信模块之间的通信是实现模块化程序设计的关键。
常见的模块间通信方式包括函数调用、消息传递、共享内存等。
在选择模块间通信方式时,需要根据具体的需求和模块间的关系选择合适的方式。
3. 模块测试每个模块都应该有相应的测试用例,以确保模块的正确性和稳定性。
模块测试应覆盖模块的各种情况和边界条件,以保证模块的功能的完整性。