函数专业知识讲座省公共课一等奖全国赛课获奖课件.pptx
《函数专业知识讲座省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《函数专业知识讲座省公共课一等奖全国赛课获奖课件.pptx(81页珍藏版)》请在咨信网上搜索。
1、第5章 函数中国铁道出版社1第1页5.1 结构化程序设计5.1.1 过程化过程化C+程序框架程序框架以源程序文件为单位进行编译以源程序文件为单位进行编译一个源程序由一个一个源程序由一个main()函数和(或)多个其它函数组成。函数和(或)多个其它函数组成。程序执行程序执行从从main()函数开始函数开始在在main()函数中调用其它函数函数中调用其它函数在在main()函数中结束运行。函数中结束运行。对于其它函数,经过被调用方式来执行,它能够由对于其它函数,经过被调用方式来执行,它能够由main()调用,也能够被多个其它函数屡次地调用。调用,也能够被多个其它函数屡次地调用。2第2页函数之间调用
2、关系示意图 函数之间调用关系:函数之间调用关系:main函数调用了函数调用了f1()、f2()、f3()这这3个函数个函数函数函数f2()调用了函数调用了函数f3()函数函数f3()调用了函数调用了函数f4()3第3页C+程序框架通常由3个部分组成(1)第)第1部分:对每一个将被调用函数进行申明部分:对每一个将被调用函数进行申明void f1();void f2();void f3();void f4();(2)第)第2部分:定义部分:定义main()函数函数void main()f1();/调用函数调用函数f1f2();/调用函数调用函数f2f3();/调用函数调用函数f3 4第4页(3)第
3、)第3部分:定义其它各个函数。部分:定义其它各个函数。void f1()/定义函数定义函数f1 void f2()/定义函数定义函数f2 f3();/调用函数调用函数f3 void f3()/定义函数定义函数f3 f4();/调用函数调用函数f45第5页【例5-1】计算圆面积和周长输入一个圆半径值,然后计算这个圆面积和周长,输入一个圆半径值,然后计算这个圆面积和周长,并输出计算结果,其中计算圆面积和周长分别由并输出计算结果,其中计算圆面积和周长分别由两个函数完成,两个函数完成,#include using namespace std;double area(double r);/申明计算面积函
4、数申明计算面积函数area()double len(double r);/申明计算周长函数申明计算周长函数len()6第6页【例5-1】(续)void main()double r;coutr;coutarea=area(r)endl;/调用调用area()计算面积计算面积coutlen=len(r)endl;/调用调用len()计算周长计算周长double area(double r)/定义计算面积函数定义计算面积函数area()return 3.1416*r*r;double len(double r)/定义计算周长函数定义计算周长函数len()return 2*3.1416*r;7第7页
5、5.1.2 库函数和自定义函数(1)库函数)库函数在函数库中已定义函数,也称为标准函数,分布在不一样函数在函数库中已定义函数,也称为标准函数,分布在不一样函数库中,比如库中,比如iostream、cmath和和string等。等。使用库函数时,在程序开头将该函数所在函数库进行包含使用库函数时,在程序开头将该函数所在函数库进行包含包含格式:包含格式:#include“函数库名函数库名”比如:比如:#include#include using namespace std;(2)自定义函数:由用户自行编写)自定义函数:由用户自行编写8第8页5.2 函数概念自定义函数定义方式自定义函数定义方式返回值概
6、念返回值概念函数申明函数申明9第9页5.2.1 函数定义1函数定义普通形式函数定义普通形式类型名类型名 函数名(类型名函数名(类型名 形参形参1,类型名,类型名 形参形参2,)函数体函数体 (1)类型名:又称为函数类型,是函数调用返回时带回)类型名:又称为函数类型,是函数调用返回时带回给主调函数值类型。给主调函数值类型。(2)函数名:函数名命名要符合标识符命名规则。)函数名:函数名命名要符合标识符命名规则。(3)形参类型和名称:形参用来在函数调用时接收从主)形参类型和名称:形参用来在函数调用时接收从主调函数那里传递过来数据。调函数那里传递过来数据。(4)函数体:用来实现该函数功效。)函数体:用
7、来实现该函数功效。10第10页2函数几个特殊形式(1)无参函数)无参函数没有形参函数称为无参函数,圆括号不能省略。没有形参函数称为无参函数,圆括号不能省略。(2)空函数)空函数假如函数体为空,该函数称为空函数,空函数也能够假如函数体为空,该函数称为空函数,空函数也能够被调用,调用后也能够返回到主调函数。被调用,调用后也能够返回到主调函数。空函数通惯用在程序设计最初阶段,目标是确保整个空函数通惯用在程序设计最初阶段,目标是确保整个程序完整性,以后再向函数体中填写详细语句程序完整性,以后再向函数体中填写详细语句11第11页void使用用关键字用关键字void来定义无类型或称为空类型函数,明来定义无
8、类型或称为空类型函数,明确表示不带回值。确表示不带回值。比如:比如:void fun()couty)return x;else return y;14第14页返回值类型与函数类型不一致情况返回值类型在定义函数时指定,假如返回值类型在定义函数时指定,假如return语句中语句中表示式类型与函数定义时类型不一致,返回时以表示式类型与函数定义时类型不一致,返回时以函数类型为准,这时系统会对函数类型为准,这时系统会对return语句中表示语句中表示式值自动进行类型转换。式值自动进行类型转换。15第15页【例5-2】返回值与函数类型不一致#include using namespace std;int
9、max(float x,float y)return(xy?x:y);void main()float a,b;int c;cinab;c=max(a,b);cout Max=y?x:y结果转换为结果转换为int,然后再返回给,然后再返回给main。16第16页5.2.3 函数申明1函数调用标准函数调用标准调用任何函数之前,应该先对该函数进行申明调用任何函数之前,应该先对该函数进行申明假如被调函数出现在主调函数之前,这时,定义函假如被调函数出现在主调函数之前,这时,定义函数同时也对该函数进行了申明,该函数能够直接调数同时也对该函数进行了申明,该函数能够直接调用,能够省略对该函数申明。用,能够省
10、略对该函数申明。假如被调函数出现在主调函数之后,就要在函数调假如被调函数出现在主调函数之后,就要在函数调用之前对该函数进行申明。用之前对该函数进行申明。17第17页【例5-3】被调函数在主调函数之前定义#include using namespace std;float f()return 3.5;void main()coutf();该程序能够正常运行。该程序能够正常运行。18第18页犯错程序假如将程序中两个函数次序进行交换:假如将程序中两个函数次序进行交换:#include using namespace std;void main()couty?x:y);该函数函数原型是:该函数函数原型
11、是:int max(int x,int y);或或 int max(int,int);20第20页5.3 函数调用5.3.1 函数调用普通形式函数调用普通形式1实际参数实际参数函数调用普通形式:函数调用普通形式:函数名(参数表列)函数名(参数表列)调用函数时,格式中参数表列各个参数称为实际参数,简称实调用函数时,格式中参数表列各个参数称为实际参数,简称实参,实参向被调函数形参传递数据。参,实参向被调函数形参传递数据。比如:比如:实参是变量:实参是变量:c=max(a,b);实参是常量:实参是常量:c=max(3,4);实参是表示式:实参是表示式:c=max(3+5,4+3);实参是另一个函数调
12、用结果:实参是另一个函数调用结果:c=sqrt(max(a,3);实参个数、类型和次序应与被调函数形参一一对应实参个数、类型和次序应与被调函数形参一一对应21第21页【例5-4】函数调用时数据传递#include using namespace std;void print_char(char c,int n)int i;coutendl;for(i=0;in;i+)coutc;void main()print_char(-,5);print_char(,10);22第22页2函数调用几个形式(1)语句调用)语句调用作为函数调用语句,完成一定操作,不返回任何值。作为函数调用语句,完成一定操作,
13、不返回任何值。(2)表示式调用)表示式调用函数调用出现在表示式中,函数值参加表示式运算函数调用出现在表示式中,函数值参加表示式运算比如:比如:c=2*max(a,b);(3)函数值作为另一个函数调用参数)函数值作为另一个函数调用参数这时被调函数作为其它函数参数这时被调函数作为其它函数参数比如:比如:m=max(a,max(b,c);23第23页【例5-5】函数调用语句#include using namespace std;void printstar();void printmess();void main()printstar();printmess();printstar();void
14、printstar()cout*endl;void printmess()cout C+Programmeendl;24第24页5.3.2 设置形参默认值C+中允许为形参指定默认值,在函数调用时假如中允许为形参指定默认值,在函数调用时假如有实参,则形参使用实参值,假如没有指定与形有实参,则形参使用实参值,假如没有指定与形参对应实参,形参自动使用默认值参对应实参,形参自动使用默认值指定参数默认值能够在函数定义中进行,也能够指定参数默认值能够在函数定义中进行,也能够在函数原型中进行,通常是写在函数名在程序中在函数原型中进行,通常是写在函数名在程序中第一次出现位置。第一次出现位置。比如:比如:int
15、 add(int x=0,int y=0);25第25页【例5-6】默认参数值使用#include using namespace std;void add(int x=0,int y=0)coutx+y=x+yendl;void main()add(1,2);add();add(3);26第26页对部分形参定义默认值要求要求:没有默认值形参只能出现在形参表列前边,默认没有默认值形参只能出现在形参表列前边,默认值出现在从右到左连续若干个形参中。值出现在从右到左连续若干个形参中。下面定义方法是允许:下面定义方法是允许:void fun(int i=1,int j=2,int k=3);void
16、fun(int i,int j=2,int k=3);void fun(int i,int j,int k=3);下面定义方法是不允许:下面定义方法是不允许:void fun(int i=1,int j=2,int k);void fun(int i=1,int j,int k);void fun(int i,int j=2,int k);27第27页5.4 参数传递在在C+语言中,函数之间调用时经过参数进行数据语言中,函数之间调用时经过参数进行数据传递,从传递内容上看,参数传递有值传递、地传递,从传递内容上看,参数传递有值传递、地址传递和引用传递址传递和引用传递3种方式种方式28第28页5.
17、4.1参数传递方式1值传递值传递值传递时,将实参值依次传递给对应形参,形参变量值传递时,将实参值依次传递给对应形参,形参变量只有在发生函数调用时才分配内存单元用来接收由只有在发生函数调用时才分配内存单元用来接收由实参传过来数据。实参传过来数据。值传递时,实参加形参各占不一样单元,当调用结束值传递时,实参加形参各占不一样单元,当调用结束后,形参所在内存单元被释放,而实参仍保留原值。后,形参所在内存单元被释放,而实参仍保留原值。29第29页【例5-7】分析程序#include using namespace std;void swap(int x,int y);void main()int a=3
18、,b=4;couta=a b=bendl;swap(a,b);couta=a b=bendl;void swap(int x,int y)int z;coutx=x y=yendl;z=x;x=y;y=z;coutx=x y=yendl;结论:变量结论:变量a和和b值并没有交换。值并没有交换。30第30页2引用传递假如形参是引用名,在函数调用时,形参变量与假如形参是引用名,在函数调用时,形参变量与实参变量实际表示是同一内存单元,在被调函数实参变量实际表示是同一内存单元,在被调函数中对引用变量操作就和在主调函数中使用实参效中对引用变量操作就和在主调函数中使用实参效果是一样,这么,能够经过引用变量
19、在被调函数果是一样,这么,能够经过引用变量在被调函数中改变主调函数中变量值。中改变主调函数中变量值。31第31页【例5-8】使用引用传递交换变量值#include using namespace std;void swap(int&,int&);/函数函数swap()形参是引用名形参是引用名void main()int a=5,b=10;couta=a,b=bendl;swap(a,b);couta=a,b=b;void swap(int&m,int&n)/引用传递引用传递 int t=m;m=n;n=t;结论:变量结论:变量a和和b值实现了交换。值实现了交换。32第32页5.4.2 一维数组
20、名作为函数参数因为数组名代表了该数组所占连续内存单元中首因为数组名代表了该数组所占连续内存单元中首地址,所以数组名作参数时,传送给形参数组是地址,所以数组名作参数时,传送给形参数组是实参数组起始地址,这也是引用传递,主调函数实参数组起始地址,这也是引用传递,主调函数和被调函数两个数组共占相同内存单元,这么,和被调函数两个数组共占相同内存单元,这么,假如被调函数中各数组元素值发生改变,在返回假如被调函数中各数组元素值发生改变,在返回主调函数后,实参数组中元素值也同时改变主调函数后,实参数组中元素值也同时改变33第33页【例5-9】数组名作函数参数#include using namespace
21、std;f(int b,int m,int n)int i,s=0;for(i=m;in;i=i+2)s=s+bi;return s;void main()int x,a=1,2,3,4,5,6,7,8,9;x=f(a,3,7);coutx;34第34页【例5-10】在被调函数中改变主调函数中数组元素值#include using namespace std;void f(int b)int i;for(i=0;i10;i+)bi+;void main()int i,a10=1,3,2,4,8,3,4,9,12,0;cout调用前调用前:;for(i=0;i10;i+)coutai,;cout
22、endl;f(a);cout调用后调用后:;for(i=0;i10;i+)coutai,;coutendl;35第35页5.5 函数特殊调用5.5.1 嵌套调用嵌套调用在一个函数调用过程中,被调函数又调用了另一个函在一个函数调用过程中,被调函数又调用了另一个函数。数。C+中能够嵌套调用,不过不能够嵌套定义函数。中能够嵌套调用,不过不能够嵌套定义函数。36第36页【例5-11】函数嵌套调用从键盘上输入两个整数,计算这两个整数平方和。从键盘上输入两个整数,计算这两个整数平方和。#include using namespace std;int square(int n)return n*n;int
23、sum(int x,int y)return square(x)+square(y);void main()int m,n;coutmn;coutm2+n2=sum(m,n)endl;37第37页5.5.2 递归调用在调用一个函数过程中直接或间接地调用其本身在调用一个函数过程中直接或间接地调用其本身,有两个阶段有两个阶段(1)递推阶段)递推阶段将原来问题不停地分解为新问题,逐步从未知向已知将原来问题不停地分解为新问题,逐步从未知向已知方向推测,最终抵达已知条件。方向推测,最终抵达已知条件。(2)回归阶段)回归阶段从已知条件出发,按递推从已知条件出发,按递推逆过程,逐一求值,最终逆过程,逐一求值
24、,最终抵达递推开始。抵达递推开始。38第38页【例5-12】用递归调用计算阶乘n!#include using namespace std;int fac(int n)int f;if(n=0|n=1)f=1;else f=fac(n-1)*n;return f;void main()int n,y;cinn;y=fac(n);coutn!=y;39第39页【例5-13】使用递归计算Fibonacci数列使用递归调用方法计算示使用递归调用方法计算示Fibonacci数列前数列前30项,每行显示项,每行显示5个。个。#include using namespace std;int fib(int
25、 n)if(n=0|n=1)return 1;else return fib(n-1)+fib(n-2);void main()int i;for(i=0;i30;i+)if(i%5=0)coutendl;coutfib(i)t;40第40页5.6 变量作用域和生存期一个变量能否在多个函数中使用,这是变量作用一个变量能否在多个函数中使用,这是变量作用域;域;一个变量在定义之后,起作用时间有多长,这是一个变量在定义之后,起作用时间有多长,这是变量生存期。变量生存期。41第41页5.6.1 变量作用域依据变量作用域不一样,能够把变量分为局部变依据变量作用域不一样,能够把变量分为局部变量和全局变量。
- 配套讲稿:
如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。