函数与预处理讲稿.ppt

上传人:石*** 文档编号:46621673 上传时间:2022-09-27 格式:PPT 页数:66 大小:4.23MB
返回 下载 相关 举报
函数与预处理讲稿.ppt_第1页
第1页 / 共66页
函数与预处理讲稿.ppt_第2页
第2页 / 共66页
点击查看更多>>
资源描述

《函数与预处理讲稿.ppt》由会员分享,可在线阅读,更多相关《函数与预处理讲稿.ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、函数与预处理函数与预处理第一页,讲稿共六十六页哦5.1.1 函数概念的引入函数概念的引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else break;ai+1=x;n+;coutThe numbers are:n;for(i=0;in;i+)coutait;cout*n;第二页,讲稿共六十六页哦

2、函数的引入函数的引入#include void main()static int a20=8,12,19,23,33,39,42,55,62,69,76,85;int n=12,i,x;arrayprint(a,n);coutx;for(i=n-1;i=0;i-)if(aix)ai+1=ai;else break;ai+1=x;n+;arrayprint(a,n);void arrayprint(int a,int n)coutThe numbers are:n;for(i=0;in;i+)coutait;coutab;s=add(a,b);coutsendl;第四页,讲稿共六十六页哦函数说明

3、函数说明数据类型数据类型数据类型数据类型 函数名函数名函数名函数名(形参列表形参列表形参列表形参列表)double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zab;s=add(a,b);coutsendl;double area(double x,y,z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(s-z);return s;第五页,讲稿共六十六页哦函数体函数体例例1 无参函数无参函数display_sum,用来计算两,用来计算

4、两个数之和。个数之和。#include void display_sum()int x,y,sum;cout Enter a and b:x y;sum=x+y;cout x+y=sum endl;void main()display_sum();由由花花括括号号所所括括起起的的语语句句序序列列,是是完完成成函函数数功功能能所所要要执执行行的的具具体体操操作作。当当函函数数执执行行结结束束需需要要返返回回一一个个值值时时,在在这这个个函函数数体体中中还还必须有一个必须有一个return语句。语句。例例2 有有参参函函数数sum,用用于于求求两两个数之和。个数之和。int sum(int x,i

5、nt y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;第六页,讲稿共六十六页哦 N!三角形面积double power(int n)int i;double l=1;for(i=1;i=n;i+)l*=i;return l;double area(double x,double y,double z)double s;if(x+yz|x+zy|y+zx)return 0;s=(x+y+z)/2;s=sqrt(s*(s-x)*(s-y)*(s-z);return s;第七页,讲稿共六十六页哦5.1.3

6、return语句语句_语句格式:语句格式:return;/无值无值voidreturn 表达式;表达式;/有值有值return(表达式表达式);/有值有值_函函数数体体中中的的流流程程控控制制语语句句。先先计计算算表表达达式式的的值值,然然后后从从被被调调函函数数返返回回到到主主调调函函数数,表表达达式式的的值值作作为为函函数数的的返返回回值值。(注注意意:只只能能返回一个值返回一个值)_函函数数值值的的类类型型:以以函函数数定定义义的的类类型型为为准准,若若不不同同,需需将将return语语句表达式的值转换类型。句表达式的值转换类型。_无无返返回回值值void时时,可可无无return语语句

7、,执行到函数体句,执行到函数体时返回。时返回。例例 有有参参函函数数sum,用用于于求求两两个数之和。个数之和。int sum(int x,int y)int temp;temp=x+y;return temp;void main()int s=sum(10,5);cout”sum=”s;第八页,讲稿共六十六页哦return语句语句_在在一一个个函函数数中中可可有有多多个个return语语句句,但但每每次次被被调调用用只只能能执执行行一一个个return语语句句。例例,判判断断素素数数(或求三角形面积)(或求三角形面积)#includevoid main()int i;for(i=2;i100

8、;i+)if(sushu(i)coutti;#includeint sushu(int n)int k,i;k=sqrt(double)n);for(i=2;i=k;i+)if(n%i=0)return 0;return 1;第九页,讲稿共六十六页哦5.1.4 函数声明函数声明_函数函数原型原型的形式:的形式:数据类型数据类型 被调函数的函数名被调函数的函数名(形参类型说明形参类型说明);例:例:double area(double,double,double);_参数类型说明列表是用逗号隔开的的参数类型说明,其参数个数和类参数类型说明列表是用逗号隔开的的参数类型说明,其参数个数和类型必须和函

9、数定义中的参数个数和类型一致。也可以给出参数名,但型必须和函数定义中的参数个数和类型一致。也可以给出参数名,但对编译器没有什么意义。对编译器没有什么意义。_函数原型用来说明一个函数的返回值类型、参数的个数和类型。使编译器检函数原型用来说明一个函数的返回值类型、参数的个数和类型。使编译器检查该函数被调用的正确与否。查该函数被调用的正确与否。函数必须先说明后调用。函数必须先说明后调用。_调用库函数时,一般在文件的开头用调用库函数时,一般在文件的开头用#include 命令将包含该函数命令将包含该函数原型原型的的头文件加入到程序中头文件加入到程序中。_调调用用户自定义函数,用用户自定义函数,当对一个

10、函数的调用出现在该函数定义之前时,必须当对一个函数的调用出现在该函数定义之前时,必须先对函数进行原型声明。即先对函数进行原型声明。即当被调函数的定义写在主调函数后面时才需声当被调函数的定义写在主调函数后面时才需声明明。第十页,讲稿共六十六页哦_实实参参表表可可包包含含多多个个参参数数,用用逗逗号号分分开开;可可为为常常量量、变变量量、函函数数调调用用、表表达达式式(先先求求值值,再再将将值值传传递递给形参)。给形参)。_要求实参的类型和个数要与形参一致。要求实参的类型和个数要与形参一致。_可以没有参数,但圆括号一定要有,不能省略。可以没有参数,但圆括号一定要有,不能省略。_函数调用一般用来构成

11、表达式。函数调用一般用来构成表达式。5.2.1 函数的调用形式函数的调用形式一、函数调用形式:一、函数调用形式:函数名函数名(实参列表实参列表)5.2 函数的调用函数的调用t=sqrt(t*(t-a)*(t-b)*(t-c);s=area(a,b,c);s=sum(5,7);例例第十一页,讲稿共六十六页哦二、函数调用过程1 1在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被在主调函数中通过函数调用转到被调函数从而开始执行被调函数。调函数。调函数。调函数。2 2执行被调函数时,遇到执行被调函数时

12、,遇到执行被调函数时,遇到执行被调函数时,遇到returnreturn语句或函数体的右大括号语句或函数体的右大括号语句或函数体的右大括号语句或函数体的右大括号,则返回主调函数继续执行下面的语句。则返回主调函数继续执行下面的语句。则返回主调函数继续执行下面的语句。则返回主调函数继续执行下面的语句。3 3函数间相互独立:函数间相互独立:函数间相互独立:函数间相互独立:各函数中的变量互不相关,可同名各函数中的变量互不相关,可同名各函数中的变量互不相关,可同名各函数中的变量互不相关,可同名。主调函数主调函数被调函数被调函数float area(x,y,z)return smain()s=area(a,

13、b,c);实实 参参形形 参参 参数传递?参数传递?返回值返回值第十二页,讲稿共六十六页哦_在在函函数数调调用用时时,按按照照书书写写参参数数的的先先后后次次序序(与与名名字字无无关关),将实参的值,将实参的值(先计算先计算)传递给对应的形参。传递给对应的形参。_要求实参和形参的类型和个数要一致。要求实参和形参的类型和个数要一致。_实实参参将将值值“单单向向性性”的的“值值传传递递”给给形形参参。在在被被调调函函数数中中对形参的值的修改不会影响到实参。对形参的值的修改不会影响到实参。_当当函函数数未未被被调调用用时时,形形参参不不占占内内存存。当当函函数数被被调调用用时时,为为形形参参分分配配

14、内内存存,并并将将实实参参的的值值传传递递给给形形参参;函函数数调调用用结结束束时,释放形参所占存储空间。时,释放形参所占存储空间。传值调用:先计算实参的值,将实参的值传递给形参。传值调用:先计算实参的值,将实参的值传递给形参。一、传递变量的值一、传递变量的值5.2.2 函数调用的过程函数调用的过程编写函数,交换两个变量的值练习:练习:编写编写convert函数实现将任意一个正整数逆序,若主函数中输函数实现将任意一个正整数逆序,若主函数中输入入123,调用该函数处理,并将结果,调用该函数处理,并将结果321在主函数中输出。在主函数中输出。第十三页,讲稿共六十六页哦_地址传递:地址传递:_引用调

15、用:通过在函数中使用引用参数实现地址传递。引用调用:通过在函数中使用引用参数实现地址传递。_把形参声明为引用方式,在参数名字前加上引用运算符把形参声明为引用方式,在参数名字前加上引用运算符&。引用时给已知变量起一个别名,并不占用存储空间。引用时给已知变量起一个别名,并不占用存储空间。#include void swap(int&x,int&y);void main()int a,b;cinab;swap(a,b);coutabendl;void swap(int&x,int&y)int t=x;x=y;y=t;利用引用传递机制进行参数调用,有两个优点利用引用传递机制进行参数调用,有两个优点利用

16、引用传递机制进行参数调用,有两个优点利用引用传递机制进行参数调用,有两个优点(1)在函数内对形参的修改实际是针对实参的修改。)在函数内对形参的修改实际是针对实参的修改。(2)在传递大型的数据时,不再有高额的内存单元与时间的开销。)在传递大型的数据时,不再有高额的内存单元与时间的开销。(3)容易使用,易于维护)容易使用,易于维护第十四页,讲稿共六十六页哦5.3 指针与函数#includeint fun(int*);void main()int a=8,b;b=fun1(&a);couta=“a“b=“b;int fun1(int*p)int x=4;*p+=x;coutx*p“n”;return

