函数41函数的声明与调.ppt

上传人:牧羊曲112 文档编号:6407356 上传时间:2023-10-27 格式:PPT 页数:81 大小:682.50KB
返回 下载 相关 举报
函数41函数的声明与调.ppt_第1页
第1页 / 共81页
函数41函数的声明与调.ppt_第2页
第2页 / 共81页
函数41函数的声明与调.ppt_第3页
第3页 / 共81页
函数41函数的声明与调.ppt_第4页
第4页 / 共81页
函数41函数的声明与调.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《函数41函数的声明与调.ppt》由会员分享,可在线阅读,更多相关《函数41函数的声明与调.ppt(81页珍藏版)》请在三一办公上搜索。

1、第4章 函数,4.1 函数的声明与调用,4.2 函数参数的传递,4.3 作用域与生存期,4.4 局部变量和全局变量,4.5 变量的存储类别,4.6 函数的嵌套和递归,4.7 预处理命令,4.8 C+语言的库函数,小结,第4章 函数,函数(Function)是功能抽象的模块,函数,参数,返回值,输入流,输出流,第4章 函数,函数(Function)是功能抽象的模块,函数作用 任务划分;代码重用 函数是C+程序的重要组件,函数定义由两部分组成:函数首部和函数操作描述 函数调用是通过表达式或语句激活并执行函数代码的过程,4.1 函数的定义和调用,/求圆柱体体积#include double volu

2、me(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,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、形式,类型 函数名(形式参数表)语句序列,4.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,函数头函数接口,包括:,4.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,4.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,4.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)

5、语句序列,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,形式参数表 逗号分隔的参数说明表列,缺省形式参数时不 能省略圆括号。一般形式为:类型 参数1,类型 参数2,类型 参数n,4.1.1 函数定义,函数定义形式,函数头函数接口,类型 函数名(形式参数表)语句序列,函数体函数的实现代码。,4.1.1 函数定义,例4-1,void printmessage()cout How do you do!endl;,4.1.1 函数定义,例4-1,void printmessage()cout How do y

6、ou do!endl;,函数返回值类型无返回值,4.1.1 函数定义,例4-1,void printmessage()cout How do you do!endl;,函数名,4.1.1 函数定义,例4-1,void printmessage()cout How do you do!endl;,形式参数表无参数,4.1.1 函数定义,例4-1,void printmessage()cout How do you do!endl;,函数体无 return 语句,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else re

7、turn y;,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else return y;,函数返回值类型,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else return y;,函数名,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else return y;,形式参数表,4.1.1 函数定义,例4-2,double max(double x,double y)i

8、f(x y)return x;else return y;,函数体,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else return y;,返回值,return 语句形式:return 表达式 或return(表达式)作用:返回函数值 不再执行后续语句,程序控制返回调用点 一个函数体内可以有多个return 语句 表达式 返回值的类型与函数类型不相同时,自动强制转换成函数的类型,4.1.1 函数定义,例4-2,double max(double x,double y)if(x y)return x;else ret

9、urn y;,Type FunctionName()/statements return expression;void FunctionName()/statements return;/可省略,4.1.1 函数定义,调用形式,函数名(实际参数表),4.1.2 函数调用,调用形式,函数名(实际参数表),函数名 函数的入口地址,4.1.2 函数调用,调用形式,函数名(实际参数表),函数名 函数的入口地址,实际参数表 与形式参数必须在个数、类型、位置一一对应,4.1.2 函数调用,#includevoid printmessage()cout How do you do!endl;void ma

10、in()printmessage();,例4-3,4.1.2 函数调用,#includevoid printmessage()cout How do you do!endl;void main()printmessage();,函数调用语句,例4-3,4.1.2 函数调用,例4-4,#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;,4.1.2 函数调用,例4-4,#inclu

11、dedouble 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;,函数调用表达式,4.1.2 函数调用,例4-4,#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

12、(max(a,b),a+3.5)endl;,实际参数是表达式,4.1.2 函数调用,函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序 编译器根据函数原型检查函数调用的正确性 函数原型的形式:类型 函数名(形式参数表);,4.1.3 函数原型,函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序 编译器根据函数原型检查函数调用的正确性 函数原型的形式:类型 函数名(形式参数表);,函数原型是声明语句,4.1.3 函数原型,#include double max(double

13、,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;,使用函数原型,4.1.3 函数原型,#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;,函数原型的参数表不需要参数名,使用函数原型,

14、4.1.3 函数原型,#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;,函数调用出现在定义之前函数原型声明是必须的,使用函数原型,4.1.3 函数原型,函数定义在调用之前,#include double max(double x,double y)/函数定义 if(x y)return x;else return y;void main()double a,b,

