第四章 函数.ppt
《第四章 函数.ppt》由会员分享,可在线阅读,更多相关《第四章 函数.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/99程序设计是计算机学科的程序设计是计算机学科的 核心和灵魂核心和灵魂程序设计基础第四章 函数2/99回忆函数回忆函数主函数:主函数:intmain()coutComputerScience.n;return0;库函数:库函数:#includeintmain()floata,b,c,x1,x2;cinabc;x1=(-b+sqrt(b*b-4.*a*c)/(2*a);x2=(-b-sqrt(b*b-4.*a*c)/(2*a);coutx1ab;c=max(a,b);cout=y?x:y;return(z);主主函函数数函函数数体体函数的类型,返回值的类型函数的类型,返回值的类型函数名(用标
2、识符命名),引用函数的函数名(用标识符命名),引用函数的标志,并得到结果。标志,并得到结果。函数参数说明表。函数参数说明表。定义!定义!调用!调用!函数定义是要确定函数的函数定义是要确定函数的名称、函数的类型、函数名称、函数的类型、函数的参数及函数的功能。的参数及函数的功能。intmax(intx,inty);7/99函数分类函数分类(1)从用户角度从用户角度标准函数(库函数)标准函数(库函数):C+语言的集成开发环境提语言的集成开发环境提供,存放在库函数中,用户链接相应的库函数头文供,存放在库函数中,用户链接相应的库函数头文件后便可以直接使用。件后便可以直接使用。用户自定义函数用户自定义函数
3、:由用户按照逻辑功能自己编写的:由用户按照逻辑功能自己编写的程序程序(2)(2)从函数形式从函数形式无参函数无参函数:调用该函数时,主调函数不需函数要将数据调用该函数时,主调函数不需函数要将数据传递给被调用函数,只执行指定的一组操作传递给被调用函数,只执行指定的一组操作有参函数有参函数:主调需传递数据给被调函数主调需传递数据给被调函数(3)从函数返回值角度:从函数返回值角度:有返回值函数有返回值函数和和无返回值函数无返回值函数8/994.24.2函数的定义与调用函数的定义与调用函数类型函数类型 函数名函数名(函数参数定义函数参数定义)说明部分说明部分(变量声明变量声明)语句部分语句部分 ret
4、urn return 结果结果;intmax(intx,inty)intz;z=x=y?x:y;return(z);intmax(intx,inty)intcx(intc,intd)/*Error!*/函数定义不可以嵌套函数定义不可以嵌套一、函数定义的一般格式一、函数定义的一般格式9/991)函数类型)函数类型:函数返回值的类型。指数据类型函数返回值的类型。指数据类型,如:如:int,float,double,bool,char,void等等。等等。如果函数没有返回值,应指明返回类型如果函数没有返回值,应指明返回类型void。如果函数类型省略,系统默认类型为如果函数类型省略,系统默认类型为in
5、t型。型。提倡显示指明函数类型提倡显示指明函数类型和变量命名一样,是标识符和变量命名一样,是标识符函数名后一定要有一对圆括号函数名后一定要有一对圆括号(),这是函数的标志,这是函数的标志,使函数与其,使函数与其他标识符名区分开来他标识符名区分开来尽量要能够表达出正确的意义。函数名重在说明它要尽量要能够表达出正确的意义。函数名重在说明它要“做什么做什么”。2)函数名)函数名:intmax(intx,inty)intz;z=x=y?x:y;return(z);10/994)函数体)函数体函数体用一对包括。里面就是函数用以实现功能的代码。函数体用一对包括。里面就是函数用以实现功能的代码。声明部分:用
6、于声明在函数中使用到的变量声明部分:用于声明在函数中使用到的变量语句部分:在函数中用于实现某项任务的语句序列语句部分:在函数中用于实现某项任务的语句序列空函数空函数:函数体为空(没有语句,但:函数体为空(没有语句,但不能省略不能省略intmax(intx,inty)intz;z=x=y?x:y;return(z);11/995)return语句语句return语句只在函数内使用语句只在函数内使用.它起到让函数停止运行它起到让函数停止运行,然后返回然后返回一个值的作用,并返回到函数调用程序的下一条语句。一个值的作用,并返回到函数调用程序的下一条语句。n函数体里可以有多个函数体里可以有多个retu
7、rn语句,也可以没有语句,也可以没有return语句语句,或或者写不带结果的者写不带结果的return语句。语句。nreturn返回的结果,类型一般和前面返回的结果,类型一般和前面“返回类型返回类型”一致。一致。如如果不一致,系统自动将表达式类型转换为函数类型果不一致,系统自动将表达式类型转换为函数类型。intmax(intx,inty)intz;z=x=y?x:y;return(z);intmax(inta,intb)if(ab)returna;returnb;12/996)函数的类型函数的类型,return,及如何及如何获取函数的返回值获取函数的返回值intmax(intx,inty)n函
8、数的类型函数的类型:即函数返回即函数返回值类型值类型.intmax(inta,intb)return(ab)?a:b;intmax(floata,floatb)return(ab)?a:b;nreturn语句让函数停止运行语句让函数停止运行,返回一个值返回一个值intmax(inta,intb)if(ab)returna;returnb;n若函数是若函数是void类型时类型时,return不能接不能接返回值返回值,return仅起结束函数的作用仅起结束函数的作用nreturn后可接表达式、变量、常量、后可接表达式、变量、常量、甚至也可以接一个函数调用表达式甚至也可以接一个函数调用表达式n获取函
9、数的返回值获取函数的返回值intc=max(10,7)13/99二、函数参数二、函数参数形式参数形式参数函数形式参数的定义函数形式参数的定义:一般格式:一般格式:(数据类型数据类型变量变量1,数据类型,数据类型变量变量2,)n多个参数之间用逗号隔开,而不是分号多个参数之间用逗号隔开,而不是分号,且且最后一个变量之后则不需要符号。最后一个变量之后则不需要符号。n两个或多个参数类型相同时,并不能同时两个或多个参数类型相同时,并不能同时声明声明intmax(intx,y)n用于接收从主调函数传给这个函数的数据用于接收从主调函数传给这个函数的数据n形参个数不受限制,可以很多,也可以无形参个数不受限制,
10、可以很多,也可以无intmax(intx,inty)intz;z=x=y?x:y;return(z);形式参数形式参数:函数在声明或定义时,所写出的参数定义。函数在声明或定义时,所写出的参数定义。14/99形参只是形式上参数,所以在声明一个函数时,甚至可以不写形参只是形式上参数,所以在声明一个函数时,甚至可以不写形参的变量名:形参的变量名:函数声明可以写为:函数声明可以写为:intmax(int,int);在自定义函数中指定的形参变量,在未出现函数调用在自定义函数中指定的形参变量,在未出现函数调用时时,它们并不占用内存中的存储单元它们并不占用内存中的存储单元.只有在发生函数只有在发生函数调用时
11、形参才被分配内存单元调用时形参才被分配内存单元.在调用结束后在调用结束后,所占用所占用的存储单元被释放的存储单元被释放.形参必须指定参数类型形参必须指定参数类型二、函数参数二、函数参数形式参数形式参数15/99intmax(x,y)intx,y;或或intmax(intx,y)或或intmax(x,y)intx,y,z;z=xy?x:y;return(z);形参也可以这样定义形参也可以这样定义如下定义都是错误的如下定义都是错误的如下定义都是错误的如下定义都是错误的但是不推荐但是不推荐intmax(x,y)intx,y;intz;z=xy?x:y;return(z);二、函数参数二、函数参数形式
12、参数形式参数16/99出现在函数调用表达式中,是函数调用时,实际使用的参数出现在函数调用表达式中,是函数调用时,实际使用的参数一般形式:一般形式:(表达式表达式1,表达式,表达式2,)实际参数表是用逗号分隔的表达式列表,其中每个表达式称为实际参数表是用逗号分隔的表达式列表,其中每个表达式称为实际参数,简称为实参,可以是常量实际参数,简称为实参,可以是常量,变量或表达式变量或表达式函数调用时,需将实际参数的值传送给对应位置的形式参数函数调用时,需将实际参数的值传送给对应位置的形式参数实际参数与形式参数必须一一对应实际参数与形式参数必须一一对应,位置、个数以及数据类型,位置、个数以及数据类型都匹配
13、都匹配二、函数参数二、函数参数实际实际参数参数17/99 形式参数:定义函数时,函数名后形式参数:定义函数时,函数名后()()中的中的参数参数实际参数:调用函数时函数名后实际参数:调用函数时函数名后()()中的表中的表达式达式intmain(void)inta,b,c;cinab;c=max(a,b);cout=y?x:y;return(z);实参实参形参形参c=max(a,b);(main函数)函数)(max函数)函数)max(intx,inty)intz;z=xy?x:y;return(z);二、函数参数二、函数参数形式参数与形式参数与实际实际参数参数intmax(intx,inty);1
14、8/99n实参必须有确定的值实参必须有确定的值n实参可以是常量、变量、表达式、函数调用实参可以是常量、变量、表达式、函数调用n形参必须指定类型形参必须指定类型n形参与实参类型一致,个数相同形参与实参类型一致,个数相同n若形参与实参类型不一致,自动按形参类型转换若形参与实参类型不一致,自动按形参类型转换函数调用转换函数调用转换n形参在函数被调用前不占内存形参在函数被调用前不占内存;函数调用时为形函数调用时为形参分配内存;调用结束,内存释放参分配内存;调用结束,内存释放二、函数参数二、函数参数形式参数与形式参数与实际实际参数参数19/99三、函数的调用三、函数的调用n函数调用的一般形式:当作表达式
15、使用函数调用的一般形式:当作表达式使用 函数名函数名(实际参数表实际参数表)如果是调用无参函数如果是调用无参函数,则则“实参表列实参表列”可以没有可以没有,但括弧不能省但括弧不能省n函数调用的方式:函数调用的方式:一般调用方式有三种:一般调用方式有三种:v语句形式:语句形式:max(a,b)max(a,b);/*/*不要求函数带回值不要求函数带回值*/v表达式形式:表达式形式:c=max(a,b)*2;c=max(a,b)*2;/*/*函数是表达式的一部分函数是表达式的一部分*/v函数参数:函数参数:c=max(a,max(b,d);c=max(a,max(b,d);/*/*函数调用作为一个函
16、数的实参函数调用作为一个函数的实参*/函数调用作为一个表达式,其类型是函数返回值的类型函数调用作为一个表达式,其类型是函数返回值的类型函数调用可用于任何表达式可以出现的地方函数调用可用于任何表达式可以出现的地方在调用一函数的过程中,又调用另一函数在调用一函数的过程中,又调用另一函数C+允许函数的嵌套调用,不允许函数的嵌套定义允许函数的嵌套调用,不允许函数的嵌套定义20/99voidmain(void)inta,b,c;cinab;c=max(a,b);couty?x:y;return(z);先计算实参的值,先计算实参的值,从右向左(或从右向左(或者从左向右)者从左向右)向函数传递调赋值给向函数
17、传递调赋值给形参。形参。23abXy23转移到函数中运行,执行到转移到函数中运行,执行到return语句,将返回表达式的值。由函数名语句,将返回表达式的值。由函数名带回给调用函数。带回给调用函数。z3三、函数的调用三、函数的调用intmax(intx,inty);21/99函数调用的执行过程:函数调用的执行过程:1 1、程序在执行过程中一旦遇到一个函数调用,系统首先为每、程序在执行过程中一旦遇到一个函数调用,系统首先为每个形参分配一定数目的存储单元(存储单元的字节数由参数个形参分配一定数目的存储单元(存储单元的字节数由参数的类型决定);然后计算实参表达式的值,并将实参的值送的类型决定);然后计
18、算实参表达式的值,并将实参的值送到形参对应的存储单元中(实参与形参按位置对应);到形参对应的存储单元中(实参与形参按位置对应);2 2、将执行的控制转移到被调用函数的第一个执行语句处开始、将执行的控制转移到被调用函数的第一个执行语句处开始执行,直到函数体末尾或遇到一个执行,直到函数体末尾或遇到一个returnreturn语句为止;语句为止;3 3、当执行到函数体末尾或执行、当执行到函数体末尾或执行returnreturn语句时,如果函数有返语句时,如果函数有返回值,则将控制返回到调用点同时返回一个值,这个返回值回值,则将控制返回到调用点同时返回一个值,这个返回值就是函数调用表达式的值;否则只返
19、回控制。就是函数调用表达式的值;否则只返回控制。控制返回到调用函数之后从函数调用点继续向后执行。控制返回到调用函数之后从函数调用点继续向后执行。22/99四、函数的声明(函数原型)四、函数的声明(函数原型)函数使用必须遵循函数使用必须遵循“先声明、后使用先声明、后使用”原则,因为原则,因为C+编译系统在编译系统在编译时必须先知道该函数实现的形式(接口形式)。编译时必须先知道该函数实现的形式(接口形式)。在一个函数中调用另一个函数需要具备的条件在一个函数中调用另一个函数需要具备的条件.被调用的函数必须已经存在被调用的函数必须已经存在(库函数或用户自定义函数库函数或用户自定义函数)若使用库函数若使
20、用库函数,要在本文件开头用要在本文件开头用#include命令将调用有关库命令将调用有关库函数时所需用到的信息函数时所需用到的信息“包含包含”到本文件中来到本文件中来.#include如果使用用户自定义函数如果使用用户自定义函数,且该函数与调用它的函数且该函数与调用它的函数(主调函数主调函数)在同一个文件中在同一个文件中,则要在主调函数中对被调用的函数作声明则要在主调函数中对被调用的函数作声明.函函数声明通过数声明通过”函数原型函数原型”给出。给出。23/99对于用户自定义函数对于用户自定义函数如果被调用函数的定义位于主调函数的后面,则必须在调用如果被调用函数的定义位于主调函数的后面,则必须在
21、调用函数表达式之前对被调用函数做引用性声明函数表达式之前对被调用函数做引用性声明函数的定义性声明函数的定义性声明:完整的、独立的函数单位,包括函数类:完整的、独立的函数单位,包括函数类型、函数名、形参及其类型,并且具有完整的函数体;型、函数名、形参及其类型,并且具有完整的函数体;函数的引用性声明函数的引用性声明(函数原型函数原型):无函数体部分,一般形式:无函数体部分,一般形式:函数定义的首部函数定义的首部;函数原型必须与函数定义保持一致函数原型必须与函数定义保持一致四、函数的声明(函数原型)四、函数的声明(函数原型)24/99以下情况可以省去对被调函数说明以下情况可以省去对被调函数说明:n如
22、果被调用函数定义的位置或对其进行类型说明的位置在调用函数之前;如果被调用函数定义的位置或对其进行类型说明的位置在调用函数之前;n如果被调用函数不在调用函数所在的源文件中,但用如果被调用函数不在调用函数所在的源文件中,但用#include包含了被调包含了被调用函数所在的文件用函数所在的文件函数原型的一般形式为:函数原型的一般形式为:函数类型函数类型函数名函数名(参数类型参数类型1,参数类型参数类型2);函数类型函数类型函数名函数名(参数类型参数类型1,参数名参数名1,参数类型参数类型2,参数名参数名2);intmax(inta,intb);intmax(int,int);intmax(intx,
23、inty);简单理解为函数定义时的第一行简单理解为函数定义时的第一行+;四、函数的声明(函数原型)四、函数的声明(函数原型)25/99写一程序,实现求长方形,三角形,圆形,梯形的面积,要求写一程序,实现求长方形,三角形,圆形,梯形的面积,要求各种形状分别用一个函数处理。各种形状分别用一个函数处理。程序大致的流程是:程序大致的流程是:首先提问用户要求什么形状态的面积首先提问用户要求什么形状态的面积?然后根据用户的输入然后根据用户的输入,使使用一个用一个switch语句区分处理语句区分处理,分别调用相应的函数分别调用相应的函数.求不同形状态求不同形状态的面积的面积,需要用户输入不同的数据需要用户输
24、入不同的数据,基于本程序的结构基于本程序的结构,我们认为我们认为将这些操作也封装到各函数比较合适。将这些操作也封装到各函数比较合适。实例一:实例一:arintmain()charch;docout面积函数endl;cout0、退出endl1、长方形endl2、三角形endl3、圆形endl4、梯形ch;if(ch=0)break;switch(ch)case1:AreaOfRect();break;case2:AreaOfTriangle();break;case3:AreaOfRound();break;case4:AreaOfTrape();break;/梯形default:cout请在0
25、4之间选择endl;while(true);voidAreaOfRect()intx,y;coutx;couty;cout面积为面积为:(x*y)endl;27/99五、内联函数五、内联函数intmain(void)for(inti=1;i10;i+)couti:dbtest(i)0)?奇数奇数:偶数偶数;频繁调用频繁调用dbtest(),造成栈空间不足和时间浪费造成栈空间不足和时间浪费28/99五、内联函数五、内联函数在在c+中,为了解决一些频繁调用的小函数大量消耗栈空间或者是中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了叫栈内存的问题,特别的引入了inli
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 函数 第四
限制150内