函数函数(Function)是功能抽象的模块.ppt
《函数函数(Function)是功能抽象的模块.ppt》由会员分享,可在线阅读,更多相关《函数函数(Function)是功能抽象的模块.ppt(151页珍藏版)》请在三一办公上搜索。
1、第4章 函数,函数(Function)是功能抽象的模块,函数,参数,返回值,输入流,输出流,第4章 函数,函数(Function)是功能抽象的模块,函数作用 实现一个功能;代码重用 函数是C+程序的重要组件,一个程序文件可以包含若干个函数,无论把一个程序划分为多少个程序模块,只能有一个main函数。,初步的认识,1 定义printstar和print_message函数时,括号内的void表示“没有参数函数”,即调用此函数时不必也不能给出参数。2 程序的执行从main函数开始,调用其他函数后流程回到main函数,最后在main函数中结束整个程序的运行。3 所有函数都是平行的,即在定义函数时是相
2、互独立的。但函数不能嵌套定义,也即在定义一个函数过程中不能又定义另外一个函数,同时也不能把函数的定义部分写在主函数中。4 main可以调用其他函数,各个函数之间可以互相调用,但不能调用main函数。5 main函数所调用的函数,前面必须进行声明。,根据函数的形式:无参函数:调用函数时,不必给出参数有参函数:在调用函数时,要给出参数,函数定义由两部分组成:函数首部和函数操作描述,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,double height)return 3.14*radius*radius*height;void main
3、()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,double height)return 3.14*radius*radius*height;void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,函数定义,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,doubl
4、e height)return 3.14*radius*radius*height;void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,函数调用,函数定义形式,类型 函数名(void)语句序列,4.2 函数参数,3.1.1 函数定义,类型 函数名(形式参数表)语句序列,无参函数,有参函数,形式参数和实际参数,形式参数:在定义函数时函数名后面括号中的变量名称为形式参数实际参数:在主函数中调用一个函数时,函数后面括号中的参数,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函
5、数接口,包括:,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型
6、函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,形式参数表 逗号分隔的参数说明表列,缺省形式参数时不 能省略圆括号。一般形式为:类型 参数1,类型 参数2,类型 参数n,3.1.1 函数定义,函数定义形式,4.2 函数定义,函数头函数接口,类型 函数名(形式参数表)语句序列,函数体函数的实现代码。,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do
7、 you do!endl;,函数返回值类型无返回值,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,函数名,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,形式参数表无参数,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,函数体无 return 语句,3.1.1 函数定义,例3-2,4.2 函数定义,double max(dou
8、ble x,double y)if(x y)return x;else return y;,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数返回值类型,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数名,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;el
9、se return y;,形式参数表,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数体,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,返回值,return 语句形式:return 表达式 或return(表达式)作用:返回函数值 不再执行后续语句,程序控制返回调用点 一个函数体内可以有多个return 语句 表达式 返回值的类型与函数类型不相同时
10、,自动强制转换成函数的类型,3.1.1 函数定义,(1)在定义函数时指定的形参,在未出现函数调用时,他们并不占内存中的存储单元,(所以称他们为形式参数或虚拟参数),表示他们并不是实际存在的数据。只有在发生函数调用时,函数中的形参才被分配内存单元,以便接受从实参传来的数据。在调用结束后,形参所占的内存单元也被释放。(2)实参可以是常量,变量或表达式。(3)定义函数时,必须在函数首部指定形参的类型。(4)实参与形参的类型应相同或赋值兼容。如果两者不相同,则按照赋值的规则进行转换。(5)实参变量对形参变量的数据传递时“值传递”,即单向传递,只有实参传给形参,而不能又形参传回给实参。,4.3 函数的返
11、回值,函数通过匿名对象返回结果值 函数值的类型是匿名对象的类型 return 语句把表达式的值赋给匿名对象,Type FunctionName()/statements return expression;,expression,Type 可以为各种C+基本数据类型、类类型,以及这些类型 的指针或引用,3.2.4 函数的返回类型,(1)函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个固定值带回主函数中。(2)函数值的类型。既然函数有返回值,这个值的类型由定义函数时指定函数值的类型来确定。(3)如果函数值的类型和return语句中的表达式的值不一致,则以函数
12、类型为准,即函数类型决定返回值的类型。,调用形式,函数名(实际参数表列),4.4 函数的调用,3.1.2 函数调用,如果调用无参函数,则“实际参数表列”可以没有,但括号不能省略。如果实参表列包括多个多个参数,则各参数间用逗号隔开。实参和形参的个数应该相等,类型匹配或者赋值兼容,顺序一一对应进行传递数据。,调用形式,函数名(实际参数表),4.4 函数的调用,函数名 函数的入口地址,3.1.2 函数调用,调用形式,函数名(实际参数表),4.4 函数的调用,函数名 函数的入口地址,实际参数表 与形式参数必须在个数、类型、位置一一对应,3.1.2 函数调用,4.4 函数的调用,按函数在语句中的作用来分
13、,可以有以下3种函数调用方式:1 函数语句:把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。printstar();2 函数表达式:函数出现在一个表达式中,要求函数带回一个确定的值以参加表达式的运算。C=2*max(a,b)3 函数参数:函数调用作为一个函数的实参。m=max(a,max(a,b);,4.4 函数调用,#includevoid printmessage()cout How do you do!endl;void main()printmessage();,例3-1,3.1.2 函数调用,4.4 函数调用,#includevoid printmes
14、sage()cout How do you do!endl;void main()printmessage();,函数调用语句,例3-1,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)return x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,3.5)endl;,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)r
15、eturn x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,3.5)endl;,函数调用表达式,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)return x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,a+3.5)endl;,cout max(max(a,b),a+3.5)endl;,实际参数是表达式
16、,3.1.2 函数调用,(1)首先被调用的函数必须是已经存在的函数(是函数库或者用户自己定义的函数)(2)如果是使用库函数,一般还应该在本文件开头用#include命令将有关头文件“包含”到本文件中来。例如,如果用到数学库函数,就用#include(3)如果使用用户自己定义的函数,该函数必须跟主函数在同一个程序单元中,如果位置在主函数之后,则必须在调用此函数之前对被调用函数之前进行声明。,4.4.1 调用函数的前提(调用函数的声明),定义函数和声明函数的区别,定义:对函数功能的确立,包括指定函数名,函数类型,形参及其类型,函数体等。是一个完整的、独立的函数单位。声明:仅把函数的名字,函数类型及
17、其形参的个数,类型和顺序通知编译系统。声明函数中可以不写形参名,而写形参的类型。如:,#include double volume(double,double);void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;double volume(double radius,double height)return 3.14*radius*radius*height;,4.4.2 函数原型,函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序 编译器根
18、据函数原型检查函数调用的正确性 函数原型的形式:类型 函数名(形式参数表);,3.1.3 函数原型,函数声明中也可以不写形参名,而只写形参的类型。,例如:double volume(double,double);,函数原型是声明语句,4.4.2 函数原型,#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout y)return x;else return y;,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,
19、#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout y)return x;else return y;,函数原型的参数表不需要参数名,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);c
20、out y)return x;else return y;,函数调用出现在定义之前函数原型声明是必须的,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,函数定义在调用之前,#include double max(double x,double y)/函数定义 if(x y)return x;else return y;void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout Maximum=m2 endl;,3.1.3 函数原型,4.4.2 函数原型,函数定义在调用之前,#include
21、double max(double x,double y)/函数定义 if(x y)return x;else return y;void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout Maximum=m2 endl;,3.1.3 函数原型,4.4.2 函数原型,math.h中几个常用的数学函数,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main()double PI=3.1415926535;double x,y;x
22、=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main()double PI=3.1415926535;double x,y;x=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,包含头文件,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main(
23、)double PI=3.1415926535;double x,y;x=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,调用库函数,3.1.3 函数原型,C+有三种参数传递机制:值传递指针传递引用传递,4.2 函数参数的传递,3.2 函数参数的传递,4.2.1传值参数,调用函数时,实参表达式的值被复制到相应形参标识的对象中,并按形参类型强制转换 函数内对形参的访问、修改,都在形参的标识对象进行 函数返回时,形参对象被撤消,不影响实参的值 值传送的实参可以是常量、有确定值的变量或表达式 函数返回值通过匿名对象传递,3.
24、2.1 传值参数,1值传递机制,/例3-4 强制类型转换#include void main()float add1(float,float);/函数原型 float add2(int,int);/函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);,3.2.1 传值参数,/例3-4 强制类型转换#include void main()
25、float add1(float,float);/函数原型 float add2(int,int);/函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 Function 功能 抽象 模块
链接地址:https://www.31ppt.com/p-6407410.html