函数—模块化程序设计.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《函数—模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《函数—模块化程序设计.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级语言程序设计第5章 函数模块化程序设计 福建工程学院 鲍春波学习目标l模块化程序设计的思想,l自顶向下的实现方法,l系统函数库的使用方法,l自定义函数的方法,l参数传递方式,l函数调用过程,l接口与实现的分离,l开发大规模程序引言l如何对比较复杂、庞大的问题进行程序设计?例如:绘制一个动物图案l头 正方型l躯干菱形l下肢矩型 建立一个学生信息管理系统l界面l建立信息l维护信息l查询信息解决比较大的问题要成千上万行代码怎么实现呢?l每个软件只有一个main(),main()当中能放多少行程序?l读多少行的程序能让你不头疼?l如果所有代码都在main()当中,怎么团队合作?l如果代码都在一个文
2、件中,怎么团队合作?模块化程序设计思想l复杂问题分解成若干子问题模块,逐个解决每个子问题l模块各司其职每个模块只负责一件事情,它可以更专心一个模块一个模块地完成,最后再将它们集成便于开发、调试、测试和维护等工作l开发人员各司其职按模块分配任务,职责明确并行开发,缩短开发时间l分而治之(Wirth,1971)信息隐藏(Parnas,1972)C语言用函数表示模块l分而治之分而治之函数把较大的任务分解成若干个较小的任务,并提炼出公用任务l代码代码复用复用程序员可以在其他函数的基础上构造程序,而不需要从头做起l信息隐藏信息隐藏(黑盒子)(黑盒子)设计得当的函数可以把具体操作细节对程序中不需要知道它们
3、的那些部分隐藏掉,从而使整个程序结构清楚l如把编程比做制造一台机器,函数就好比其零部件可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调试。这些“零部件”可以是自己设计制造/别人设计制造/现在的标准产品函数的定义形式l返回值类型 函数名(参数列表)ll 函数体变量声明部分语句部分l l函数可以没有返回值,也可以没有参数,均用void表示如:void funcname(void)l参数列表的形式:参数类型 参数名称1,参数类型 参数名称2,如:int maxium(int a,int b,int c)具有三个参数,返回类型为int的函数或 void print(int a,int
4、 b)如大家熟悉的 int main(void)printf(。);实际上 printf,scanf也是这样定义的我们可以根据需要定义各种自己的函数。函数调用已经定义的函数要在某个地方使用才有意义,使用一个函数称为函数调用。可以在main()中调用其它函数在任意一个函数中均可以调用其它函数。调用的形式:函数名(实际参数)-有参数时 或 函数名()-无参数时问题1 绘制一个动物图案。l定义无参数、无返回类型的函数定义无参数、无返回类型的函数l如打印矩型的函数l void Rectangle(void)。使用已经定义的函数测试lvoid Rectangle(void)/这种函数叫做stub 树桩或
5、存根 printf(“rectangle okn”);/仅供测试 void diamond(void)printf(“diamond okn”);lint main(void)ll rectangle();/函数调用l diamond();l rectangle();l return 0;l l被调用的函数必须先定义,即各个函数的定义现在一定要放在主函数之前(等会我们会有另外的方法)问题2 学生信息系统l 同样每个功能模块用一个函数表示void create(void)void display(void)void modify(void)void query(void)void delete(
6、void)l写一个main测试它们问题3:设计一个能求某个自然数以内的自然数之和的函数模块有参数和返回值的函数l分析:首先取名 sum确定是否有返回值?如果有,是什么类型?确定是否有参数?几个?什么类型?l函数定义int sum(int n)int s=0;for(int i=1;i=n;i+).s=s+i;return s;l此函数有一个整型参数,有一个整型的返回值l在函数定义中的参数称为形参,只是一个形式定义,这个参数的具体值由调用者通过实参给定,实参可以是一个与形参类型一致的表达式。测试sum函数 驱动程序l#includelint sum(int n)ll llint main(voi
7、d)l int m,s;scanf(“%d”,&m);/准备一个实参m s=sum(m);/调用sum printf(“%dn”,s);/输出结果 /或者直接 printf(“%dn”,sum(m);return 0;函数调用的注意事项1l有返回值时调用结果可以放到一个数值表达式中,如s=sum(m);也可以作为另一个函数调用的参数,如printf(%dn,sum(m);l无返回值时函数调用只能独立使用 rectangle();函数调用的注意事项2l实参可以是符合参数类型的常量l如 s=sum(100);变量l如 s=sum(m);表达式l如 s=sum(m+10);实参与形参必须一致l函数调
8、用时实参与形参必须保持参数个数相同参数类型相同,如果不同将自动转换参数顺序相同l当函数有多个表达式参数时,函数调用时实参求值的顺序可能是从左到右或从右到左,举例funcpara.cpp为了清楚起见,需要对函数接口加以注释说明/*函数功能:实现功能 函数参数:参数1,表示 参数2,表示 函数返回值:*/返回值类型 函数名(参数表)函数体return 表达式;问题4 设计一个求两个数的平均值的函数模块/*函数功能:计算平均数 函数入口参数:整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值:平均数*/int average(int x,int y)int result;result=(
9、x+y)/2;return result;函数执行的过程l函数调用时,实参值传递给形参变量l暂时离开调用者,去执行函数体l函数执行完毕后,回到调用的位置,继续执行调用者的语句使用了average函数的main()main()int a=12;int b=24;int ave;ave=average(a,b);printf(“average of%d and%d is%d.n,a,b,ave);int Average(int x,int y)int result;result=(x+y)/2;return result;main()int a=12;int b=24;int ave;ave=Av
10、erage(a,b);printf();数据传递执行顺序问题5 设计一个判断某个数是否是素数的函数模块问题6 设计一个求某个数a的n次幂的函数模块l可以定义各种各样的函数模块当问题比较复杂时,需要很多函数l所有自定义的函数都要放在main的前面,这将喧宾夺主,本末倒置l解决的方法是解决的方法是在使用之前,先有在使用之前,先有函数的原型声明函数的原型声明l实际上,头文件中包含了要使用的函数的函数的原型声明原型声明l 如stdio.h中包含了printf,scanf等跟I/O相关的函数原型l某一模块定义为一个函数之后,在使用它(函数调用)之前,先用函数原型声明。l使用函数原型声明,重写上述例题函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 模块化 程序设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内