17、*p*x;8abpa=12b=484x48125.3.1 指针变量作为函数参数4 12第十五页,讲稿共六十六页哦#includeint fun(int*);void main()int a=8,b;b=fun1(&a);couta=“a“b=“b;int fun1(int*p)int x=4;*p+=x;coutx*p“n”;return*p*x;#includeint fun(int);void main()int a=8,b;b=fun1(a);couta=“a“b=“b;int fun1(int p)int x=4;p+=x;coutxp“n”;return p*x;a=12b=484

18、12传变量的值和地址的区别a=8b=484 12第十六页,讲稿共六十六页哦swap(int*x,int*y)int t;t=*x;*x=*y;*y=t;#includevoid main()int a,b;a=5;b=9;swap(&a,&b);cout“a=“a“b=“b;swap(int x,int y)int t;t=x;x=y;y=t;#includevoid main()int a,b;a=5;b=9;swap(a,b);cout“a=“a“b=“b;程序程序 1程序程序 2 P141P141例例5.135.13:编写函数实现两数的互换:编写函数实现两数的互换主调函数主调函数被调函数

19、被调函数实实 参参形形 参参结果有何不同?结果有何不同?第十七页,讲稿共六十六页哦主调函数主调函数被调函数被调函数includeint swap(int,int);void main()int a,b;a=5;b=9;swap(a,b);cout“a=“a“b=“b;swap(int x,int y)int t;t=x;x=y;y=t;55ab实实 参参形形 参参99xyab程序程序 1xy95第十八页,讲稿共六十六页哦主调函数主调函数被调函数被调函数&a实实 参参形形 参参&b*x*yabswap(int*x,int*y)int t;t=*x;*x=*y;*y=t;#includeint s

