




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11讲函数应用,数学计算机科学系,第11讲函数应用,本讲主要内容一、函数的嵌套调用二、函数的递归调用1.公式递归问题2.过程递归问题三、数组作为函数的参数1.数组元素作为函数参数2.数组名作为函数参数,函数定义、声明、调用要点:,1.形参个数及类型;2.需要不需要返回值;3.当有返回值时,其类型决定函数类型;4.函数体中使用的变量可根据需要随时增减。,函数定义,函数声明,1.声明语句出现在主调函数中;2.声明中可省略形参名,但不能省略形参类型;3.何时可省略声明语句。,函数调用,1.函数调用出现在主调函数中;2.调用形式为:函数名(实参列表);3.要明确是传值调用(单向)还是传址调用(双向)。,返回,一、函数的嵌套调用,1.函数的嵌套,函数嵌套是指在一个自定义函数的函数体中,又出现了另外自定义函数的调用。如函数a调用函数b,函数b又调用函数c等。,例10-1:已知组合数:,求对于任意m、n时的值。,返回,2.函数的嵌套举例,例10-1:已知组合数,floatfac(intk)inti;floatf;for(i=1,f=1;i=k;i+)f*=i;return(f);floatcmn(intm,intn)floatres;res=fac(m)/(fac(n)*fac(m-n);return(res);main()intm,n;floatt;scanf(%d,%d,&m,&n);t=cmn(m,n);printf(C(%d,%d)=%fn,m,n,t);,求对于任意m、n时的值,求阶乘fac函数,cmn函数,主函数,调用了scanf()、cmn()、printf()函数,三次调用了fac()函数,返回,二、函数的递归调用,1.公式递归问题,例10-2用递归方法求:,基本过程分两步:写出递归公式;将递归公式函数化;,例10-3用递归方法求n!,2.过程递归问题,有的问题不能直接用一个递归公式进行描述,但处理过程包含了递归的思路,这一类问题称为过程递归。,最典型的过程递归问题汉诺塔问题!,返回,intsum(intn)if(n=1)return(1);elsereturn(sum(n-1)+n);,main()intn;scanf(%d,&n);printf(%dn,sum(n);,例10-2用递归方法求:,递归公式:,编写主调函数:,递归函数sum()的调用变化演示图,返回,intsum(intn)if(n=1)return(1);elsereturn(sum(n-1)+n);,递归函数sum的调用变化示意图,假设n=3,1,3,3,main()intn;scanf(%d,&n);printf(%dn,sum(n);,6,6,返回,例10-3用递归方法求n!,递归公式:,longfact(intn)if(n%c,src,dst);voidhanoi(intn,charsrc,charmid,chardst)voidmove_disk(char,char);if(n=1)move_disk(src,dst);return;hanoi(n-1,src,dst,mid);move_disk(src,dst);hanoi(n-1,mid,src,dst);,返回,三、数组作为函数的参数,1.数组元素作为函数参数,数组元素作为函数的参数时,只传送作为实参的数组元素,此时按使用其他简单变量的方法使用数组元素。值传递!,例10-5把一个整型数组的所有素数找出来。,2.一维数组名作为函数参数,数组名作为函数参数时传送的是数组的开始地址,是一种传址调用。形参数组和实参数组要在各自的函数中进行等同的定义。,例10-6数组排序。,例10-7求一维数组的最大元素值。,返回,数组元素作为函数参数值传递!,例10-5把一个整型数组的所有素数找出来。,判断素数的函数prime()#includemath.hintprime(intk)intsk,i;intflag=1;/*设置素数标志*/sk=sqrt(k);for(i=2;i=sk;i+)if(k%i=0)flag=0;/*k不是素数*/break;return(flag);,主函数main()intprime(int);inti,natural10;for(i=0;i10;i+)scanf(%d,&naturali);for(i=0;i10;i+)if(prime(naturali)printf(%d,naturali);printf(n);,返回,例10-6设计一个对一维数组排序的sort()函数,并调用它实现数组排序。,排序函数sort()voidsort(inta10)inti,j,temp;for(i=1;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,主函数main()voidsort(inta10);inti,data10;printf(data:);for(i=0;i10;i+)scanf(%d,&datai);sort(data);printf(rsult:);for(i=0;i10;i+)printf(%d,datai);,返回,例10-7求一维数组的最大元素值。,voidinput(int,float);floatv_max(int,float);main()floatarr50;input(10,arr);printf(MAX=%fn,v_max(10,arr);floatv_max(intn,floata)inti;floatmax=a0;for(i=1;in;i+)if(maxai)max=ai;return(max);,voidinput(intn,floata)inti;for(i=0;in;i+)scanf(%f,&ai);,返回,函数应用-小结,函数嵌套和函数递归是两个不同的概念,函数嵌套是指在定义一个函数时调用了其他的自定义函数,函数递归是指在定义一个函数时调用了被定义的函数本身。递归问题分为公式递归和过程递归两类,公式递归问题能够能够根据递归公式很容易获得,过程递归不能用公式描述,只能通过描述递归过程来实现,求阶乘问题是典型的公式递归问题,汉诺塔问题是典型的过程递归问题。数组元素作为函数的参数时,函数的定义与调用方法与简单变量作函数的参数没有区别,因为我们目前使用的数组元素本身就是一个简单变量。数组元素作实参,只是把实参的值传递给形参,被调函数里的语句改变形参的值并不能影响实参变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源管理师考试重点知识梳理
- 2025年公办中小学编制教师招聘生物模拟试卷及答案解析
- 2025年核试验反应堆及其配套产品合作协议书
- 2025年陶瓷过滤器、过滤管合作协议书
- 2025年参数测试仪器项目合作计划书
- 2025年形状记忆合金项目合作计划书
- 2025年自动化生产线成套装备项目合作计划书
- 期末测试(含答案)2025-2026学年人教版四年级数学上册
- 2025年中低压电缆连接件项目建议书
- 贵州省黔西南布依族苗族自治州兴义市2024-2025学年五年级下学期期末数学试题
- 药学知识与技能课件
- 主持人个人礼仪规范
- 2025年人教版《太阳》标准课件
- 老年患者的安全管理课件
- 教学课件:《公差配合与技术测量》
- 《天体和天体系统》课件
- 《生物制品连续制造指南》
- 2025年高压电工作业考试国家总局题库及答案(共280题)
- 给药错误的应急流程
- 交流电能表现场校验仪检定规程
- 复旦大学金融科技研究院发布-中国金融科技专利技术白皮书(2024年)
评论
0/150
提交评论