15、c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout Maximum=m2 endl;,4.1.3 函数原型,函数定义在调用之前,#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;,4.1.3 函数原型,math.h中几个常用的数学函数,4.1.3 函数原型,

16、/例4-5 用库函数求正弦和余弦值#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;,4.1.3 函数原型,/例4-5 用库函数求正弦和余弦值#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;,包含头

17、文件,4.1.3 函数原型,/例4-5 用库函数求正弦和余弦值#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;,调用库函数,4.1.3 函数原型,内联函数,内联函数是C+降低小程序调用开销的一种机制编译时将所调用的函数的代码直接嵌入到调用函数的调用处,没有函数调用的开销。,内联函数的作用 减少频繁调用小子程序运行的时间开销,内联函数机制 编译器在编译时,将内联函数的调用以相应代码代替,内联函数声

18、明inline 函数名,注:内联函数仅在函数原型或定义时作一次声明。适用于只有1 5行的小函数 不能含有复杂结构控制语句,不能递归调用,内联函数,例:,inline int smallf();main()a=smallf();.int smallf().,inline int smallf().main()a=smallf().,内联函数,错误说明:,inline int smallf();main()a=smallf();.inline int smallf().,重复说明,语法错误,内联函数,错误说明:,inline int smallf();main()a=smallf();.inlin

19、e int smallf().,int smallf();main()a=smallf();.inline int smallf().,作普通函数处理,内联函数,/例4-6 内联函数示例#include inline 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;,编译器变换为:vol

20、=3.14*r*r*h;,内联函数,C+有三种参数传递机制:值传递指针传递引用传递,4.2 函数参数的传递,调用函数时,实参表达式的值被复制到相应形参标识的对象中,并按形参类型强制转换 函数内对形参的访问、修改,都在形参的标识对象进行 函数返回时,形参对象被撤消,不影响实参的值 值传送的实参可以是常量、有确定值的变量或表达式 函数返回值通过匿名对象传递,4.2.1 传值参数,1值传递机制,/例4-7 强制类型转换#include void main()float add1(float,float);/函数原型 float add2(int,int);/函数原型 float a,b,c;cin

21、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);,4.2.1 传值参数,/例4-7 强制类型转换#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);c

22、out c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,int a,b,c;,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main(

23、)int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,cin a b;,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,c=add(a,b);,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,

24、int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,int add(int i,int j),/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,2,4,i+;j+;,/例4-8 值参传递,1值传递机制,4.2.1

25、 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,2,4,return(i+j);,/例4-8 值参传递,3+5,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,

26、2,4,return(i+j);,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,8,2,4,c=add(a,b);,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int ad

27、d(int i,int j)i+;j+;return(i+j);,8,c=add(a,b);,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,8,输出,c=8,cout c=c endl;,/例4-8 值参传递,1值传递机制,4.2.1 传值参数,2实际参数求值的副作用,C+没有规定在函数调用时实际参数的求值顺序 若实际参数表达式之间有求值关联,同一个

28、程序在不同编译器可能 产生不同的运行结果,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,x+y,2实际参数求值的副作用,从右向左计算实参表,5,6,10,+x,5,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,2实际参数求值的副作用,#include int

29、add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,5+10,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,5+10,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void ma

30、in()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,15,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,15,x,y,z,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,修

31、改程序,+x;int z=add(x,x+y);cout 5+11=z n;,3默认参数,C+允许指定传值参数的默认值。当函数调用中省略默认参数时,默认值自动传递给被调用函数 默认参数在函数原型定义 默认参数放在一般参数之后,/例4-9 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;fo

32、r(int i=2;i=n;i+)result*=real;return result;,/例4-9 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,定义默认参数,/例4-9 使用默认参数#inc

33、lude double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,使用默认参数power(r,2),/例4-9 使用默认参数#include double power(double real,int n=2);void main()d

34、ouble r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,不使用默认参数,int f();void delay(int k,int time=f();,OK!,3默认参数,int f();void delay(int k,int time=f();,void ferror1(int x,int y=1,int z);,Erro

35、r!,3默认参数,int f();void delay(int k,int time=f();,void ferror1(int x,int y=1,int z);,void ferror2(int x,int y=0);void ferror2(int x);ferror2(3);/调用哪个函数?,Error!,3默认参数,练习,定义和调用max函数,求3个数中的最大值.,定义和调用max函数,求3个数中的最大值.,#include float max(float,float);/函数原型声明void main()float x,y,z,m1,m2;coutxyz;m1=max(x,y);m2=max(m1,z);coutn)return m;else return n;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号