函数和作用域市公开课一等奖百校联赛特等奖课件.pptx
《函数和作用域市公开课一等奖百校联赛特等奖课件.pptx》由会员分享,可在线阅读,更多相关《函数和作用域市公开课一等奖百校联赛特等奖课件.pptx(74页珍藏版)》请在咨信网上搜索。
1、第四章第四章 函数和作用域函数和作用域函数定义和说明函数定义和说明函数调用函数调用函数参数函数参数内联函数内联函数函数重载函数重载函数嵌套调用和递归调用函数嵌套调用和递归调用作用域作用域C+C+系统函数系统函数第1页4.1 函数定义和说明函数定义和说明一、函数定义一、函数定义 ()函数返回值函数返回值类型类型第2页4.1 函数定义和说明函数定义和说明一、函数定义一、函数定义 ()函数标识函数标识第3页4.1 函数定义和说明函数定义和说明一、函数定义一、函数定义包含参数名和参数类型(无形参时,括号不可省)包含参数名和参数类型(无形参时,括号不可省)()函数调用时函数调用时形式参数形式参数第4页4
2、.1 函数定义和说明函数定义和说明一、函数定义一、函数定义 ()函数详细实现函数详细实现第5页例:例:int add(int x,int y)int z;z=x+y;return z;void nothing()第6页二、函数说明(申明)二、函数说明(申明)函数定义在后、调用在先,调用前必须说明;函数定义在后、调用在先,调用前必须说明;函数定义在先、调用在后,能够不加说明;函数定义在先、调用在后,能够不加说明;复杂调用中,常在程序头对全部被调用函数复杂调用中,常在程序头对全部被调用函数 一次性说明。一次性说明。();例:例:int add(int x,int y);原型说明原型说明第7页例例4
3、.2#include void fun1(),fun2(),fun3();void main()cout“It is in main.”endl;fun2();cout“It is back in main.”endl;void fun1()cout“It is in fun1.”endl;fun3();cout“It is back in fun1.”endl;void fun2()cout“It is in fun2.”endl;fun1();cout“It is back in fun2.”endl;void fun3()cout“It is in fun3.”endl;第8页4.2 函
4、数调用函数调用()void main()int a=3;int b=5;int c=add(a,b);/实参加形参个数相等,类型相同实参加形参个数相等,类型相同实参实参函数调用表示式值是函数调用表示式值是函数返回值函数返回值;函数调用表示式类型是函数调用表示式类型是函数类型函数类型;v 函数调用经过一个表示式实现:函数调用经过一个表示式实现:第9页return;或或 return;v 函数返回值经过函数返回值经过返回语句返回语句实现实现1)值作为函数返回值;值作为函数返回值;2)类型自动转换为函数类型;类型自动转换为函数类型;3)程序执行控制权转向调用函数;程序执行控制权转向调用函数;注:无返
5、回值函数用注:无返回值函数用“void”说明类型!说明类型!第10页一、函数传值调用一、函数传值调用1.传值调用传值调用将实参值拷贝一个副本给对应形参将实参值拷贝一个副本给对应形参;形参值改变不影响实参!形参值改变不影响实参!实参实参:常量、变量值或表示式值:常量、变量值或表示式值形参形参:变量:变量变量两种值:变量两种值:变量本身值变量本身值和和变量地址值变量地址值;传值调用分为:传值调用分为:传值调用传值调用和和传址调用传址调用;第11页例例4.3#include void swap1(int x,int y)int temp;temp=x;x=y;y=temp;/形参值交换形参值交换 c
6、out“x=”x“y=”yendl;void main()int a(5),b(9);swap1(a,b);cout“a=”a“b=”bendl;a=5,b=9x=9,y=5第12页将实参地址值赋给对应形参指针,使形参指将实参地址值赋给对应形参指针,使形参指针指向实参;针指向实参;经过改变形参所指向变量值来影响实参!经过改变形参所指向变量值来影响实参!实参实参:地址值(指针):地址值(指针)形参形参:指针:指针 2.传址调用传址调用一、函数传值调用一、函数传值调用 1.传值调用传值调用第13页例例4.4#include void swap2(int*x,int*y)int temp;temp=
7、*x;*x=*y;*y=temp;/形参指针所指向变量值交换形参指针所指向变量值交换 cout“x=”*x“y=”*yendl;void main()int a(5),b(9);swap2(&a,&b);cout“a=”a“b=”bendl;a=9,b=5x=9,y=5第14页二、函数二、函数引用调用引用调用/C+特色特色将实参变量名赋给对应形参引用,相当于在将实参变量名赋给对应形参引用,相当于在被调用函数中使用了实参别名被调用函数中使用了实参别名;经过改变引用来经过改变引用来直接直接改变对应实参值改变对应实参值;引用调用比传址调用更直接。引用调用比传址调用更直接。形参形参:引用引用实参实参:
8、变量名变量名q引用是引用是变量别名变量别名q对引用操作就是对被引用变量操作对引用操作就是对被引用变量操作第15页例例4.5#include void swap3(int&x,int&y)int temp;temp=x;x=y;y=temp;/形参引用值交换形参引用值交换 cout“x=”x“y=”yendl;void main()int a(5),b(9);swap3(a,b);cout“a=”a“b=”bendl;a=9,b=5x=9,y=5形参形参:引用引用实参实参:变量变量第16页4.3 函数参数函数参数一、函数参数求值次序一、函数参数求值次序C+没有要求函数调用时实参求值次序,没有要求
9、函数调用时实参求值次序,各编译器自行要求;各编译器自行要求;当实参表示式中带有副作用运算符时,可当实参表示式中带有副作用运算符时,可能产生因为求值次序不一样而造成二义性;能产生因为求值次序不一样而造成二义性;第17页 例例4.6#include int add(int x,int y)return x+y;void main()int x(4),y(6);int z=add(+x,x+y);coutzendl;int t=+x;int z=add(t,x+y);第18页二、设置函数参数默认值二、设置函数参数默认值1.C+允许在允许在函数说明函数说明或或定义定义时为形参指定时为形参指定默认值;默
10、认值;2.按按从右至左次序从右至左次序设置参数默认值;设置参数默认值;3.函数调用,实参加形参结合时:函数调用,实参加形参结合时:a)若实参数目不足若实参数目不足,则使用形参默认值则使用形参默认值;b)若给定实参值,则使用给定实参值。若给定实参值,则使用给定实参值。第19页例例4.7#include void fun(int a=1,int b=3,int c=5)couta=a,b=b,c=cendl;void main()fun();fun(7);fun(7,9);fun(7,9,11);a=1,b=3,c=5a=7,b=3,c=5a=7,b=9,c=5a=7,b=9,c=11默认值默认值
11、函数定义函数定义第20页例例4.8#include int m(8);int add_int(int x,int y=7,int z=m);void main()int a(5),b(15),c(20);int s=add_int(a,b);coutsendl;int add_int(int x,int y,int z)return x+y+z;函数申明函数申明函数定义函数定义28第21页1)按按自右至左次序自右至左次序设置参数默认值;设置参数默认值;2)默认参数默认参数在函数申明中提供在函数申明中提供;3)现有函数申明又有函数定义时,定义现有函数申明又有函数定义时,定义中不允许默认参数;中不
12、允许默认参数;例例4.84)假如只有函数定义,默认参数才能够假如只有函数定义,默认参数才能够出现在函数定义中。出现在函数定义中。例例4.7v 设置参数默认值应注意问题:设置参数默认值应注意问题:第22页 三、使用数组作函数参数三、使用数组作函数参数 1.形参和实参都用数组形参和实参都用数组#includeint a8=1,3,5,7,9,11,13;void fun(int b,int n)for(int i=0;in-1;i+)b7+=bi;void main()int m=8;fun(a,m);couta7endl;例例4.949实参实参形参形参第23页 2.形参和实参都用指针形参和实参都
13、用指针#includeint a8=1,3,5,7,9,11,13;void fun(int*pa,int n)/指针指针pa指向实参数组指向实参数组 for(int i=0;in-1;i+)*(pa+7)+=*(pa+i);void main()int m=8;fun(a,m);couta7endl;例例4.1049实参实参第24页 3.实参用数组名形参用引用实参用数组名形参用引用#includetypedef int array8;/int a8=1,3,5,7,9,11,13;array a=1,3,5,7,9,11,13;void fun(array&b,int n)/为实参数组起为实
14、参数组起别名别名b for(int i=0;in-1;i+)b7+=bi;/对对b操作即对实参数组操作操作即对实参数组操作void main()int m=8;fun(a,m);couta7endl;例例4.1149实参实参第25页4.4 内联函数内联函数一、内联函数引入一、内联函数引入1.引入内联函数是为了处理函数调用时效引入内联函数是为了处理函数调用时效率问题;率问题;2.编译时,编译时,用内联函数函数体用内联函数函数体替换替换内联函内联函数调用表示式数调用表示式(普通函数在运行时被调(普通函数在运行时被调用);用);3.内联函数是以目标代码增加为代价来换内联函数是以目标代码增加为代价来换
15、取时间节约。取时间节约。第26页二、内联函数定义二、内联函数定义 inline ()#include inline int power(int x)return (x)*(x);void main()for(int i=1;i=10;i+)int p=power(i);couti“*”i“=”pendl;例例4.12第27页1.内联函数内联函数定义定义必须必须出现在出现在内联函数内联函数第第一次被调用一次被调用前前;2.内联函数体内内联函数体内不允许不允许用用循环语句循环语句和和开开关语句关语句;3.类结构中全部在类说明内部定义函数类结构中全部在类说明内部定义函数都是内联函数。都是内联函数。v
16、 使用内联函数时应注意:使用内联函数时应注意:第28页4.5 函数重载函数重载函数重载是指函数重载是指同一函数名同一函数名对应对应多个函数多个函数实现实现;函数重载时,要求同名函数在函数重载时,要求同名函数在参数个数参数个数上不一样,上不一样,或或参数类型上不一样参数类型上不一样;函数调用时,系统函数调用时,系统依据依据调用函数调用函数实参情实参情况选择某个函数实现况选择某个函数实现。第29页一、参数类型不一样函数重载一、参数类型不一样函数重载#include int add(int,int);double add(double,double);void main()coutadd(5,10)
17、endl;coutadd(5.0,10.5)endl;int add(int x,int y)return x+y;double add(double a,double b)return a+b;例例4.13第30页二、参数个数不一样函数重载二、参数个数不一样函数重载#include int min(int a,int b)return ab?a:b;int min(int a,int b,int c)int t=min(a,b);return min(t,c);void main()coutmin(5,4,9)endl;coutmin(-2,0)endl;例例4.14第31页4.6 函数嵌套
18、和递归调用函数嵌套和递归调用一、函数嵌套调用一、函数嵌套调用 main函数函数调用调用a函数函数结束结束 b函数函数 a函数函数调用调用b函数函数q在调用一个函数过程中,又调用另一个函数在调用一个函数过程中,又调用另一个函数第32页例例4.15#includeconst int k=4,n=6;int sum(int k,int n),powers(int m,int n);void main()coutsum(k,n)endl;int sum(int k,int n)/求求n个数个数k次幂之和次幂之和 for(int i=1,sum=0;i=n;i+)sum+=powers(i,k);ret
19、urn sum;int powers(int i,int k)/求求ik次幂次幂 for(int j=1,p=1;j=k;j+)p*=i;return p;第33页二、函数递归调用二、函数递归调用调用一个函数过程中又调用一个函数过程中又直接直接或或间接间接地地调用调用该函数本身该函数本身;1.含义含义2.特点特点1)每次分解出每次分解出新问题是原问题简化新问题是原问题简化子问题;子问题;2)最终分解出最终分解出新问题是一个新问题是一个已知解已知解;3)程序简练清楚,可读性强;程序简练清楚,可读性强;第34页3.过程过程q回归回归:从已知条件出发,:从已知条件出发,逐一求值回归逐一求值回归,最终
20、达递推开始处;最终达递推开始处;q递推递推:原问题不停:原问题不停分解为新子问题分解为新子问题,最终达递归结束条件最终达递归结束条件(已知已知);0!=1(已知已知)3!=3*2!2!=2*1!1!=1*0!递推递推递推递推递推递推1!=1*1=12!=2*1!=2*1=23!=3*2!=3*2=6回归回归回归回归回归回归例:例:第35页例例4.16#include long int fac(int n);void main()int n;coutn;long fa=fac(n);coutn!=faendl;long int fac(int n)long int p;if(n=0)p=1;el
21、se p=n*fac(n-1);return p;第36页例例4.17#include const int N=8;long fibo(int n);void main()long f=fibo(N);coutfendl;long fibo(int n)if(n=1)return 0;else if(n=2)return 1;else return fibo(n-1)+fibo(n-2);第37页4.7 作用域作用域一、标识符作用域规则一、标识符作用域规则1.标识符只能标识符只能在在其其说明或定义范围内可见说明或定义范围内可见,在该范围之外不可见!在该范围之外不可见!2.“可见可见”即能够进行
- 配套讲稿:
如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。