20、wap(int*,int*);void main()int a,b;a=5;b=9;swap(&a,&b);cout“a=”a“b=“b;5ab9程序程序 2xy&b&a95第十九页,讲稿共六十六页哦指针变量作为函数参数_指针作为函数的参数时,是以变量的地址作为实参调指针作为函数的参数时,是以变量的地址作为实参调用一个函数,即作为参数传递的不是数据本身,而是用一个函数,即作为参数传递的不是数据本身,而是数据的地址。数据的地址。_在主调函数中,要以变量的存储地址作为实参来调用另一在主调函数中,要以变量的存储地址作为实参来调用另一个函数。个函数。_被调用函数的形参必须是可以接受地址值的指针变量,而

21、被调用函数的形参必须是可以接受地址值的指针变量,而它的数据类型应与被传送的数据类型保持一致。它的数据类型应与被传送的数据类型保持一致。第二十页,讲稿共六十六页哦_用用数数组组名名作作实实参参,就就是是将将数数组组的的首首地地址址传传递递给给形形参参,实实参参数组与形参数组占用同一段内存。数组与形参数组占用同一段内存。_则则在在被被调调函函数数中中对对形形参参数数组组元元素素的的进进行行赋赋值值,就就是是对对主主调调函函数数的的实实参参数数组组进进行行操操作作,会会在在函函数数返返回回时时将将对对数数组组的的修改结果带回主调函数。修改结果带回主调函数。_形参为一维数组名时,元素个数可省。形参为一

