第5章函数省公共课一等奖全国赛课获奖课件.pptx
《第5章函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《第5章函数省公共课一等奖全国赛课获奖课件.pptx(66页珍藏版)》请在咨信网上搜索。
1、第第5章章 函数函数5.1 函数概述函数概述5.2 函数定义、调用与说明函数定义、调用与说明5.3 函数间参数传递函数间参数传递5.4 内联函数内联函数5.5 递归函数递归函数5.6 函数重载函数重载5.7 函数模板函数模板5.8 作用域与存放类别作用域与存放类别5.9 应用举例应用举例第1页5.1 函数概述函数概述xyz5.1.1 引例引例 已知五边形各条边长度,计算其面积已知五边形各条边长度,计算其面积。计算多边形面积,可将多边形分解成若干个三角形。计算多边形面积,可将多边形分解成若干个三角形。计算多边形面积,可将多边形分解成若干个三角形。计算多边形面积,可将多边形分解成若干个三角形。计算
2、三角形面积公式以下:计算三角形面积公式以下:计算三角形面积公式以下:计算三角形面积公式以下:第2页用前面所学知识实现:用前面所学知识实现:#include math.h#include iostream.hvoid main()float a,b,c,d,e,f,g,p1,p2,p3,s1,s2,s3,s;cinabcdefg;p1=(a+b+c)/2;s1=sqrt(p1*(p1-a)*(p1-b)*(p1-c);p2=(c+d+e)/2;s2=sqrt(p2*(p2-c)*(p2-d)*(p2-e);p3=(e+f+g)/2;s3=sqrt(p3*(p3-e)*(p3-f)*(p3-g);
3、s=s1+s2+s3;coutsabcdefg;cinabcdefg;s=area(a,b,c)+area(c,d,e)+area(e,f,g);s=area(a,b,c)+area(c,d,e)+area(e,f,g);coutsendl;coutsy)z=x;else z=y;return z;/将大数返回将大数返回void main()int a,b,c,m;cinabc;m=max(a,b);m=max(c,m);coutmendl;第6页【例【例5.2】编一程序,输出如右图形。编一程序,输出如右图形。#include#include void pic(int n)for(int i=
4、0;in;i+)coutsetw(10-i);/cout.width(10-i);控制每行输出起始位控制每行输出起始位 for(int j=0;j2*i+1;j+)cout*;coutendl;void main()pic(4);pic(6);将将n行组成三角形独立出来编一函数:行组成三角形独立出来编一函数:第7页说明:函数类型指函数返回值数据类型对没有返回值函数,函数类型定为void型(无类型或空类型)。形式参数可认为空,但圆括号不能省略。函数体由语句和其它分程序组成。函数体中不允许再嵌套定义函数vv非非非非voidvoid型函数型函数型函数型函数函数体中必须有函数体中必须有函数体中必须有函
5、数体中必须有returnreturn语句,形式为:语句,形式为:语句,形式为:语句,形式为:return return 表示式表示式表示式表示式;或或或或 return (return (表示式表示式表示式表示式););用于返回函数值。表示式值类型与函数类型最好一致。用于返回函数值。表示式值类型与函数类型最好一致。用于返回函数值。表示式值类型与函数类型最好一致。用于返回函数值。表示式值类型与函数类型最好一致。vvvoidvoid型函数型函数型函数型函数函数体中函数体中函数体中函数体中returnreturn语句能够不出现。若出现语句能够不出现。若出现语句能够不出现。若出现语句能够不出现。若出现
6、,则不能带表示式。则不能带表示式。则不能带表示式。则不能带表示式。第8页5.2.2 函数调用函数调用注意:注意:实参加形参个数、位置与类型必须一致。它能够是同类型常实参加形参个数、位置与类型必须一致。它能够是同类型常量、变量或表示式。量、变量或表示式。调用形式能够是表示式,也能够是语句。调用形式能够是表示式,也能够是语句。函数定义中形参只有当发生函数调用时,才被分配内存单元。函数定义中形参只有当发生函数调用时,才被分配内存单元。形式:形式:函数名函数名(实在参数表实在参数表)函数调用过程:函数调用过程:第9页#include iostream.h#include iomanip.hvoid m
7、ain()pic(4);/以语句形式调用以语句形式调用 pic(6);void pic(int n)for(int i=0;in;i+)coutsetw(10-i);for(int j=0;j2*i+1;j+)cout*;coutmn;coutgcd(m,n)endl;coutsct(m,n)ab;c=max(a,b);coutcy?x:y;【例【例5.4】函数说明示例函数说明示例 可省略参数名可省略参数名注意:注意:函数调用在前,定义在后,则必须对函函数调用在前,定义在后,则必须对函数进行说明,函数说明能够放在函数调用数进行说明,函数说明能够放在函数调用之前所在函数内,也能够放在源文件开头、
8、之前所在函数内,也能够放在源文件开头、函数外部。函数外部。函数说明和函数定义在返回类型、函数函数说明和函数定义在返回类型、函数名和参数表上必须要完全一致。名和参数表上必须要完全一致。5.2.3 函数说明(函数原型函数说明(函数原型)第14页float *fun(float x,float y);char *strcat(char*strDest,const char*strSource);在说明或定义返回值为指针函数时,只须在函数名前在说明或定义返回值为指针函数时,只须在函数名前加一指针类型说明符即可。加一指针类型说明符即可。即即即即函函函函数数数数返返返返回回回回值值值值能能能能够够够够是是
9、是是变变变变量量量量地地地地址址址址、数数数数组组组组名名名名或或或或指指指指针针针针变变变变量量量量等。如:等。如:等。如:等。如:5.2.4 函数返回值为指针函数返回值为指针第15页【例【例5.11】拼接两个字符串拼接两个字符串s1和和s2,将拼接后字符串存于,将拼接后字符串存于s1中返中返回。回。char*strcat1(char*s1,const char*s2)char*p=s1;while(*p+);-p;while(*p+=*s2+);return(s1);思索思索:若不定义为返回指针值函数,则程序应怎样修改?若不定义为返回指针值函数,则程序应怎样修改?void main()ch
10、ar*p1,*p2;p1=new char20;p2=new char5;cinp1p2;coutstrcat1(p1,p2)endl;第16页注意:注意:不能返回一个局部变量不能返回一个局部变量(在函数内定义变量在函数内定义变量)地址地址#include iostream.hint*fun(int x)int y=x*x;return&y;void main()int a=5,*p;p=fun(a);coutxy;swap(x,y);cout“x=x y=yab;swap(&a,&b);coutabendl;void swap(int*x,int*y)int temp=*x;*x=*y;*y
11、=temp;第22页【例【例5.9】随机生成随机生成10个个1100之间数放在一维数组中,求之间数放在一维数组中,求其平均值及最大元素值其平均值及最大元素值。#include iostream.h#include stdlib.hconst int N=10;void fun(float*p,float*p1,int*p2)float sum,max1;sum=max1=*p+;for(int i=1;iN;i+)if(max1*p)max1=*p;sum=sum+*p;p+;*p1=sum/N;*p2=max1;void main()float a10,aver,max,x;for(int
12、i=0;i10;i+)x=rand()%100+1;ai=x;fun(a,&aver,&max);/注意实参写法注意实参写法 coutavermaxendl;第23页【例【例5.10】字符串复制字符串复制#include iostream.hvoid copy_string(char*from,char*to)while(*from!=0)*to+=*from+;*to=0;void main()char a=I am a teacher.,b=You are a student.;coutaendlbendl;copy_string(a,b);coutaendlbab;copy_string
13、(a,b);couta bendl;delete a;delete b;若该二语句删除,若该二语句删除,程序运行时将异常程序运行时将异常终止。终止。第25页#include iostream.h int f(const int*p)int a=100;a=*p;return a;void main()int x=5;coutf(&x);*p=a;return*p;错误,不能修错误,不能修改改const对象对象 为了预防被调函数对实参所指对象修改,可将形参为了预防被调函数对实参所指对象修改,可将形参为了预防被调函数对实参所指对象修改,可将形参为了预防被调函数对实参所指对象修改,可将形参设为设为设
14、为设为常指针常指针常指针常指针。第26页若实参是常对象地址,则形参必须定义为常指针。若实参是常对象地址,则形参必须定义为常指针。#include iostream.hint f(const int*p)int a=100;a=*p;return a;void main()const int x=5;coutf(&x);形参不能定形参不能定义为义为int*p第27页(2)数组名作参数数组名作参数 形参:形参:数组名数组名 实参:实参:数组名或指针变量数组名或指针变量 特点:特点:在被调函数中对形参数组任何改变均会影响实参所在被调函数中对形参数组任何改变均会影响实参所指地址里内容指地址里内容。【例
15、【例5.12】对含有对含有n个元素整型数组个元素整型数组a,从大到小进行排序。,从大到小进行排序。调用:调用:sort(a,10);void sort(int x,int n)int i,j,k,w;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(xkxj)k=j;if(i!=k)w=xi;xi=xk;xk=w;数值型数组元素个数数值型数组元素个数普通须传给形参普通须传给形参第28页【例【例5.13】求字符串长度,并调用之。求字符串长度,并调用之。int len(char s)int i=0;while(si!=0)i+;return i;调用:调用:coutxy
16、;swap(x,y);cout x=xy=10&flag)/判断是否降序数判断是否降序数 if(x/10%10=x%10)x/=10;else flag=0;return flag;第32页函数在定义时预先给定一个缺省形函数在定义时预先给定一个缺省形参值,调用时给出优先。参值,调用时给出优先。5.3.2 函数参数缺省函数参数缺省#include iostream.h#include math.hdouble s(double x,double eps=1e-6)int n=1;double w=0.0,t=1.0;while(fabs(t)=eps)w+=t;t=t*x/(n+);return
17、 w;void main()couts1=s(2.0);couts2=s(3.0);couts3=y?x:y;return xy?x:y;void main()void main()coutmyMax(3,6)endl;coutmyMax(3,6)endl;关关关关键键键键字字字字inlineinline将将将将函函函函数数数数myMaxmyMax说说说说明明明明成成成成内内内内联联联联函函函函数数数数。其其其其使使使使用用用用方方方方式式式式和和和和普普普普通通通通函函函函数数数数一一一一样样样样,只只只只不不不不过过过过在在在在程程程程序序序序执执执执行行行行时时时时并并并并不不不不产产产
18、产生生生生函函函函数数数数调调调调用用用用,而而而而是是是是在在在在函函函函数数数数调调调调用用用用处处处处将将将将函函函函数数数数代代代代码码码码展展展展开开开开执执执执行行行行。内内内内联联联联函函函函数数数数定定定定义义义义必必必必须须须须出出出出现现现现在在在在内联函数第一次被调用之前。内联函数第一次被调用之前。内联函数第一次被调用之前。内联函数第一次被调用之前。当当当当然然然然,内内内内联联联联函函函函数数数数也也也也有有有有一一一一定定定定不不不不足足足足,就就就就是是是是函函函函数数数数中中中中代代代代码码码码不不不不能能能能太太太太多多多多,函数体内不能有循环语句和函数体内不能
19、有循环语句和函数体内不能有循环语句和函数体内不能有循环语句和switchswitch语句,结构也不能太复杂。语句,结构也不能太复杂。语句,结构也不能太复杂。语句,结构也不能太复杂。C+C+中之所以引入内联函数,这与宏函数固有缺点相关。中之所以引入内联函数,这与宏函数固有缺点相关。中之所以引入内联函数,这与宏函数固有缺点相关。中之所以引入内联函数,这与宏函数固有缺点相关。第36页5.5 递归函数递归函数 用本身结构来描述本身就称为递归用本身结构来描述本身就称为递归(直接直接、间接间接)。最经典例子是对阶乘运算:最经典例子是对阶乘运算:n!=n(n-1)!(n-1)!=(n-1)(n-2)!1!=
20、1 特点:特点:原始问题可转化为处理方法相同新问题;原始问题可转化为处理方法相同新问题;新问题规模比原始问题小;新问题规模比原始问题小;新新问问题题又又可可转转化化为为处处理理方方法法相相同同规规模模更更小小新新问问题题,直直至至终止条件为止。终止条件为止。第37页fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)【例【例5.15】编编fac(n)=n!递归函数递归函数long fac(int n)if(n=1)return(1);return(n*fac(n-1);递推过程递推
21、过程:每调用本身,当前参数压栈,直到抵达递归结束条件。每调用本身,当前参数压栈,直到抵达递归结束条件。回归过程回归过程:不停从栈中弹出当前参数,直到栈空。不停从栈中弹出当前参数,直到栈空。思思索索:若若fac函函数数中中没没有有语语句句 if(n=1)return(1);程程序序运运行行结结果果将将怎怎样样?递推递推回归回归第38页【例【例5.16】用递归函数实现将一个十进制整数转换成二至十用递归函数实现将一个十进制整数转换成二至十六任意进制字符六任意进制字符 void convert(int m,int r)char b17=0123456789ABCDEF;if(m!=0)convert(
22、m/r,r);cout0)px(x,n)=x n=1x*(1-px(x,n-1)n1#include iostream.hdouble px(double x,int n)if(n=1)return(x);else return(x*(1-px(x,n-1);void main()double x;int n;coutxn;coutpx=px(x,n)endl;第40页【例【例5.18】输入一个正整数,要求用递归方法实现以相反次输入一个正整数,要求用递归方法实现以相反次序输出该数。序输出该数。#include iostream.hvoid printn(int n)if(0=n&n=9)cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。