版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C语言程序设计》教案课程名称C语言程序设计任课教师总课时64教学课题求小组若干门课程的总分及平均分授课班级授课日期课时2教学目标知识目标:1.掌握函数的嵌套调用的方法2.掌握函数的递归调用的方法能力目标:能够使用函数实现多个学生多门课成绩的排序素质目标:团队合作能力、团队互助,自我学习的习惯、爱好和能力重点难点嵌套调用和递归调用教学方法演示、讲解、启发教学资源教材《C语言程序设计》设备准备VC++6.0,极域电子教室软件,分发工作任务单教学环节(教学过程)教学内容教师活动学生活动教学目标课时1发布任务进行任务的问题描述和分析倾听、思考让学生理解任务要求和思路10分钟2理论讲解讲授函数调用倾听、思考预备需要的理论知识15分钟3举例通过一个案例进一步讲解函数的调用倾听、思考通过实际应用帮助学生理解理论知识20分钟4应用布置两个相关题目思考、解答通过做相关练习题帮助学生更好的理解相关知识45分钟教学内容(详细):一.函数的嵌套调用C语言定义的函数都是互相独立的,函数间不能嵌套定义,即在一个函数体内不能再定义另一个函数,但可以嵌套调用,也就是说在调用一个函数的过程中,该函数又调用另一个函数。【例7-7】输入两个数,编写函数,分别求该两数的最大公约数和最小公倍数,在主函数中输入两个数,调用函数,输出公倍数和公约数。问题分析问题分析算法设计首先需要两个自定义函数,分别用来求两数的最大公约数和最小公倍数。在主函数中输入两整数,作为实参调用函数。算法设计(1)定义2个整型变量m和n。(2)以整型变量作实参调用函数。(3)输出公约数和公倍数。求公约数的算法:定义一个循环变量,循环范围从2个整型变量中较小值~1。循环判断该两个整型变量能否整除循环变量,如果能整除,则返回循环变量的值,否则继续循环。求公倍数的算法:定义1个变量存储公倍数。公倍数等于两个数的乘积除以公约数。返回公倍数。传统流程图传统流程图图7-15最大公约数、最小公倍数和主函数流程图程序代码程序代码#include<stdio.h>intfnMax(intn,intm){inti;for(i=n;i>=1;i--)if(m%i==0&&n%i==0)returni;}longfnMin(intn,intm){longi;i=m*n/fnMax(n,m);returni;}voidmain(){intiNum1,iNum2;intiMax;longiMin;printf("\nInputtwonumber:");scanf("%d%d",&iNum1,&iNum2);iMax=fnMax(iNum1,iNum2);iMin=fnMin(iNum1,iNum2);printf("thecommondivisoris%d,thecommonmultipleis%ld",iMax,iMin);}程序执行的结果为:说明说明(1)程序中main()函数调用fnMax()、fnMin()函数完成求最大公约数和最小公倍数的任务,fnMin()函数调用fnMax()函数计算最小公倍数。在执行fnMin()函数时又调用fnMax()函数,即为函数的嵌套调用。main()函数fnMax()函数fnMin()函数(2)无论函数在何处调用,调用结束后都会返回到调用该函数的地方。本例main()函数、fnMin()函数和fnMax()函数调用关系如图7-16所示。main()函数fnMax()函数fnMin()函数voidfnMax(intn,intm){返回函数的值voidfnMax(intn,intm){返回函数的值}voidfnMin(intn,intm){i=m*n/fnMax(n,m);返回函数的值}voidmain(){fnMin(iNum1,iNum2)}③②③②④①④①⑤⑧⑤⑧⑦⑨⑦⑨⑥⑥二.函数的递归调用在调用一个函数的过程中又直接地或间接地调用该函数本身,称为函数的递归调用。显然,递归调用是嵌套调用的特例。C语言提供两种形式的递归调用:直接递归调用:指函数直接调用函数本身的形式,其执行过程如图7-17所示。间接递归调用:指函数调用其他函数,其他函数又调用原函数的形式,其执行过程如图7-17所示。图7-17执行过程1.函数递归调用的条件可采用递归算法解决的问题有这样的特点:原始的问题可转化为解决方法相同的新问题,而新问题的规模要比原始问题小,新问题又可转化为规模更小的问题,直至最终归结到最基本的情况——递归的终结条件。利用函数递归调用解决问题,必须具备如下两个条件:(1)原问题求解,能转化为一个与原问题相似的较小的问题求解。(2)必须有一个明确的递归结束条件,称为递归出口。【例7-8】用递归调用的方法,编写计算n!的程序。问题分析问题分析根据阶乘的定义有如下递推关系:n!=1*2*3*…*(n-2)*(n-1)*n=[1*2*3*…*(n-2)*(n-1)]*n=(n-1)!*n由上面的关系可知计算n的阶乘问题,可以归结为n-1的阶乘问题。同理,计算n-1的阶乘问题可以归结为n-2的阶乘问题……依此类推,最终将归结为计算1的阶乘。所以计算n!n!=n!=1n=1n*(n-1)n>1fact(n)1当n=1fact(n)1当n=1n*fact(n-1)当n>1程序代码程序代码#include<stdio.h>longfact(intn); /*函数fact()声明*/longfact(intn)/*递归函数*/{if(n<=1)return1;/*终止条件*/return(fact(n-1)*n);/*递归调用*/}voidmain(){ intnum; longm;printf("请输入一个正整数(小于12):");scanf("%d",&num); m=fact(num);printf("%d!=%ld\n",num,m);}程序执行的结果为:说明说明(1)这是一个递归调用的函数。四次调用和返回的情况如图7-所示。第一次调用函数:fact(4)24最终得到结果24第一次调用函数:fact(4)24最终得到结果24第二次调用函数:fact(3)*46*4计算fact(4)=24第三次调用函数:fact(2)*32*3计算fact(3)=6四次调用函数:fact(1)*21*2计算fact(2)=2fact(1)=1图7-16递归函数fact(n)的执行过程(2)该程序运行时,当n取值较大时,比如n=10时,n!的值超出了int和long的取值范围,因此,此题中的变量建议定义成float类型。2.函数递归调用的执行过程在函数执行过程中由递推和回归两个过程组成。(1)“递推”阶段:将原问题不断地分解为新的子问题,逐步从未知的方向向已知方向推测,最终达到已知的结束条件,即递归结束条件,这时递推阶段结束,如图7-14所示左边部分。(2)“回归”阶段:从已知的条件出发,按照“递推”的逆过程,逐一求值返回,直到返回到递推的开始处,结束回归阶段,完成递归调用。如图7-14所示右边部分。三.多个学生多门课成绩的排序参考代码如下:#include"stdio.h"/*输出线条函数*/ppp()#include"stdio.h"{printf("-------------------------------------\n");}/*某个小组若干门课程的平均分与总分函数*/voidavgevery(intn,intkm){intx,i,j;floats,avg;for(j=1;j<=km;j++){s=0;printf("请输入本小组第%d门考试成绩\n",j);ppp();for(i=1;i<=n;i++){scanf("%d",&x);s+=x;}avg=s/n;printf("第%d课程的总分=%.0f\t平均分=%.1f\n",j,s,avg);ppp();}}/*主函数*/main(){intk,n,km;floatsum,average;charch;ppp();printf("\t班级成绩统计\n");ppp();printf("1、统计小组一门课程的总分及平均分\n",n);printf("2、统计小组若干门课程的总分及平均分\n");printf("3、输出小组排序后三门课程的成绩单\n");printf("请输入1~3之间的一个数:");scanf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024届高三历史统编版二轮复习:中华传统文化的内涵与特点 专项练习(解析版)
- 淮阴工学院《建筑设计Ⅴ》2022-2023学年第一学期期末试卷
- 淮阴工学院《基础工程》2021-2022学年第一学期期末试卷
- 淮阴工学院《化工分离工程》2022-2023学年第一学期期末试卷
- 水利工程勘察设计行业相关投资计划提议范本
- 铁路道岔相关项目投资计划书
- 闲置物品调剂回收行业相关投资计划提议范本
- 城市管理智能化解决方案
- 餐饮业顾客接待疫情防控措施方案
- 餐饮行业充值卡销售合同协议书
- 砍伐工程方案35963
- 《大医精诚》说课(新)
- 牛羊屠宰管理办法
- 《微观经济学》课程思政教学案例(一等奖)
- DBJ50T-232-2016 建设工程监理工作规程
- 国际人力资源管理课程教学大纲
- 深信服园区级双活数据中心
- T-CSCS 016-2021 钢结构制造技术标准
- DB37∕T 5031-2015 SMC玻璃钢检查井应用技术规程
- 回弹强度对应表
- DB32T 3713-2020 高速公路建设工程施工班组管理规范
评论
0/150
提交评论