22、维数组名时,元素个数可省。_一一般般将将所所处处理理数数组组中中元元素素个个数数也也作作为为形形参参,在在调调用用时时将将数数组中使用的元素个数传递给被调函数。组中使用的元素个数传递给被调函数。_数组名作实参时,形参也可为指针。数组名作实参时,形参也可为指针。5.3.2 函数调用中数组的传递函数调用中数组的传递(数组名做函数参数)(数组名做函数参数)第二十一页,讲稿共六十六页哦#includevoid sort(int),output(int);void main()int a10,i;/*INPUT*/coutnInput data:;for(i=0;iai;output(a);sort(a

23、);output(a);void sort(int x)int i,j,t;for(i=0;i9;i+)for(j=0;jxj+1)t=xj;xj=xj+1;xj+1=t;void output(int x)int i;coutThe datum are:n;for(i=0;i10;i+)coutxi“t”;coutn;数组名作参数例数组名作参数例1-1a0a(形参为数组名)(形参为数组名)(形参为数组名)(形参为数组名)x0 x第二十二页,讲稿共六十六页哦#include#define SIZE 40void sort(int*),output(int*);void main()int aS

24、IZE,i,n;coutn;for(i=0;iai;output(a,n);sort(a,n);output(a,n);void sort(int x,int n)int i,j,t;for(i=0;in-1;i+)for(j=0;jxj+1)t=xj;xj=xj+1;xj+1=t;void output(int x,int n)int i;coutThe datum are:n;for(i=0;in;i+)coutxi“t”;coutn;数组名作参数例数组名作参数例1-2(形参包括元素个数)(形参包括元素个数)(形参包括元素个数)(形参包括元素个数)第二十三页,讲稿共六十六页哦void so

25、rt(int*px,int n)int i,j,t;for(i=0;in-1;i+)for(j=0;jpxj+1)t=pxj;pxj=pxj+1;pxj+1=t;void output(int*px,int n)int i;coutThe datum are:n;for(i=0;in;i+)coutpxi“t”;coutn;数组名作参数例数组名作参数例1-3#include#define SIZE 40void main()void sort(),output();int aSIZE,i,n;coutn;for(i=0;iai;output(a,n);sort(a,n);output(a,n)

26、;(形参为指针变量)(形参为指针变量)(形参为指针变量)(形参为指针变量)第二十四页,讲稿共六十六页哦总结总结_如果程序是对数组进行处理,应采用地址传递,因为实如果程序是对数组进行处理,应采用地址传递,因为实参与形参共用同一存储空间。参与形参共用同一存储空间。_如果程序希望从函数中返回多个值,形参应声明为指针或如果程序希望从函数中返回多个值,形参应声明为指针或引用。引用。_如果如果 程序希望形成的改变能影响到相应的形参,形参应程序希望形成的改变能影响到相应的形参,形参应声明为指针变量或引用。声明为指针变量或引用。_除以上情况外,应采用变量的值传递方式,可以减少函数间除以上情况外,应采用变量的值

27、传递方式,可以减少函数间的关联。的关联。第二十五页,讲稿共六十六页哦5.3.3 函数指针函数指针_一个函数在编译时被分配一个入口地址(第一条指令的地址)一个函数在编译时被分配一个入口地址(第一条指令的地址),可以将该地址赋给一个指针变量,该指针中存储的就是该,可以将该地址赋给一个指针变量,该指针中存储的就是该函数的入口地址,这样的指针为函数指针。函数的入口地址,这样的指针为函数指针。_函数指针定义的一般形式为:函数指针定义的一般形式为:数据类型数据类型(*指针变量名)指针变量名)(形参列表)形参列表)_ 在说明函数指针时,要同时描述这个指针所指向的形参类在说明函数指针时,要同时描述这个指针所指

