- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务6-3、工资发放时币额数量的计算
C语言程序设计与项目实践 清华大学出版社 模块化与团队协作 ———模块化程序设计 项目6 回顾与作业点评 1、如何实现多人合作开发 2、如何实现数据与函数的共享 预习检查 函数嵌套 什么叫递归 目标 掌握函数的嵌套 掌握递归调用的编程方法 项目任务 任务6-3、工资发放时币额数量的计算 1、如何根据发放工资计算相应币种的数量,以便保证工资的正常发放。 2、如何实现模块的细化?如何实现函数嵌套调用? 函数嵌套调用 C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。 C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。 void reverse() { :::::::::: :::::::::: } #includestdio.h void main() { ::::::::: fun(); :::::::: :::::::: } void fun() { :::::::: reverse(); :::::::: } 函数嵌套调用 从一个函数调用另一个函数称为函数的嵌套调用 函数嵌套调用 【案例6-18】求1k +2k+3K+…+nK 分析: 编写两个函数powers(m,n)求m------- n 以及求add(a,b)a个a b (a=1—n)之和。Main()函数,调用add函数。其函数之间的调用关系如图6-10所示 函数嵌套调用 #includestdio.h void main() { int n=6,k=4; long sum; sum=add(k,n); printf(sum=%ld,sum); } long add(int a,int b) { int i; long s=0; for(i=1;i=b;i++) s+=powers(i,a); return s; } long powers(int m,int n) { int j; long p=1; for (j=1;j=n;j++) p=p*m; return p; } 函数递归调用 函数的递归调用是指调用一个函数的过程中,直接或间接的调用该函数自身,这种函数称为递归调用。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。 递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。 函数递归调用 递归函数要避免死循环,编写递归调用程序时,必须在递归调用语句到前面写上终止递归到条件,常常采用 如下的形式: 在编写递归函数时,必须注意: (1)如何实现递归,递归算法的描述。 (2)递归的结束条件。 if(条件) //终止递归 else …递归调用 递归 【案例6-19】用递归法计算n! 分析:求n!可用下面的递推公式表示: 这里递归的结束条件n=0或n=1,递归算法:n!=n*(n-1)!. /* 此函数用于计算 a 的阶乘 */ int fact(int a) { if (a == 1) return 1; else { a = a * fact(a-1); return a; } } 函数递归调用 在一个函数体内调用自身称为函数的递归调用 void main() { int n; long y; printf(\n输入一个整数:); scanf(%d,n); y=fact(n); printf(%d!=%ld\n,n,y); } 递归 递归调用到过程如图6-11: (1)递归过程。将原始问题求n!不断转化为规模小一级(n-1)!的新问题,从未知向已知推进即当n=1时,n!=1。最终达到递归终结条件 (2)回溯过程。从已知条件出发(1!=1),沿递归的逆过程,逐一求值返回,直至递归初始处,完成到递归结束条件。 任务分析与实施 任务需求 某单位发放职工工资时,需要根据职工工资总额计算出各种面值币额的数量,即根据键盘输入的工资总额,分别计算100元币、50元币、10元币、5元币、2元币、1元币的数量。以此作为工资发放依据。 任务分析与实施 任务分析 我们将问题分解为四个模块:统计模块Total()、输入模块Input()、计算模块calculate()、显示模块Display()它们之间的调用关系如图6-12a,其程序处理流程如图b (1)输入模块:input():实现工资数据的输
文档评论(0)