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

上传人:李司机 文档编号:4101989 上传时间:2023-04-04 格式:PPT 页数:66 大小:1.03MB
返回 下载 相关 举报
第5章模块化程序设计.ppt_第1页
第1页 / 共66页
第5章模块化程序设计.ppt_第2页
第2页 / 共66页
第5章模块化程序设计.ppt_第3页
第3页 / 共66页
第5章模块化程序设计.ppt_第4页
第4页 / 共66页
第5章模块化程序设计.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《第5章模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章模块化程序设计.ppt(66页珍藏版)》请在三一办公上搜索。

1、第5章 模块化程序设计,2,解析C程序设计第5章 模块化程序设计,2023/4/4,本章内容,模块化程序设计思想 函数的嵌套调用,函数的递归调用,3,解析C程序设计第5章 模块化程序设计,2023/4/4,5.1 怎样解决一个复杂的问题,怎样来分析和完成“高校信息管理系统”呢?一个大系统(或子系统)不可能用一个主函数来完成,必须将大问题分解成小问题,再由若干人、若干函数(模块)来完成。,4,解析C程序设计第5章 模块化程序设计,2023/4/4,高校信息管理系统功能分解,5,解析C程序设计第5章 模块化程序设计,2023/4/4,模块化程序设计思想,为了完成上述大型系统的开发,我们将软件开发看

2、成是一项工程来做,其过程大致分为:系统定义、需求分析、系统设计、编写程序、系统测试、系统维护等阶段。软件工程的思想:将一个大的系统采取“分而治之”方法解决。,6,解析C程序设计第5章 模块化程序设计,2023/4/4,模块化程序设计思想,开发一个软件系统时,最好的办法是从编写主程序开始,在主程序中,将问题作为一个整体考虑,然后找出完成整个任务的主要步骤,再沿着这条主线将整个问题继续分解为独立的模块。这种“自顶向下、逐步细化”的思想就是模块化程序设计的主要思想。,7,解析C程序设计第5章 模块化程序设计,2023/4/4,为什么需要模块化程序设计,什么时候需要模块化?某一功能,如果重复实现2遍及

3、其以上,即应考虑模块 化,将它写成通用函数,并向小组成员发布。要尽可能利用其它人的现成模块。模块化程序设计方法就是按照“自顶向下、逐步求精”的思想,将系统功能逐步细分,使每个功能非常单一,一般不超过50行。,8,解析C程序设计第5章 模块化程序设计,2023/4/4,模块化程序设计方法,功能分解自顶向下、逐步求精的过程模块分解的原则保证模块的相对独立性高聚合、低耦合模块的实现细节对外不可见外部:关心做什么内部:关心怎么做设计好模块接口接口是指罗列出一个模块的所有的与外部打交道的变量等 定义好后不要轻易改动在模块开头(文件的开头)进行函数声明,9,解析C程序设计第5章 模块化程序设计,2023/

4、4/4,模块化程序设计方法的基本原则,模块化程序设计方法的基本原则是:高聚合、低耦合及信息隐藏。高聚合是指一个模块只能完成单一的功能,不能“身兼数职”,在描述功能时不能出现“和”、“与”等连词。低耦合是指模块之间参数传递尽量少,还不能通过全局变量来实现数据传递。信息隐藏是指把不需要调用者知道的信息都包装在模块内部隐藏起来。只有实现了高聚合、低耦合,才可能最大程度的实现信息隐藏,从而实现真正意义上的模块化程序设计。,10,解析C程序设计第5章 模块化程序设计,2023/4/4,模块化程序设计的优点,每个模块都可以分配给不同的程序员完成,从而缩短开发周期。各个模块高聚合、模块之间低耦合,只要模块之

5、间确定了参数传递的接口,不管哪个模块内部的改动,均不会影响其它模块,从而使软件产品的生产更加灵活。系统细化到模块,条理清楚,系统更加容易理解和实现。容易维护、系统可靠。模块化程序设计的特点是:各模块相对独立、功能单一、结构清晰、接口简单;避免程序开发的重复劳动;易于维护和功能扩充;程序设计的复杂性得到了有效控制等。,11,解析C程序设计第5章 模块化程序设计,2023/4/4,C程序结构,C语言是模块化程序设计语言,每个模块都是由函数完成的,C语言是函数式的语言,函数就是模块。使用顺序结构、分支结构、循环结构三种基本结构设计的程序必然就是结构化程序。,12,解析C程序设计第5章 模块化程序设计