28、向的形参类型和个数,及函数的返回值类型,例如:型和个数,及函数的返回值类型,例如:Int(*funp)(int a,int b)_函数指针的意义:在进行指针运算时的结果是使程序控制转函数指针的意义:在进行指针运算时的结果是使程序控制转移至该函数指针所指向的函数的入口地址,从而开始执行该移至该函数指针所指向的函数的入口地址,从而开始执行该函数。函数。第二十六页,讲稿共六十六页哦#include int func(int a,int b);void main()int(*pf)(int a,int b);pf=func;coutinput two number:mn;int result=(*pf

29、)(m,n);coutresult=resultendl;int func(int a,int b)return a+b;定义指向调用第二十七页,讲稿共六十六页哦设一个函数设一个函数设一个函数设一个函数processprocessprocessprocess,在调用它时,每次实现的功能不同,第一次调用找,在调用它时,每次实现的功能不同,第一次调用找,在调用它时,每次实现的功能不同,第一次调用找,在调用它时,每次实现的功能不同,第一次调用找出两个数的最大值,第二次调用找出两个数的最小值,第三次调用求和。出两个数的最大值,第二次调用找出两个数的最小值,第三次调用求和。出两个数的最大值,第二次调用找

30、出两个数的最小值,第三次调用求和。出两个数的最大值,第二次调用找出两个数的最小值,第三次调用求和。#include int max(int x,int y);int min(int x,int y);int add(int x,int y);void process(int x,int y,int(*fun)(int,int);void main()int a,b;coutab;coutmax=;process(a,b,max);coutmin=;process(a,b,min);couty?x:y);int min(int x,int y)return(xy?x:y);int add(int

