函数与预处理讲稿.ppt
《函数与预处理讲稿.ppt》由会员分享,可在线阅读,更多相关《函数与预处理讲稿.ppt(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 预处理 讲稿
限制150内