6、,2023/4/4,函数设计的原则,函数的功能要单一,不要设计多用途的函数 函数的规模要小,尽量控制在50行代码以内1986年IBM在OS/360的研究结果:大多数有错误的函数都大于500行1991年对148,000行代码的研究表明:小于143行的函数比更长的函数更容易维护参数和返回值的规则参数要书写完整,不要省略对函数的入口参数进行有效性检查没有参数和返回值时,用void填充每个函数只有一个入口和一个出口,尽量不使用全局变量尽量少用静态局部变量,以避免函数具有“记忆”功能,13,解析C程序设计第5章 模块化程序设计,2023/4/4,C语言中的函数与模块,在C语言中,每个模块都是由函数完成的

7、。一个小模块就是一个函数。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。程序员要善于利用库函数,以减少重复编写程序段的工作量。在编写某个函数时,遇到具有相对独立的功能的程序段,都应独立成另一个函数,而在一个函数中调用另一个函数;当某一个函数拥有较多的代码时(一般函数代码50行左右),也应将函数中相对独立的代码分成另一个函数。C语言就是模块化程序设计语言。,14,解析C程序设计第5章 模块化程序设计,2023/4/4,简化的模块化问题,实现前面“高校信息管理系统”,需要用到模块化程序设计、函数的定义、声明、调用(嵌套调用)、返回等,还需要用到数组、指针、结构体、文件等知

8、识,这些知识将在后续章节逐一介绍。这里另外提出一个稍微简单一点的问题,以便在本节中实现。,15,解析C程序设计第5章 模块化程序设计,2023/4/4,提出问题,例5-1:求三个数中最大数和最小数的差值。,16,解析C程序设计第5章 模块化程序设计,2023/4/4,【分析】,主函数可以调用其他函数,反之,不然。自定义函数之间能否调用呢?能。函数不能嵌套定义,但是函数能嵌套调用,即函数调用函数,前者称为调用函数,后者称为被调函数。这里可以定义3个函数:最大值、最小值、最大值与最小值的差,第三个函数将调用前两个函数。,17,解析C程序设计第5章 模块化程序设计,2023/4/4,函数的嵌套调用,

9、18,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-1问题的实现,/*LI5_1.c*/#include int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);void main()int a,b,c,d;printf(Input Data:);scanf(%d%d%d,/*定义dif函数求三数的差值*/int dif(int x,int y,int z)int m1,m2;m1=max(x,y,z);m2=min(x,y,z);return m1-m2;/*定义max函

10、数求三数的最大值*/int max(int x,int y,int z)int r1,r2;r1=(xy)?x:y;r2=(r1z)?r1:z;return(r2);/*定义min函数求三数的最小值*/int min(int x,int y,int z)int r;r=(xy)?x:y;return(rz?r:z);,19,解析C程序设计第5章 模块化程序设计,2023/4/4,课堂练习,用函数的嵌套调用方法计算:,20,解析C程序设计第5章 模块化程序设计,2023/4/4,举一反三,例5-2 用弦截法求方程的根,【分析】弦截法求方程的根的方法如下:取两个不同点x1、x2,如果f(x1)与f

11、(x2)符号相反,则(x1,x2)区间内必有一个根。否则改变x1、x2的值使得f(x1)与f(x2)异号为止。(注意:x1与x2的值不能相差太大,确保之间只有一个根)连接f(x1)与f(x2)两点,此线(即弦)交x轴于x点(计算见图)。再求出f(x)。若f(x)与f(x1)同号,则将x作为新的x1。若f(x)与f(x2)同号,则将x作为新的x2。重复第与第步,直到|f(x)|,其中是一个很小的正数,如0.0001,此时可以认为:f(x)0。,21,解析C程序设计第5章 模块化程序设计,2023/4/4,弦截法N-S图及程序,#include#include float f(float x);f

12、loat xpoint(float x1,float x2);float root(float x1,float x2);void main()float x1,x2,f1,f2,x;/*输入x1和x2并保证其 函数值反号*/do printf(Input x1,x2:n);scanf(%f,%f,22,解析C程序设计第5章 模块化程序设计,2023/4/4,弦截法求根程序,/*定义f函数,求f(x)的值*/float f(float x)float y;/*计算f(x)的值*/y=(x-5.0)*x+16.0)*x-80.0;return(y);/*定义xpoint函数,求弦与x轴的交点*/