31、 x,int y)return x+y;void process(int x,int y,int(*fun)(int,int)int result;result=(*fun)(x,y);coutresultendl;第二十八页,讲稿共六十六页哦 在程序设计中使用函数指针,注意:在程序设计中使用函数指针,注意:_函数指针时一个指向函数的指针变量,专门用来存放函数的函数指针时一个指向函数的指针变量,专门用来存放函数的入口地址,因此在一段程序中,一个指针函数可被多次赋值,入口地址,因此在一段程序中,一个指针函数可被多次赋值,指向不同的函数。指向不同的函数。_函数指针只能指向函数的入口地址,不能指向函

32、数中某一条函数指针只能指向函数的入口地址,不能指向函数中某一条指令,对函数指针进行如下操作是无意义的:指令,对函数指针进行如下操作是无意义的:p+,p+a;第二十九页,讲稿共六十六页哦5.4 函数的嵌套调用函数的嵌套调用main()调用调用a函数函数.a 函数函数调用调用b函数函数b函数函数在被调函数中,又调用了函数在被调函数中,又调用了函数-嵌套调用嵌套调用第三十页,讲稿共六十六页哦#includedouble area(double,double,double);void main()double a,b,c,s;coutabc;s=area(a,b,c);cout“area=“s“n”;

33、#include double area(double x,double y,double z)double s;if(x+yz|x+zy|y+z1n!=#includevoid main()int n;double y;cinn;if(n0)coutn0,data error!;elsey=fac(n);coutn“!=“y;直接调用直接调用(1)写出调用终止条件)写出调用终止条件(2)写出计算公式)写出计算公式第三十三页,讲稿共六十六页哦用递归方法求用递归方法求n!(3!)double fac(int n)f=fac(n-1)*n;return f;void main()y=fac(n);

34、double fac(int n)f=fac(n-1)*n;return f;double fac(int n)if(n=0|n=1)f=1;return f;3211 12 26 6v执行过程执行过程第三十四页,讲稿共六十六页哦定义递归函数时应遵循以下原则定义递归函数时应遵循以下原则_有一个能结束递归调用的条件。有一个能结束递归调用的条件。_有一个递归调用语句有一个递归调用语句练习:用递归方法求练习:用递归方法求Fibonacci数列的前数列的前n项。项。第三十五页,讲稿共六十六页哦5.6内联函数和重载函数内联函数和重载函数5.6.1内联函数内联函数_函数调用时,首先需要保存主调函数的现场和

35、返回地址,然函数调用时,首先需要保存主调函数的现场和返回地址,然后程序转移到被调函数的起始地址开始执行。被调函数执行后程序转移到被调函数的起始地址开始执行。被调函数执行结束后,先回复主调函数的现场,取出返回地址并将返回值结束后,先回复主调函数的现场,取出返回地址并将返回值赋予函数调用本身。最后在返回地址处开始继续执行。赋予函数调用本身。最后在返回地址处开始继续执行。_对于函数体比较小且功能简单的函数,如果反复多次调用,对于函数体比较小且功能简单的函数,如果反复多次调用,系统开销也比较大。系统开销也比较大。_内联函数,编译器在编译时,并不生成普通的函数,而是将内联函数,编译器在编译时,并不生成普

36、通的函数,而是将程序中出现的内联函数的调用表达式用该内联函数的函数体程序中出现的内联函数的调用表达式用该内联函数的函数体进行替换,这样虽然可以增加目标代码量,但不会产生由于进行替换,这样虽然可以增加目标代码量,但不会产生由于函数调用而引起的在时间和空间中转来转去。函数调用而引起的在时间和空间中转来转去。第三十六页,讲稿共六十六页哦2.内联函数的定义内联函数的定义_在函数头前加关键字在函数头前加关键字 inline用内联函数计算圆面积。用内联函数计算圆面积。#include const double P=3.14;inline double area(double r);void main()d

37、ouble r=3.0;double s;s=area(r);coutthe area is sendl;inline double area(double r)return P*r*r;第三十七页,讲稿共六十六页哦3.使用内联函数应注意的事项使用内联函数应注意的事项_内联函数也遵循定义在前,调用在后的原则。内联函数也遵循定义在前,调用在后的原则。_内联函数不允许有循环语句,内联函数不允许有循环语句,Switch语句等负责的语句,如语句等负责的语句,如有这些,则按普通函数处理有这些,则按普通函数处理_内联函数的函数体不可过大内联函数的函数体不可过大 15行为宜行为宜_递归函数不能被用作内联函数

38、。递归函数不能被用作内联函数。_类结构中,类体内定义的成员函数都是内联函数。类结构中,类体内定义的成员函数都是内联函数。第三十八页,讲稿共六十六页哦5.6.2 重载函数重载函数_求一个数的绝对值:求一个数的绝对值:Int abs(int)Long labs(long);Double fabs(double);_函数功能相同,但名称不同。函数功能相同,但名称不同。_重载函数:使得同一个函数名可以对应着不同的函数实现。重载函数:使得同一个函数名可以对应着不同的函数实现。_定义:所谓函数的重载就是指建立多个同名的函数,但函数定义:所谓函数的重载就是指建立多个同名的函数,但函数的形参表必须互不相同。的

39、形参表必须互不相同。Int abs(int)Long abs(long);Double abs(double);第三十九页,讲稿共六十六页哦2.调用重载函数时选择的原则调用重载函数时选择的原则_重载函数至少要在参数类型、参数个数或参数顺序有所不同,重载函数至少要在参数类型、参数个数或参数顺序有所不同,仅仅是返回值类型不同时不够的。仅仅是返回值类型不同时不够的。Int fun(int,double);Int fun(double,int);Void fun(int,double)_重载函数的选择是按下述顺序查找的:将实参类型与所有别重载函数的选择是按下述顺序查找的:将实参类型与所有别调用的重载函

40、数的形参一一比较,显示查找到调用的重载函数的形参一一比较,显示查找到一个严格匹配一个严格匹配的,如找到了就调用该函数;再是通过的,如找到了就调用该函数;再是通过内部数据转换内部数据转换查找一查找一个匹配的,如找到了就调用该函数。最后是用过用户所定义个匹配的,如找到了就调用该函数。最后是用过用户所定义的的强制转换强制转换来查找一个匹配的。来查找一个匹配的。可以重载可以重载不可重载不可重载第四十页,讲稿共六十六页哦重载函数举例:编程求两个或三个操作数之和重载函数举例:编程求两个或三个操作数之和_#include _int sum(int x,int y);_int sum(int x,int y,

41、int z);_double sum(double x,double y);_double sum(double x,double y,double z);_void main()_coutsum(2,5)endl;_coutsum(2,4,7)endl;_coutsum(2.5,5.9)endl;_coutsum(2.9,5.4,3.4)endl;_int sum(int x,int y)return x+y;int sum(int x,int y,int z)return x+y+z;double sum(double x,double y)return x+y;double sum(do

42、uble x,double y,double z)return x+y+z;第四十一页,讲稿共六十六页哦5.7 默认参数的函数默认参数的函数_C+C+中,允许在函数声明或定义时为一个或多个形参指定默认值,这样,当中,允许在函数声明或定义时为一个或多个形参指定默认值,这样,当进行函数调用时,如果省略了对应位置上的实参,则在执行被调函数时,以进行函数调用时,如果省略了对应位置上的实参,则在执行被调函数时,以该形参的默认值进行运算。该形参的默认值进行运算。1.1.默认参数的声明:默认参数一般在函数声明中提高。如果程序中即有函数的声明,默认参数的声明:默认参数一般在函数声明中提高。如果程序中即有函数的

