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