13、float xpoint(float x1,float x2)float x;x=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1);return(x);,/*定义root函数,求近似根*/float root(float x1,float x2)float x,y,y1;y1=f(x1);do x=xpoint(x1,x2);y=f(x);/*新的f(x)与f(x1)同号时,用x替换x1,否则替换x2*/if(y*y10)y1=y;x1=x;else x2=x;while(fabs(y)=0.0001);/*当f(x)约等于0时退出循环*/return(x);,23,解析C程序设

14、计第5章 模块化程序设计,2023/4/4,函数调用关系,24,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-3,求,的值。,【分析】从表达式中可以看出,每项都是一样的,不同的是起止数不同,因此每项的计算可以由一个相同的函数来完成。而每项中还有一个阶乘,因此还需要一个求阶乘的函数。,25,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-3程序,#include/*求n的阶乘函数*/double fac(int n)double s=n;if(n=1)return 1;/*小于1的数的阶乘都返回1*/for(;-n;)/*先将n值减1,再判断n值是否为非0(真)*/

15、s*=n;/*计算阶乘s=s*n,计算的是:s=n*(n-1)*2*1*/return s;/*返回n!值*/*求项的值:n1和n2为起止数*/double sum(int n1,int n2)int i;double s=0;for(i=n1;i=n2;i+)s=s+1/fac(i);return s;,void main()double s;s=sum(1,3)+sum(6,9)+sum(12,15);printf(ns=%f,s);getch();/*暂停,按任意键继续*/,26,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-3函数调用关系,27,解析C程序设计第5章 模

16、块化程序设计,2023/4/4,思考题,求n!可以使用123n形式。进一步思考:n!可以写成(n-1)!n,其中用到了(n-1)!的值。那么,能不能在求n!时调用自身函数求(n-1)!,只是改变参数值?以此类推。答:可以使用递归方式完成。,28,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-5 用递归方法求n!,【分析】求n!除了可以使用例5-5递推方法外(即:123n),还可以使用递归方法。递推是用一个值推出另一个值,递归是通过函数的自身调用来推导结果。如计算5!可以用5!54!;4!43!;3!32!;2!21!;1!1。其递归公式如下:,29,解析C程序设计第5章 模块化

17、程序设计,2023/4/4,递归算法的执行过程分回推和递推两个阶段:在回推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解;在递推阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解。计算5!其递归过程中的“回推”和“递推”,如图5-10所示。,30,解析C程序设计第5章 模块化程序设计,2023/4/4,“回推”和“递推”,31,解析C程序设计第5章 模块化程序设计,2023/4/4,求解过程,对使用递归方法计算4!的结果如下:调用 递归调用 返回第1步 fac(4)fa=4*fac(4-1)=4*fac(3)fa=4*3*2*1第2步 fac(

18、3)fa=3*fac(3-1)=3*fac(2)fa=3*2*1第3步 fac(2)fa=2*fac(2-1)=2*fac(1)fa=2*1第4步 fac(1)fa=fac(1)=1,回推,递推,回推过程:计算fac(4)时要知道fac(3),计算fac(3)时要知道fac(2),计算fac(2)时要知道fac(1),而fac(1)为1。递推过程:知道fac(1)后可算fac(2),从而可算fac(3),最后计算fac(4)。,32,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-5程序,/*LI5_5.c*/#include long fac(int n);void main(