43、声明,又有函数定义,则定义函数时不允许再指定默认值;如果程序中只有函数的定义又有函数定义,则定义函数时不允许再指定默认值;如果程序中只有函数的定义而没有函数的声明,则默认参数可出现在函数定义中。而没有函数的声明,则默认参数可出现在函数定义中。Void point(int x=3,int y=4);/Void point(int x=3,int y=4);/声明中给出默认值声明中给出默认值Void point(int x,int y)/Void point(int x,int y)/定义中不可再指定默认值定义中不可再指定默认值2.2.默认参数的顺序:如果一个函数中有多个默认参数,则默认参数值的定

44、义必须遵循从右至左默认参数的顺序:如果一个函数中有多个默认参数,则默认参数值的定义必须遵循从右至左的顺序。即:如果函数的某个形参没有默认值,则它前面的参数就不能有默认值。的顺序。即:如果函数的某个形参没有默认值,则它前面的参数就不能有默认值。3.3.默认值可以使全局变量、全局常量,甚至可以是一个函数,但不能是局部变默认值可以使全局变量、全局常量,甚至可以是一个函数,但不能是局部变量量Void point(int=3,int=4);第四十二页,讲稿共六十六页哦5.8 作用域与生命期作用域与生命期_5.8.1 作用域作用域 _5.8.2 局部变量和全局变量局部变量和全局变量_5.8.3 生命期生命

