第8章函数精选PPT.ppt
《第8章函数精选PPT.ppt》由会员分享,可在线阅读,更多相关《第8章函数精选PPT.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章函数第1页,本讲稿共52页C程序的结构如右图所示:程序的结构如右图所示:1.一个一个C程序可分为若干程序可分为若干个函数个函数2.每个程序有且只能有一个主每个程序有且只能有一个主函数(函数(main),其它函数),其它函数都是子函数都是子函数3.子函数可以互相调用,子函数可以互相调用,但主函数不能被调用但主函数不能被调用4.一个一个C源程序由一个或源程序由一个或多个文件构成,一个源多个文件构成,一个源程序文件是一个编译单程序文件是一个编译单位位8.1 概述概述mainabcfgdehfifai第2页,本讲稿共52页说明:说明:(1)C程序的执行从程序的执行从main函数开始函数开始调用其
2、它函数后仍回到调用其它函数后仍回到main函数,函数,程序在程序在main函数结束时结束函数结束时结束(2)所有子函数都是平行的,任何)所有子函数都是平行的,任何子函数都不属于其它函数子函数都不属于其它函数(3)从用户的角度看,函数可分为:)从用户的角度看,函数可分为:标准函数(库函数)标准函数(库函数)自定义函数自定义函数(4)从函数的形式看,可分为:)从函数的形式看,可分为:无参数函数无参数函数 有参数函数有参数函数例例8.1#include void printstar()printf(“*”);void printmessage()printf(“Hello World!”);prin
3、tstar();void main()printstar();printmessage();概述(续)概述(续)第3页,本讲稿共52页函数定义的一般形式:函数定义的一般形式:类型说明类型说明 函数名(函数名(形式参数说明形式参数说明)函数体函数体 形式参数说明方法:形式参数说明方法:类型说明类型说明 变量名变量名,类型说明符类型说明符 变量名变量名1.无参函数的定义形式无参函数的定义形式 类型说明类型说明 函数名()函数名()函数体函数体2.有参函数的定义形式有参函数的定义形式 类型说明类型说明 函数名(形式参数说明)函数名(形式参数说明)函数体函数体3.空函数的定义形式空函数的定义形式 类型
4、说明类型说明 函数名(函数名(形式参数说明形式参数说明)例例8.2#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is%dn”,c);8.2 函数定义的一般形式函数定义的一般形式第4页,本讲稿共52页 一般情况下,函数体由两部分一般情况下,函数体由两部分组成:组成:局部变量说明局部变量说明 语句语句 局部变量:函数体内定义的变量,局部变量:函数体内定义的变量,其有效范围仅限于所在的函数内其有效范围仅限于所在的
5、函数内部,离开函数体则无意义。部,离开函数体则无意义。#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is%dn”,c);函数定义的一般形式(续)函数定义的一般形式(续)第5页,本讲稿共52页 一个一个C程序由若干个函数构成,各函程序由若干个函数构成,各函数相互调用时经常需要传递一些数数相互调用时经常需要传递一些数据,即主调函数把数据传递给被调据,即主调函数把数据传递给被调用函数,经被调用函数处理后,得用函数
6、,经被调用函数处理后,得到一个确定的结果,在返回主调函到一个确定的结果,在返回主调函数时,把这个结果带回。数时,把这个结果带回。#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is%dn”,c);c=max(a,b);主调用函数主调用函数int max(int x,int y)return(z);被调用函数被调用函数a,bz函数间的信息来往是通过函数间的信息来往是通过参数传递参数传递和和返回语句返回语句实现的
7、实现的8.3 函数参数和函数的值函数参数和函数的值第6页,本讲稿共52页1.形式参数与实际参数形式参数与实际参数形式参数(形参):形式参数(形参):定义定义函数时使用的参数函数时使用的参数实际参数(实参):实际参数(实参):引用引用函数时使用的参数函数时使用的参数函数函数max有两个形式参数:有两个形式参数:x和和y形参形参x和和y只在函数只在函数max中使用中使用a和和b是主函数中定义的变量,是主函数中定义的变量,main函数函数调用函数调用函数max,a和和b为函数为函数max的实参的实参#include int max(int x,int y)int z;z=xy?x:y;return(
8、z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is%dn”,c);23 89Max is 89函数参数和函数的值(续)函数参数和函数的值(续)第7页,本讲稿共52页说明:说明:(1)定义函数时,必须说明形参的类型。)定义函数时,必须说明形参的类型。形参只能是形参只能是变量变量或或数组数组。(2)函数被调用前,形参不占用内存;函)函数被调用前,形参不占用内存;函数调用结束后,形参所占用的内存也将被数调用结束后,形参所占用的内存也将被回收回收(3)实参可以是)实参可以是常量、变量常量、变量或或表达式表达式(4)
9、实参与形参的类型应相同或赋值兼容。实参与形参的类型应相同或赋值兼容。字符型和整形可以相互匹配。字符型和整形可以相互匹配。(5)C语言中,实参对形参的数据传递是语言中,实参对形参的数据传递是“值传递值传递”,单向传递,只能由实参传,单向传递,只能由实参传给形参,反之不行。它仅由参数的对应位给形参,反之不行。它仅由参数的对应位置决定,与参数的名字无关。置决定,与参数的名字无关。#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf
10、(“Max is%dn”,c);思考:思考:将将max作如下变形会怎样?作如下变形会怎样?int max(int x,int y)x=xy?x:y;return(x);int max(int b,int a)int c;c=ba?b:a;return(c);函数参数和函数的值(续)函数参数和函数的值(续)第8页,本讲稿共52页例例8.3 读程序,写出运行结果读程序,写出运行结果#include int sum(int a,int b)a=a+b;b=a+b;return a;void main()int a=1,b=3,c;c=sum(a,b);printf(“Sum of%d,%d is%d
11、n”,a,b,c);Sum of 1,3 is 413abab1347函数参数和函数的值(续)函数参数和函数的值(续)第9页,本讲稿共52页2.函数的返回值函数的返回值(1)返回函数值的方法)返回函数值的方法 函数的返回值也就是函数值,函数的返回值也就是函数值,是一个确定的值。是一个确定的值。如果一个函数有返回值,就必须如果一个函数有返回值,就必须 使用使用return语句语句 一个函数中可以有一个以上的一个函数中可以有一个以上的return 语句,但不论执行到哪个语句,但不论执行到哪个return都将都将 结束函数的调用返回主调函数结束函数的调用返回主调函数 return语句中的括号可以省略
12、;语句中的括号可以省略;return 后面的值可以是一个表达式后面的值可以是一个表达式#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“Max is%dn”,c);if(xy)return x;return y;return(xy?x:y);函数参数和函数的值(续)函数参数和函数的值(续)第10页,本讲稿共52页(2)函数值的类型)函数值的类型 函数的类型即函数值的类型。例如:函数的类型即函数值的类型。例如:函数函数m
13、ax是是int型的即函数值是型的即函数值是int 型的型的 省略了类型说明符的函数是省略了类型说明符的函数是int型的型的 return语句中表达式的值一般应与语句中表达式的值一般应与 函数类型一致函数类型一致 如果不一致,则需要进行类型转换。如果不一致,则需要进行类型转换。只有数值型数据可以进行自动类型只有数值型数据可以进行自动类型 转换,以函数类型为准转换,以函数类型为准#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);print
14、f(“Max is%dn”,c);float a,b;int c;float z;1.5 2.5Max is 2(float x,float y)函数参数和函数的值(续)函数参数和函数的值(续)第11页,本讲稿共52页(3)不需要返回值的函数)不需要返回值的函数 如果函数中没有使用如果函数中没有使用return语句,函数返语句,函数返回的是一个不确定的数值回的是一个不确定的数值 如果一个函数不需要返回值(表示一如果一个函数不需要返回值(表示一个过程),可以用个过程),可以用void作类型说明作类型说明 如果一个函数被声明为如果一个函数被声明为void类型,就不类型,就不允许再引用它的返回值(即
15、只能用函数允许再引用它的返回值(即只能用函数语句形式进行调用)语句形式进行调用)#include void printstar()printf(“*”);void printmessage()printf(“Hello World!”);printstar();void main()printstar();printmessage();函数参数和函数的值(续)函数参数和函数的值(续)第12页,本讲稿共52页1.函数调用的一般形式函数调用的一般形式 函数名(实参表列)函数名(实参表列)说明:说明:如果调用无参函数,实参表列可以忽如果调用无参函数,实参表列可以忽略,但括号不能省略,但括号不能省 实
16、参的个数和形参个数应相等实参的个数和形参个数应相等 实参与形参按顺序对应,类型应实参与形参按顺序对应,类型应匹配,必要时使用类型转换匹配,必要时使用类型转换注意:注意:不同系统中,实参的计算顺序不同系统中,实参的计算顺序不同。微机上一般是从右到左。不同。微机上一般是从右到左。为避免由此引起的混乱,一般应为避免由此引起的混乱,一般应在调用函数前计算出实参的值。在调用函数前计算出实参的值。#include int max(int x,int y)int z;z=xy?x:y;return(z);void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);
17、printf(“Max is%dn”,c);float max(float x,float y)float z;z=xy?x:y;return(z);例例8.4 读程序,写出结果读程序,写出结果#include int f(int a,int b)int c;if(ab)c=1;else if(a=b)c=0;else c=1;return c;void main()int i=2,p;p=f(i,i+);printf(“%d”,p);void main()int i=2,j,p;j=+i;p=f(i,j);printf(“%d”,p);8.4 函数的调用函数的调用第13页,本讲稿共52页2.
18、函数调用的方式函数调用的方式(1)函数语句)函数语句 形式为:形式为:函数名(实参表列)函数名(实参表列)例如:例如:printmessage()();说明:说明:这种方式不要求函数带返回值,函数仅完成一定的操这种方式不要求函数带返回值,函数仅完成一定的操作作(2)函数表达式)函数表达式 函数的返回值参与运算函数的返回值参与运算 例如:例如:m=max(a,b);m=3*max(a,b);printf(“max is%dn”,max(a,b);说明:说明:这种方式不能用于这种方式不能用于void型函数型函数函数的调用(续)函数的调用(续)第14页,本讲稿共52页3.函数调用的执行过程函数调用的
19、执行过程 按从右向左的顺序,计算按从右向左的顺序,计算实参中各表达式的值实参中各表达式的值 按照位置,将实参的值一按照位置,将实参的值一 一一对应的传送给形参对应的传送给形参 执行被调用函数执行被调用函数 当遇到当遇到return(表达式表达式)语语句时,计算表达式的值,句时,计算表达式的值,并返回主调函数并返回主调函数例例8.5 读程序,写出结果读程序,写出结果#include int iabs(float x)return(x0?x;-x);void main()float x=-1.2,y;y=iabs(2*x);printf(“x=%f,iabs(2*x)=%fn”,x,y);X=1.
20、200000,iabs(2*x)=2.400000函数的调用(续)函数的调用(续)第15页,本讲稿共52页4.函数的原形说明函数的原形说明在程序中调用函数需满足以下条件:在程序中调用函数需满足以下条件:(1)被调函数必须存在,且遵循)被调函数必须存在,且遵循 “先定义后使用先定义后使用”的原则的原则(2)如果被调函数的定义在主函)如果被调函数的定义在主函 数之后,可以先给出数之后,可以先给出原形说原形说 明明。原形说明的形式:原形说明的形式:函数类型函数类型 函数名(参数类型函数名(参数类型 参数名参数名,参数类型参数类型 参数名参数名,);库函数的原形说明存放在头文件中,库函数的原形说明存放
21、在头文件中,通过使用通过使用include预处理命令将这些预处理命令将这些原形说明插入程序中原形说明插入程序中例如(先定义后使用)例如(先定义后使用)#include float f(float x)return 2*x*x+3*x+1;void main()float x;scanf(“%f”,&x);printf(“y=%fn”,f(x);例如(后定义先声明)例如(后定义先声明)#include float f(float);void main()float x;scanf(“%f”,&x);printf(“y=%fn”,f(x);float f(float x)return 2*x*x+
22、3*x+1;例如(使用库函数)例如(使用库函数)#include#include void main()float x,y;scanf(“%f”,&x);y=sin(x*3.1415926/180);printf(“sin(%f)=%fn”,x,y);函数的调用(续)函数的调用(续)第16页,本讲稿共52页嵌套调用是指在一个函数的函数体嵌套调用是指在一个函数的函数体中又调用了其它函数中又调用了其它函数程序的执行过程:程序的执行过程:第一层第一层 第二层第二层 第三层第三层main()printstar()printstar();printmessage()printstar()printmes
23、sage();printstar();例例8.1#include void printstar()printf(“*”);void printmessage()printf(“Hello World!”);printstar();void main()printstar();printmessage();8.5 函数的嵌套调用函数的嵌套调用第17页,本讲稿共52页例例8.6 用弦截法求方程的根用弦截法求方程的根 x3-5x2+16x 80=0f(x)x2f(x1)f(x2)f(x1)x1x算法分析:算法分析:对于对于f(x)=x3-5x2+16x 801.给定两个值给定两个值x1、x2,满足,
24、满足x1x2且且f(x1)和和f(x2)符号相反符号相反2.过过(x1,f(x1),(x2,f(x2)两点做两点做直线直线(弦)(弦),交交x轴于轴于x,其中,其中3.求求f(x)。若。若f(x)与与f(x1)符号相同,符号相同,则根必在则根必在(x,x2)区间内,令区间内,令x1=x;反之,根必在;反之,根必在(x1,x)区间内,区间内,x2=x4.重复重复2和和3,直到,直到|f(x)|(为一为一个很小的数,如个很小的数,如10-6)为止,此止,此时有有f(x)0 x1f(x2)x2f(x1)f(x1)f(x2)x=函数的嵌套调用(续)函数的嵌套调用(续)第18页,本讲稿共52页程序说明:
25、程序说明:1.函数函数f 求求x3-5x2+16x 80 2.函数函数xpoint(x1,x2)求弦截点求弦截点x的坐标的坐标3.函数函数root(x1,x2)求区间求区间(x1,x2)上的根上的根输入输入x1,x2求求y1=f(x1),y2=f(x2)直到直到y1,y2 异号异号求求f(x1)与与f(x2)连线与连线与x轴的交点轴的交点x计算计算y=f(x)y和和y1同号同号真真 假假x1=x x2=xy1=y y2=y直到直到|y|函数的嵌套调用(续)函数的嵌套调用(续)第19页,本讲稿共52页#include#include float f(float x)return(x-5)*x+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 精选 PPT
限制150内