第3章函数PPT讲稿.ppt
《第3章函数PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第3章函数PPT讲稿.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章函数章函数第1页,共88页,编辑于2022年,星期一main()fun2()fun1()fun3()funa()funb()func()图图3.1 3.1 函数调用层次关系函数调用层次关系第2页,共88页,编辑于2022年,星期一库函数和自定义函数:库函数和自定义函数:库函数库函数或或标准函数标准函数,是由编译系统预定义的,如一些,是由编译系统预定义的,如一些常用的数学计算函数、字符串处理函数、图形处理函数、标常用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等。准输入输出函数等。库函数都按功能分类,集中说明在不同的头文件中库函数都按功能分类,集中说明在不同的头文件中。
2、用户只需在自己的程序中包含某个头文件,就可直接用户只需在自己的程序中包含某个头文件,就可直接使用该文件中定义的函数。使用该文件中定义的函数。用户根据需要将某个具有相对独立功能的程序定义为函用户根据需要将某个具有相对独立功能的程序定义为函数,称数,称自定义函数自定义函数。第3页,共88页,编辑于2022年,星期一3.1.2 函数的定义函数的定义函数声明的语法形式函数声明的语法形式类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表)语句序列语句序列若无参数,可省略或写若无参数,可省略或写void若无返回值,写若无返回值,写voidl l 形式参数表形式参数表 name1,name2,.,
3、namenl 函数的返回值函数的返回值n由由 return 语句给出,例如:语句给出,例如:return 0;n无返回值的函数(无返回值的函数(void类型),不必写类型),不必写return语句。语句。第4页,共88页,编辑于2022年,星期一/打印一个表头打印一个表头void TableHead()cout*endl;cout*example *endl;cout*endl;int input()/输入满足要求的数据输入满足要求的数据int n;cout输入一个大于输入一个大于5的整数:的整数:n;while(n=b?a:b);1 1)有参函数的参数表中列出所有有参函数的参数表中列出所有形
4、式参数形式参数的类型和参的类型和参数名称。各参数即使类型相同也必须分别加以说明。数名称。各参数即使类型相同也必须分别加以说明。2 2)形式参数简称形参,)形式参数简称形参,只能是变量名只能是变量名,不允许是常量,不允许是常量或表达式。或表达式。3 3)C+C+中不允许函数的嵌套定义,即不允许在一个函数中不允许函数的嵌套定义,即不允许在一个函数中定义另一个函数。中定义另一个函数。void delay(long n)int i;for(i=0;in;i+);/延时一段时间延时一段时间第6页,共88页,编辑于2022年,星期一3.1.3 函数的调用函数的调用函数调用:函数调用:所谓函数调用,就是使程
5、序转去执行函数体。所谓函数调用,就是使程序转去执行函数体。无参函数的调用格式:无参函数的调用格式:函数名函数名()()有参函数的调用格式:有参函数的调用格式:函数名函数名(实际参数表实际参数表)其其中中实实际际参参数数简简称称实实参参,用用来来将将实实际际参参数数的的值值传传递递给形参,因此给形参,因此可以是常量、具有值的变量或表达式可以是常量、具有值的变量或表达式。第7页,共88页,编辑于2022年,星期一程序如下程序如下:#include using namespace std;float max(float a,float b)return(a=b?a:b);int main()floa
6、t x,y;cout输入两个实数:输入两个实数:xy;coutx和和y中中较较大大数数为为max(x,y)endl;return 0;main()函函数数调用调用max(2.5,4.7)函数函数max(2.5,4.7)return 4.7 主程序后续主程序后续语句语句【例【例3.1】输入两个实数,输出其中较大的数。其中求两个实数中的较大输入两个实数,输出其中较大的数。其中求两个实数中的较大数用函数完成。数用函数完成。第8页,共88页,编辑于2022年,星期一3.2 函数的参数传递、返回值及函数声明函数的参数传递、返回值及函数声明 3.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 传
7、值调用和引用调用:传值调用和引用调用:按照参数形式的不同,按照参数形式的不同,C+有两种调用方式:有两种调用方式:传值调用传值调用和和引用调用引用调用。传值调用传递的是实参的值,本章介绍传值调。传值调用传递的是实参的值,本章介绍传值调用。用。第9页,共88页,编辑于2022年,星期一传值调用:传值调用:将实参的值复制给形参,在函数中参加运算的是形参,将实参的值复制给形参,在函数中参加运算的是形参,而实参不会发生任何改变。传值调用起了一种隔离作用。而实参不会发生任何改变。传值调用起了一种隔离作用。第10页,共88页,编辑于2022年,星期一调用调用power(4.6,3)函数函数power(4.
8、6,3)return 97.336 主程序后续语句主程序后续语句n=3x=4.6c=a【例【例3.2】实参和形参对应关系的示例。实参和形参对应关系的示例。float power(float x,int n)/求求x x的的n n次幂次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;第11页,共88页,编
9、辑于2022年,星期一调用调用power(a,3)函数函数power(97,3)return 912673 主程序后续语句主程序后续语句n=3x=4.6c=a【例例32】实参和形参对应关系实参和形参对应关系。float power(float x,int n)/求求x x的的n n次幂次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,
10、x)endl;return 0;第12页,共88页,编辑于2022年,星期一调用调用power(3,4.6)函数函数power(3,4)return 81 主程序后续语句主程序后续语句n=3x=4.6c=a【例例32】实参和形参对应关系。实参和形参对应关系。float power(float x,int n)/求求x x的的n n次幂次幂float p=1;while(n-)p*=x;return p;int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)end
11、l;coutpower(n,x)=power(n,x)endl;return 0;第13页,共88页,编辑于2022年,星期一3.2.2 函数返回值函数返回值returnreturn语句的格式:语句的格式:return 表达式;表达式;【例【例3.3】设计函数,根据三角形的三边长求面积。如果不】设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示信息。能构成三角形,给出提示信息。分析:函数为计算三角形面积,一般三角形分析:函数为计算三角形面积,一般三角形返回面积返回面积值值,若不能构成三角形则,若不能构成三角形则返回返回-1。设计一个主函数完。设计一个主函数完成函数测试。根据返回值
12、情况输出相应结果。成函数测试。根据返回值情况输出相应结果。第14页,共88页,编辑于2022年,星期一【例【例3.33.3】程序:程序:float TriangleArea(float a,float b,float c)if(a+b=c)|(a+c=b)|(b+c=a)return-1;float s;s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c);int main()float a,b,c,area;cout输入三角形三边输入三角形三边a,b,c:abc;area=TriangleArea(a,b,c);if(area=-1)cout(a,b,c )
13、不能构成三角形!不能构成三角形!endl;elsecout三角形三角形(a,b,c )面积为:面积为:areaendl;return 0;第15页,共88页,编辑于2022年,星期一讨论:讨论:函数可以有返回值,也可以没有返回值。对于没有返回值函数可以有返回值,也可以没有返回值。对于没有返回值的函数,功能只是完成一定操作,应将返回值类型定义为的函数,功能只是完成一定操作,应将返回值类型定义为void,函数体内可以没有,函数体内可以没有return语句,当需要在程序指定语句,当需要在程序指定位置退出时,可以在该处放置一个:位置退出时,可以在该处放置一个:return;返回值是如何返回到调用处的?
14、返回值是如何返回到调用处的?第16页,共88页,编辑于2022年,星期一3.2.3 函数声明函数声明 函数声明是函数声明是一条一条以以分号结束分号结束的语句:的语句:类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表);为什么需要函数声明?为什么需要函数声明?函数声明的格式:函数声明的格式:第17页,共88页,编辑于2022年,星期一例如【例例如【例3.33.3】中求三角形面积的】中求三角形面积的函数声明函数声明为:为:float TriangleArea(float a,float b,float c);或或float TriangleArea(float,float,float)
15、;但下面的函数原型是错误的:但下面的函数原型是错误的:int TriangleArea(float,float,float);/错误,返回值类型不同错误,返回值类型不同float TriangleArea(int,int,int);/错误,参数类型不同错误,参数类型不同float TriangleArea(float,float);/错误,参数个数不同错误,参数个数不同float TriangleArea(float a,float b,float c)if(a+b=c)|(a+c=b)|(b+cchoice;while(choice=4);switch(choice)case 1:accou
16、nt_report();break;case 2:engineering_report();break;case 3:marketing_report();break;return 0;第19页,共88页,编辑于2022年,星期一void menu_print()cout”系统功能:系统功能:”endl;cout”1财务报表财务报表”endl;cout”2工程报表工程报表”endl;cout”3市场报表市场报表”endl;cout”选择业务序号:选择业务序号:”;void account_report()/生成财务报表生成财务报表void engineering_report()/生成工程报表
17、生成工程报表 void marketing_report()/生成市场报表;生成市场报表;第20页,共88页,编辑于2022年,星期一【例例3.4】输输 出出 所所 有有 满满 足足 下下 列列 条条 件件 的的 正正 整整 数数m:10m1000且且m、m2、m3均为回文数。均为回文数。分析:分析:回文指左右对称的序列。如回文指左右对称的序列。如121、353等就是回文数。等就是回文数。判断整数是否回文数用函数实现,其思想是将该数各位拆判断整数是否回文数用函数实现,其思想是将该数各位拆开后反向组成新的整数,如果该整数与原数相等则为回文开后反向组成新的整数,如果该整数与原数相等则为回文数。数。
18、m m*m m*m*m11 121 1331101 10201 1030301111 12321 1367631 运行结果:运行结果:第21页,共88页,编辑于2022年,星期一bool palindrome(int);/函数声明函数声明int main()int m;coutsetw(10)msetw(20)m*m“setw(20)m*m*mendl;for(m=11;m1000;m+)if(palindrome(m)&palindrome(m*m)&palindrome(m*m*m)coutsetw(10)msetw(20)m*msetw(20)m*m*0);for(j=0;ji;j+)n
19、=n*10+digitj;return(n=m);第23页,共88页,编辑于2022年,星期一课堂练习课堂练习 编写函数把华氏温度转化为摄氏温度,公编写函数把华氏温度转化为摄氏温度,公式为:式为:C=(F-32)5/9;在主函数中计算输;在主函数中计算输出出30、35、40、45、50、55、60华氏温度对华氏温度对应的摄氏温度对照表。应的摄氏温度对照表。第24页,共88页,编辑于2022年,星期一3.3 全局变量和局部变量全局变量和局部变量3.3.1 变量的存储机制与变量的存储机制与C+的内存布局的内存布局 操操作作系系统统为为一一个个C+C+程程序序的的运运行行所所分分配配的的内内存存分分
20、为为四四个个区区域域,如图所示:如图所示:栈区(函数局部数据)栈区(函数局部数据)全局数据区全局数据区(全局、静态全局、静态)代码区(程序代码)代码区(程序代码)(main()函数局部数据)函数局部数据)自由存储区自由存储区(动态数据动态数据)第25页,共88页,编辑于2022年,星期一 3.3.2 全局变量全局变量 在所有函数之外定义的变量称为在所有函数之外定义的变量称为全局变量全局变量。全全局局变变量量存存放放在在全全局局数数据据区区,因因编编译译器器自自动动将将该该区区清清为为全全0,如如果果用用户户在在定定义义时时不不显显式式给给出出初初始始化化值值,则则等效初始化为全等效初始化为全0
21、。全全局局变变量量可可定定义义在在程程序序开开头头,也也可可定定义义在在中中间间位位置置,该该全全局局变变量量在在定定义义处处之之后后的的任任何何位位置置都都是是可可以以访访问问的的,称称为为可见的可见的。【例【例3.5】多个函数使用全局变量的例子。多个函数使用全局变量的例子。全局变量引入:全局变量引入:第26页,共88页,编辑于2022年,星期一打印打印200调用调用func()函数函数func()200*2=400打印打印400n=100n=100*2=200【例【例3.53.5】多个函数使用全局变量的例子。多个函数使用全局变量的例子。int n=100;void func()n*=2;i
22、nt main()n*=2;coutnendl;func();coutnendl;return 0;第27页,共88页,编辑于2022年,星期一3.3.3 局部变量局部变量 定义在函数内或块内的变量称为定义在函数内或块内的变量称为局部变量局部变量。程序中使用的绝大多数变量都是局部变量。程序中使用的绝大多数变量都是局部变量。局局部部变变量量在在程程序序运运行行到到它它所所在在的的块块时时建建立立在在栈栈中中,该该块块执执行行完完毕毕局局部部变变量量占占有有的的空空间间即即被被释释放放。故故亦亦称称为为自自动动变量变量。局局部部变变量量在在定定义义时时可可加加修修饰饰词词auto,但但通通常常省省
23、略略。局局部变量在定义时若未初始化,其值为部变量在定义时若未初始化,其值为随机数随机数。局部变量引入:局部变量引入:【例【例3.6】使用局部变量的例子。使用局部变量的例子。第28页,共88页,编辑于2022年,星期一打印打印main()中中的的t=3.5调用调用fun()函数函数fun()打印打印fun()中的中的t=5 打印打印main()中的中的t=3.5t=3.5t=5【例【例3.6】使用局部变量的例子。使用局部变量的例子。void fun()auto int t=5;/fun()中的局部变量,中的局部变量,auto可省略可省略coutfun()中的中的t=tendl;int main(
24、)float t=3.5;/main()函数中的局部变量函数中的局部变量coutmain()中的中的t=tendl;fun();coutmain()中的中的t=tendl;return 0;第29页,共88页,编辑于2022年,星期一3.4 函数调用机制函数调用机制 局局部部变变量量占占用用的的内内存存是是在在程程序序执执行行过过程程中中“动动态态”地地建建立立和和释释放的。这种放的。这种“动态动态”是通过栈由系统是通过栈由系统自动自动管理进行的。管理进行的。(1)建立栈空间;)建立栈空间;(6)恢复现场:取主调函数运行状态及返回地址,释放栈空间;)恢复现场:取主调函数运行状态及返回地址,释放
25、栈空间;(7)继续主调函数后续语句。)继续主调函数后续语句。(5)释放被调函数中局部变量占用的栈空间;)释放被调函数中局部变量占用的栈空间;(4)执行被调函数函数体;)执行被调函数函数体;(3)为被调函数中的局部变量分配空间,完成参数传递;)为被调函数中的局部变量分配空间,完成参数传递;(2)保护现场:主调函数运行状态和返回地址入栈;)保护现场:主调函数运行状态和返回地址入栈;调用过程:调用过程:第30页,共88页,编辑于2022年,星期一void fun1(int,int);void fun2(float);int main()int x=1;y=2;fun1(x,y);return o;v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 PPT 讲稿
限制150内