45、期第四十三页,讲稿共六十六页哦5.8.1 作用域作用域_函数原型作用域:作用范围:始于函数原型说明的左括号,函数原型作用域:作用范围:始于函数原型说明的左括号,结束与函数原型说明的右括号处。例如:结束与函数原型说明的右括号处。例如:#include int sum(int x,int y);int sum(int x,int y);void main()int a=9,b=6;coutsum(a,b);int sum(int a,int b)return a+b;作用范围_块作用域:函数中一对花括号括起的代码区域。例如:形参、块作用域:函数中一对花括号括起的代码区域。例如:形参、复合语句中声明

46、的变量、函数体内声明的普通变量。复合语句中声明的变量、函数体内声明的普通变量。第四十四页,讲稿共六十六页哦_函数作用域函数作用域:在该函数内任何地方可见。在该函数内任何地方可见。C+中,只有中,只有Goto语语句的标号具有函数作用域。句的标号具有函数作用域。_类作用域:类作用域:_文件作用域:在函数或类之外说明的标识符具有文件作用域,文件作用域:在函数或类之外说明的标识符具有文件作用域,其作用范围为从定义点开始,到文件结尾结束。其作用范围为从定义点开始,到文件结尾结束。第四十五页,讲稿共六十六页哦#include int a;int sum(int x,int y)void main()int

47、 b=6;a=3;sum(a,b);coutab=0&a)t=sqrt(t);x1=(-b+t)/(2*a);x2=(-b-t)/(2*a);return 1;return 0;#include#include int root(double,double,double);double x1,x2;void main()double a,b,c;coutabc;if(root(a,b,c)cout“x1=“x1“tx2=“x2“n”;第五十一页,讲稿共六十六页哦#includeint x=1,y=2,z=3;fun1(int x)int z;z=x+y;y=1;cout“x=“x“y=“y“z

48、=“z;return z;void main()int a=10;x=fun1(a);coutx=“x“y=“y“z=“z“n”;F全局变量F局部变量输出结果:输出结果:x=10,y=1,z=12局部变量与全局变量同名局部变量与全局变量同名局部变量与全局变量同名局部变量与全局变量同名fun1(10)10 x10+2z1yx=12,y=1,z=3第五十二页,讲稿共六十六页哦5.8.3 生命期一、存储类别一、存储类别二、局部变量的存储类别二、局部变量的存储类别三、全局变量的存储类别三、全局变量的存储类别四、作用域和生命期四、作用域和生命期第五十三页,讲稿共六十六页哦变量的存储类别变量的存储类别静态

49、存储方式静态存储方式:程序运行期间分配固定的存储空间的方式。程序运行期间分配固定的存储空间的方式。动态存储方式动态存储方式:程序运行期间根据需要进行动态的分配存储空程序运行期间根据需要进行动态的分配存储空间方式。间方式。程序区程序区静态存储区静态存储区动态存储区动态存储区形参、自动局形参、自动局部变量、函数部变量、函数调用的现场等调用的现场等全局变量、全局变量、静态局部变量静态局部变量5.8.3生命期第五十四页,讲稿共六十六页哦变量的存储类型1、自动存储类型、自动存储类型auto自动变量存储在动态存储区;当函数被调用时随机分配存储空间,自动变量存储在动态存储区;当函数被调用时随机分配存储空间,

50、返回时释放返回时释放(其初始化相当于一次赋值,函数每次被调用时都执行其初始化相当于一次赋值,函数每次被调用时都执行);是局;是局部变量的缺省存储类型。部变量的缺省存储类型。2、静态存储类型、静态存储类型static静态变量存储在静态存储区;在执行程序的整个过程中,不管函数静态变量存储在静态存储区;在执行程序的整个过程中,不管函数是否被调用,都占据其存储空间;只初始化一次是否被调用,都占据其存储空间;只初始化一次3、外部存储类型、外部存储类型extern全局变量的缺省类型为全局变量的缺省类型为extern类型类型4、寄存器存储类型、寄存器存储类型register寄存器变量存储在寄存器中寄存器变量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