19、)int n;long r;/*定义长整型变量存放n的阶乘的值*/printf(Input n:);scanf(%d,/*返回fac的函数值*/,33,解析C程序设计第5章 模块化程序设计,2023/4/4,函数的递归调用,在函数调用中,如果直接或间接地调用该函数本身,称为递归调用。递归有时也称为循环定义。递归又分为:直接递归调用,即函数直接调用自身。和间接调用,即函数互相调用对方。,int f(int x)int y,z;z=f(y);.return(2*z);,34,解析C程序设计第5章 模块化程序设计,2023/4/4,递归调用的说明,上述两种递归调用都是无终止的自身调用。程序中不应出现

20、无终止调用,而只应出现有限次数的有终止的递归调用。可以使用if语句来控制。在递归程序中:由递归方式与递归终止条件两部分组成。即一个递归的问题可以分为:首先“回推”,然后“递推”。在递归过程中,必须具有一个结束递归过程的条件。,35,解析C程序设计第5章 模块化程序设计,2023/4/4,递归调用的说明,C编译系统对递归函数的自调用次数没有限制。每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出。,36,解析C程序设计第5章 模块化程序设计,2023/4/4,由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较

21、低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。,37,解析C程序设计第5章 模块化程序设计,2023/4/4,递归形式,当有函数返回值时,通用的递归函数体表述如下:if(递归结束条件)return(递归公式的初值);else return(递归函数调用返回的结果值);有时递归函数并不返回任何值,只是输出显示结果。有时递归子问题和原问题的形式并不完全相同,这时必须把问题作一个小的变化,使得递归子问题与原问题完全相同。,38,解析C程序设计第5章 模块化程序设计,2023/4/4,5.2 Hanoi(汉诺)塔问题,例5-4 编程求解Hanoi(汉诺)塔问题。古代有一个梵塔,

22、塔内有三个柱子A、B、C,僧侣们想把A拄子上的一摞盘子移动到C柱子上。最初A拄子上有大小不等的64个盘子,且小的在上,大的在下。在移动过程中,大盘子只能在下,小盘子只能在上,并且每次只能移动一个盘子,可以借助于B柱子。,39,解析C程序设计第5章 模块化程序设计,2023/4/4,问题的分析,Hanoi(汉诺)塔问题是一个古典的数学问题,任何一个人都不可能使用传统的方法直接写出移动盘子的每一个具体步骤,僧侣们也无法解决这个问题。解决Hanoi(汉诺)塔问题的方法可以表述如下:老和尚移动64个盘子的步骤第1步,请第2个和尚将前63个盘子从A柱子移到B柱子;第2步,自己将最下面的第64个盘子从A柱

23、子移到C柱子;第3步,再请第2个和尚将63个盘子从B柱子移到C柱子。第2个和尚移动63个盘子的步骤第1步,请第3个和尚将前62个盘子从A柱子移到C柱子;第2步,自己将最下面的第63个盘子从A柱子移到B柱子;第3步,再请第3个和尚将62个盘子从C柱子移到B柱子。依此类推,直到第63个和尚完成了2个盘子的移动,最后由第64个和尚完成1个盘子的移动。这个过程称之为“回推”过程。,40,解析C程序设计第5章 模块化程序设计,2023/4/4,问题的分析,当第64个和尚完成1个盘子的移动后,第63个和尚就可以完成2个盘子的移动,最后第1个和尚完成64个盘子的移动。这个过程称之为“递推”过程。“回推”和“

24、递推”两个过程构成了“递归”问题的两个阶段。如果要求递归过程在有限步骤内,就必须有一个结束递归过程的条件。Hanoi(汉诺)塔问题就是第64个和尚可以一次性的完成盘子的移动,Hanoi(汉诺)塔问题只有采用递归方法才能非常容易的、有效的得到解决。,41,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-4汉诺塔问题的实现,用A、B、C分别表示Hanoi(汉诺)塔中的三个柱子,1n表示n个盘子,最上面的编号为1,最下面的编号为n。首先设计一个函数move完成将第k个盘子从A柱子移动到C柱子,即模拟和尚自己移动一个盘子。move(int no,char from,char to);整型

25、变量no表示盘子的编号,字符型变量from表示源柱子,字符型变量to表示目的柱子。再设计一个函数hanoi完成将n个盘子从A柱子移动到C柱子,即和尚请另外一个和尚移动盘子的过程。hanoi(int n,char A,char B,char C);表示借助B柱子将n个盘子从A柱子移动到C柱子。将n个盘子借助B柱子从A柱子移动到C柱子,可以使用三个步骤实现:步骤1:hanoi(n-1,A,C,B);/*借助C柱子将n-1个盘子从A移到B*/步骤2:move(n,A,C);/*将第n个盘子从A柱子移动到C柱子*/步骤3:hanoi(n-1,B,A,C);/*借助A柱子将n-1个盘子从B移到C*/,4

26、2,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-4程序,/*LI5_4.c*/#include/*包含头文件*/void move(int no,char from,char to);/*自定义函数的声明*/void hanoi(int n,char A,char B,char C);/*自定义函数的声明*/void main()/*主函数,无参数,无返回值*/int n;/*定义整型变量n,存放盘子总数*/printf(Input the number of diskes:);/*提示输入n的值*/scanf(%d,/*定义函数:借助B柱子将n个盘子从A柱子移动到C柱子 i

27、nt n:表示n个盘子 char A:表示A柱子 char B:表示B柱子 char C:表示C柱子*/void hanoi(int n,char A,char B,char C)if(n=1)move(n,A,C);else hanoi(n-1,A,C,B);move(n,A,C);hanoi(n-1,B,A,C);,43,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-4程序说明,本程序递归函数没有返回值,只是完成了三个步骤,并将结果输出显示在屏幕上。在本程序中,递归结束条件是当n=1时所执行的移动1个盘子的函数;递归方式是先将n-1个盘子移动到B柱子,再将第n个盘子移动到C

28、柱子,最后将n-1个盘子移动到C柱子。本程序没有明确的递归公式,也没有初值和递归函数的返回值。本程序中move函数并未真正移动盘子,只是打印出移动盘子的方案。,44,解析C程序设计第5章 模块化程序设计,2023/4/4,课堂练习,用递归方法求解斐波纳契(Fibonacci)数列。,45,解析C程序设计第5章 模块化程序设计,2023/4/4,【例5-7】用递归方法求解斐波那契(Fibonacci)数列斐波那契数列:0,1,1,2,3,5,8,13,21,34,。第n项的递归公式为:,【分析】由公式可以看出,第n项斐波那契数列值是前2项的和,这就是递归方式;而当n=0和1时,斐波那契数列就是n

29、值本身,这就是递归结束条件。,46,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-6程序,/*LI5_6.c*/#include void main()long fib(int n);/*自定义函数声明*/long s;/*第 i 项斐波那契数列的值*/int i=0;/*斐波那契数列某项的序号*/do s=fib(i);/*求斐波那契数列第 i 项*/printf(Fib(%d)=%ldn,i,s);/*显示斐波那契数列第 i 项的值*/printf(Input Fibonacci Number:);scanf(%d,/*求斐波那契数列的递归方式*/,47,解析C程序设计第5

30、章 模块化程序设计,2023/4/4,例5-6程序说明,本例中自定义函数的声明long fib(int n);放在main函数中,因此,fib函数只能在main函数中使用,在其他函数中使用时还需要再次声明。Fibonacci数列递归调用的次数随项数的增多而呈指数级数的增长。每次递归调用fib函数时,都要调用该函数两次。即计算n个Fibonacci数列的值,递归调用的次数为2n。计算第20项的Fibonacci数需要递归调用的次数为220(大约100万次),计算第4项则只需要16次。这种现象称为指数复杂度。虽然程序的算法简单,但计算的复杂度会随着n的增加而呈指数级增长。,48,解析C程序设计第5

31、章 模块化程序设计,2023/4/4,举一反三,例5-7 用递归法编写一函数将一个整数n转换成若干字符显示在屏幕上。例如整数-258转换成4个字符“-258”显示。【分析】如果整数为正数,如258,显示时不需要符号,而为负数时,则需要负号“”。每位数字转换成字符时,只需要将数字加上字符“0”即可;而将数字字符转换成数字时,只需要将数字字符减去字符“0”即可。如:字符9要变成数字9,只需要作9-0运算,即:9=9-0;数字9要变成字符9,只需要作0+9运算,即:9=0+9。n/10是将n缩小10倍,为求n的十位数作准备,n%10是求n的个位数,如此循环(递归),可以将n的每位数字求出。,49,解

32、析C程序设计第5章 模块化程序设计,2023/4/4,例5-7程序,/*LI5_7.c*/#include void convert(int n);void main()int number;printf(Input number:);scanf(%d,/*显示各位数字*/,50,解析C程序设计第5章 模块化程序设计,2023/4/4,思考题,例5-7在主函数main中定义了变量number表示输入的数,而在递归函数convert中定义变量i表示下次递归的新数,这里能不能在convert函数中再次定义number变量呢?而在递归函数convert中使用convert(i);语句实现了递归调用,

33、那么每次调用时都是使用的是变量i,它与上次的i值是否有冲突呢?,答:这个问题在第3章中已经讲述。它属于变量的作用域问题。,51,解析C程序设计第5章 模块化程序设计,2023/4/4,应用实例,例5-8:求两个数的最大公约数和最小公倍数。【分析】最大公约数(或称最大公因子)是能够同时被两个数整除的最大数,其性质为:如果ab,则a和b的最大公约数与a-b和b的最大公约数相同;如果ba,则a和b的最大公约数与a和b-a的最大公约数相同;如果a=b,则a和b的最大公约数与a值和b值相同。换句话说,最大公约数是最后能使余数为0的被除数。最小公倍数为:两数相乘,再除以最大公约数。,52,解析C程序设计第

34、5章 模块化程序设计,2023/4/4,解法一:穷举法,/*LI5_8_1.c*/#include#include int hcf(int u,int v);int lcd(int u,int v,int h);void main()int n1,n2,h,l;clrscr();/*清屏*/scanf(%d,%d,53,解析C程序设计第5章 模块化程序设计,2023/4/4,解法二:辗转相除法,54,解析C程序设计第5章 模块化程序设计,2023/4/4,解法二:辗转相除法,/*LI5_8_2.c*/#include#include int hcf(int u,int v);int lcd(i

35、nt u,int v,int h);void main()int n1,n2,h,l;clrscr();scanf(%d,%d,55,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-10,计算,的前20项和。,【分析】编写两个函数f1和f2。f1用来计算每项分子的值,可以用static变量来存放上一次的值,以便计算当前值;f2用来计算每项分母的值,可以使用递归调用方式求解。,56,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-10程序,/*LI5_10.c*/#include#include float f1(int x);float f2(int n);void

36、 main()float exp=1.0;int x,n;clrscr();printf(Input a number:);scanf(%d,57,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-11输入年份并输出当年的日历,【分析】在主函数中,首先需要执行输入年份的函数,再执行输出该年份日历的函数。在输出年份日历函数中,使用循环打印12个月每个月的日历信息。而每个月的日历信息又要调用很多函数,如:每月的天数、每月第一天是星期几等函数。本程序的关键在于:计算出每月的天数、确定每月的第一天是星期几、缩排月历的第一行使得第一天出现在正确的位置上。程序以1900年1月1日是星期一为参考

37、点,从这天开始,按是否为闰年,每年加365天或366天;对于当年的要处理的月份之前的月,加上这个月的天数;用除以7取模计算1900年以后的某一天是星期几。,58,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-11程序与结果,例5-11的程序详见教材。,59,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-11程序说明,本例所定义的char*monthname(int month)函数,表示其函数返回值为char*型数据,它是字符指针数据,表示返回一个字符串。这个知识点将在后续章节中介绍。,60,解析C程序设计第5章 模块化程序设计,2023/4/4,例5-11程序

38、调用关系,61,解析C程序设计第5章 模块化程序设计,2023/4/4,思考题,例5-11中所要用到的年、月、日三个变量能不能作为一个整体来考虑呢?一年12个月的天数又能不能用一个数据来表示呢?这就是我们将在下一章要介绍的内容。,年、月、日三个数据可以使用结构体来表示一年12个月的天数可以使用数组来表示,62,解析C程序设计第5章 模块化程序设计,2023/4/4,建 议,学好程序设计语言的唯一途径是 上机练习你的编程能力与你在计算机上调试程序投入的时间成正比,63,解析C程序设计第5章 模块化程序设计,2023/4/4,第一次课后作业,1阅读教材第5章2习题5.1、习题5.3、习题5.13,

39、64,解析C程序设计第5章 模块化程序设计,2023/4/4,第一次课后思考题,【思考题5-3】求n!可以使用123n形式。而n!又可以写成n!(n-1)!n表达式,细心观察一下就知道,求n!时,它又要用到(n-1)!的值。那么,能不能在编写n!函数时再调用自身函数求(n-1)!,而只是改变参数值,从而求出n!值呢?,65,解析C程序设计第5章 模块化程序设计,2023/4/4,第二次课后作业,1阅读教材第5章2习题5.2、习题5.4、习题5.11,66,解析C程序设计第5章 模块化程序设计,2023/4/4,第二次课后思考题,【思考题5-9】本例中用到的年、月、日三个变量能不能作为一个整体来考虑呢?一年12个月的天数能不能用一个数据来表示呢?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号