c++函数PPT学习课件_第1页
c++函数PPT学习课件_第2页
c++函数PPT学习课件_第3页
c++函数PPT学习课件_第4页
c++函数PPT学习课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

函数,1.什么是函数?,2.函数的定义和说明,3.函数的参数和返回值,主要内容,4.函数的参数和返回值,5.函数的调用方式,6.函数的嵌套调用和递归调用,2,2,天津工程师范学院,什么是函数,编写函数,计算并打印若干给定整数(1、3、4)的阶乘,要求每次打印数据后打印一行星号(10个)。1*6*24*,3,3,天津工程师范学院,什么是函数,voidmain()inta=1,b=3,c=4;intv=1;while(a0)v*=a;a-;coutv;for(inti=0;i10;i+)cout*;cout0)v*=a;a-;coutv;for(inti=0;i10;i+)cout*;cout0)v*=m;m-;returnv;voidcoutstar()for(inti=0;i10;i+)cout*;coutendl;,voidmain()inta=19,b=123,c=67;coutgetfact(a);coutstar();coutgetfact(b);coutstar();coutgetfact(c);coutstar();,5,参数类型参数名,函数名,返回类型,函数体,函数调用(参数传递),5,天津工程师范学院,什么是函数,为什么需要函数提高效率,减少重复编写程序的工作量。一个较大的程序不可能完全由一个人完成,更不可能把所有代码放在一个主函数中。什么是函数函数(function)就是一段实现某个功能的代码。,6,6,天津工程师范学院,什么是函数,一个程序包含若干个函数(但只有一个主函数),程序从主函数开始执行。执行过程中,主函数调用其它函数,其他函数相互调用。实际应用中,主函数一般比较简单,作用就是调用其它函数,而程序的功能全部都是由函数实现的。,7,7,天津工程师范学院,函数的定义和说明,1、函数的定义格式()若干条语句(函数体)返回类型包含存储类型和数据类型,存储类型省略为外部函数,数据类型不能省略。参数列表由若个参数组成,参数间用逗号分隔,给出参数名时还要给出参数的数据类型。,8,8,天津工程师范学院,函数的定义和说明,注意:1、函数的类型即函数返回值的类型,如果函数没有返回值则返回类型为void。voidcoutstar()2、参数定义方式intgetfact(intm),9,9,天津工程师范学院,什么是函数,voidcoutstar()for(inti=0;i10;i+)cout*;cout0)v*=m;m-;returnv;,10,10,天津工程师范学院,什么是函数,voidmain()inta=1,b=3,c=4;coutgetfact(a);coutstar();coutgetfact(b);coutstar();voidcoutstar()intgetfact(intm),voidcoutstar()intgetfact(intm)voidmain()inta=1,b=3,c=4;coutgetfact(a);coutstar();coutgetfact(b);coutstar();,11,函数说明intgetfact(int);voidcoutstar();,11,天津工程师范学院,函数的定义和说明,2、函数的说明如果函数定义在前,调用在后,调用前可以不说明。如果函数定义在调用之后,则必须在调用前说明函数的类型,名称和参数。说明格式:()例如,有函数定义如下:intgetfact(intm)原型说明:intgetfact(int),要与定义时顺序和类型相一致,可省略参数名,12,12,天津工程师范学院,函数的定义和说明,voidmain()inta=1,b=3,c=4;voidcoutstar();intgetfact(intm);coutgetfact(a);coutstar();voidcoutstar()intgetfact(intm),voidcoutstar();intgetfact(intm);voidmain()inta=1,b=3,c=4;coutgetfact(a);coutstar();voidcoutstar()intgetfact(intm),13,13,天津工程师范学院,函数的参数和返回值,1、函数的参数在定义函数时,函数名后括号中的变量名为形式参数(形参)。定义函数时,必须写出形参的个数、类型和名字。当调用一个有参数的函数时,直接写函数名调用函数,函数名后括号中的参数为实际参数(实参)。实参不加数据类型,可以是常量、变量、表达式。,14,14,天津工程师范学院,函数的参数和返回值,1、函数的参数在未被调用时,形参没有确定值,只是形式上的参数,只有被调用时才从调用函数中获得实际参数。,voidfun(intm)coutm;voidmain()inta=100;fun(a);fun(10);fun(10+a);,m,100,15,15,天津工程师范学院,函数的参数和返回值,函数参数的求值顺序参数的求值顺序因编译系统不同而不同,一般来说不会引起参数值不同,但在具有副作用的表达式中可能会造成二义性。inta=5;fun(a+,a);编写程序要避免实参表达式中出现具有副作用的表达式,16,16,天津工程师范学院,6.1,#includeintfun(inta,intb)returna+b;voidmain()inta(13),b(25);intsum=fun(a-1,a-b);coutsumendl;,17,17,天津工程师范学院,函数的参数和返回值,函数参数的默认值在定义或说明函数时通过设置参数的默认值,可以方便函数在调用时只写出部分参数。例如doublefun(doublea=1.5,doubleb=2.6)在函数被调用时,如果对应实参无值,则用形参的默认值,如对应实参有值,则用实参值,默认值无效。fun();/a=1.5,b=2.6fun(1.0)/a=1.0,b=2.6,18,18,天津工程师范学院,函数的参数和返回值,如,doublefun(doublea,doubleb=2.6),则以下调用函数语句有无错误?fun();fun(1.2);fun(1,3);又如doublefun(doublea=1.5,doubleb),则以下调用语句有无错误?fun(1.2);,19,19,天津工程师范学院,函数的参数和返回值,注意设置形参的默认值要求从参数的右端开始,在指定了默认值的参数右端不允许出现没有指定默认值的参数。如果一个函数需要说明时,设置参数默认值应放在说明函数的语句中,不放在定义函数的语句中。参数默认值可以只用表达式,20,20,天津工程师范学院,6.2,#includevoidmain()voidfun(inti=1,intj=2,intk=3);fun();fun(4);fun(5,6);fun(7,8,9);voidfun(inti,intj,intk)couti+j+kendl;,21,21,天津工程师范学院,函数的参数和返回值,函数返回值的实现函数可以有返回值也可以没有返回值。没有返回值的函数类型为void,return语句可以省略。在函数中实现返回值的方法是使用带有表达式的return语句:return表达式;一个函数可以有一个以上return语句,执行到哪一个return语句,哪一个return语句起作用。return后的表达式可以加括号,可以不加,22,22,天津工程师范学院,函数的参数和返回值,return表达式;的执行过程;先计算表达式值;当表达式值同函数返回类型不一致时,应将表达式值转换为返回类型;将表达式值返回给调用函数,作为调用函数的值将程序的控制权返回到调用函数语句,执行调用函数下面的语句。,23,23,天津工程师范学院,6.4,#includeintfun(doublea,intb)returna-b;voidmain()doublex(11.5);inty(10);doublez=fun(x,y);coutzendl;,24,24,天津工程师范学院,函数的调用方式,函数根据调用方式分为传值调用和引用调用。传值调用函数调用时,将实参的值传递给形参的调用方式。传值调用中有个分为传值和传地址两种。传值是指传递变量或表达式的值传地址是指传递变量的地址值,25,25,天津工程师范学院,函数的调用方式,1、传值调用实参为表达式,形参为变量实参复制一个副本给形参,在被调用函数中形参的值被改变时,实参不会受到影响。,26,26,天津工程师范学院,传值调用,27,27,天津工程师范学院,回顾,注意:当形参是普通变量时,实参可以是变量、常量、表达式,这时形参收到的是实参的值。传参的过程就是初始化形参的过程(开辟空间+赋值)传值方式不能通过改变形参来改变实参,28,28,天津工程师范学院,函数的嵌套调用和递归调用,函数的嵌套调用嵌套调用是指在一个函数体中调用另一个函数。注意,函数可以嵌套调用,但是不能嵌套定义!,29,29,天津工程师范学院,函数的嵌套调用和递归调用,#includevoidfun1(),fun2(),fun3();voidmain()coutItisinmain().endl;fun2();coutTiisbackmain().endl;voidfun1()coutItisinfun1().endl;fun3();coutItisbackinfun1().endl;,30,30,天津工程师范学院,函数的嵌套调用和递归调用,voidfun2()coutItisinfun2().endl;fun1();coutItisbackinfun2().endl;voidfun3()coutItisinfun3().n;coutfact(n)n;coutfact(n)0?i,-i);,longabs2(longi)return(i0?i,-i);voidmain()coutabs(-10);coutabs1(-2.5);,37,37,天津工程师范学院,重载函数,为什么要重载函数具有相同功能的函数如果不能用一个函数名,会给编写和使用带来不变。C+运行多个函数具有相同的函数名,但其中任意两个函数的参数个数、参数类型、类型顺序不能完全相同。,38,38,天津工程师范学院,重载函数,intfun();intfun(int);intfun(double);intfun(int,double);intfun(double,int);floatfun(int);,inta=1;doubled=2.5;coutfun(d);coutfun(d,a);coutfun(a,d);coutfun(a);,39,39,天津工程师范学院,重载函数,重载和函数的默认参数可能会冲突,如果有冲突,不能同时使用。intfun(int);intfun(inta=10,doubled=100);intmain()couty)?x:y;3)如果是输入的是字符charmax(charx,chary)return(xy)?x:y;,Tmax(Tx,Ty)return(xy)?x:y;,函数模版,42,天津工程师范学院,函数模版,函数模版的一般格式为:template(形式参数表)/函数体;,模版关键字,class和typename必选其中之一,函数模版是用来定义个通用的函数,以支持不同类型参数使用。,函数模版是一种不指定某些参数的数据类型的函数,在函数模版被调用时根据实际参数的类型决定这些函数模版的类型。,43,天津工程师范学院,函数模版实例1:求两个数的最大值并输出。,#includetemplateTMAX(Tx,Ty)return(xy)?x:y;voidmain()inta(4),b(6);charm(a),n(b);coutMAX(a,b)endl;coutMAX(m,n)endl;,函数模版(仅仅是个说明,不能执行),模版参数实例化,编译器通过实参的类型推导出函数模版的类型参数。,44,天津工程师范学院,函数模版实例2,题目:定义一个函数模版,实现对两个数的求和功能。解:定义一个函数模版Add(),它的功能是对传来的两个参数进行求和运算。这两个参数可以是任何类型的参数。,45,天津工程师范学院,#includevoidmain()intx=3,y=5;floatx1=12.3,y1=3.4;doublex2=0.8,y2=23.5;cout”整数型:x+y=”Add(x,y)endl;cout”浮点型:x+y=”Add(x1,y1)endl;cout”双精度:x+y=”Add(x2,y2)endl;,函数模版,templateTAdd(Tx,Ty)returnx+y;,46,天津工程师范学院,函数模版练习,使用函数模板实现任意两个同类型的数的交换。,#includevoidmain()inta(10),b(20);swap(a,b);coutswapa,bab=y?x:(T1)y;,48,天津工程师范学院,内联函数,调用函数需要一定的时间和空间开销:voidmain()a();,voida(),49,49,天津工程师范学院,内联函数,C+提供了一种高效方式:在编译时将所调用函数的代码直接嵌入到调用函数中,而不是流程转出去,这种被调用函数叫内联函数。指定内联函数只需在函数首行的左端加一个“inline”关键字。,50,50,天津工程师范学院,内联函数,inlineintmax(int,int);intmain()inti=1,j=20;coutmax(i,j);inlineintmax(inta,intb)if(ab)a=b;returna;,intmain()inti=1,j=20;intm;inta,b;a=i;b=jif(ab)a=b;m=a;coutm;,51,51,天津工程师范学院,内联函数,对函数进行内联声明,可以看成是程序设计者对编译系统提出一个建议,而不是强制命令。编译系统会自己决定是否采用内联形式编译源文件。只有规模比较小(5个语句以下),调用比较频繁的简单函数适合作为内联函数。内联函数可以有选择语句,不能包含复杂控制语句,如循环和开关语句。,52,52,天津工程师范学院,标识符的作用域和生命期,标识符:变量名、常量名、函数名、标识符的作用域作用域就是变量的有效范围,在作用域以外是无法访问这些变量的。变量只能在说明它和定义它的范围是可见的。根据作用域不同,变量分为全局变量和局部变量两种。,53,53,天津工程师范学院,变量的作用域和生命期,局部变量:在一个函数(或复合语句)内部定义的变量是局部变量,它只在函数(或复合语句)内有效,函数(或复合语句)外是不能访问这些变量的。全局变量:在函数外部定义的变量是全局变量,它的有效范围从定义开始到文件结束。,54,54,天津工程师范学院,变量的作用域和生命期,inta=0;/全局intmain()intb,cinti,j;,for(inti=0;i6;)inti=7;floata=5f;coutiendl;i+;coutiendl;/coutaendl;,55,55,天津工程师范学院,变量的作用域和生命期,注意:形式参数属于局部变量,相当于定义在函数内。不同函数中可以使用相同的变量名,使用不同内存单元,互不干扰。作用域重叠的变量,取最近定义有效。全局变量不宜定义过多,为降低程序的清晰性和通用性。全局变量有默认值:char型变量为空,int型变量为0,浮点型变量为0.0。,56,56,天津工程师范学院,变量的作用域和生命期,inti(0);voidmain()inti=10;for(intj(1);j=2;j+)inti=100;j+;couti,jendl;couti,jendl;i=fun();couti,jendl;,intfun()returni;,57,57,天津工程师范学院,变量的作用域和生命期,变量的生命期变量有诞生到消亡的过程。生命期就是变量从开始在内存中占用存储单元到撤销所占内存单元的一段时间。变量的生命期同它的存储类型有关。根据存储类型的不同,变量分为动态变量和静态变量两种。,58,58,天津工程师范学院,变量的作用域和生命期,动态存储方式是指在程序运行期间,系统对变量动态地分配存储空间。动态存储区存放以下变量:1、函数的形参,在函数调用时分配单元2、函数中的自动变量(未加static的局部变量)系统在函数调用开始时分配动态空间,函数结束时,释放这些空间。由于是动态分配的,两次调用同一个函数时,函数中的变量所占存储单元可能不一样。,59,59,天津工程师范学院,变量的作用域和生命期,静态存储方式是指在程序运行期间,系统对变量分配固定的存储空间。全局变量,在程序开始执行时,为他们分配固定的存储单元,程序结束释放这些空间。静态局部变量(函数中加static的局部变量),第一次被调用时分配空间,此后一直存在静态存储区,直到程序运行结束。,60,60,天津工程师范学院,voidfun();voidmain()for(inti(0);i4;i+)fun();voidfun()inta(0);a+;staticintb;b+;couta=a,b=bendl;,61,61,天津工程师范学院,变量的作用域和生命期,注意:静态局部变量(函数中加static的局部变量),具有默认值,与全局变量一样。char型变量为空,int型变量为0,浮点型变量为0.0。,62,62,天津工程师范学院,intfac(int);voidmain()ints(0);for(inti(1);i=5;i+)s+=fac(i);cout“result=sendl;intfac(intn)staticintb=1;b*=n;coutb=bendl;returnb;,63,63,天津工程师范学院,函数的存储类,外部函数,可以在定义它的程序文件和外部程序文件调用。extern(参数列表)其中,extern可以省略。P112例5.20,体会多源程序文件。,64,64,天津工程师范学院,函数的存储类,内部函数,只能在定义它的程序文件中使用。static(参数列表),65,65,天津工程师范学院,练习观察程序有无错误,#includevoidmain()fun();coutnotfuny!endl;voidfun()coutsofuny!endl;,66,voidfun();,voidfun();,66,天津工程师范学院,#includevoidfun();voidmain()fun();coutnotfuny!endl;voidfun(inta)coutsofuny!aendl;,#includevoidfun();voidmain()fun();coutnotfuny!endl;voidfun(inta)coutsofuny!aendl;,#includevoidfun();voidmain()fun();coutnotfuny!endl;voidfun(inta)coutsofuny!aendl;,观察程序有无错误,#includevoidfun();voidmain()fun();coutnotfuny!endl;voidfun(inta)coutsofuny!aendl;,67,voidfun(inta100);,voidfun(int);,fun(100);,67,天津工程师范学院,观察程序有无错误,#includevoidfun();voidmain()coutfun()endl;voidfun()coutsofuny!endl;,68,f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论