C语言课件教学-第8章-函数-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言课件教学-第8章-函数-.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 教学 函数
- 资源描述:
-
1、第第8章章 函函 数数8.1 概述 C语言是通过函数来实现语言是通过函数来实现模块化程序设计模块化程序设计的。的。一个较大的程序应分为若干程序模块,每个模块一个较大的程序应分为若干程序模块,每个模块实现一个特定的功能,这个模块称为实现一个特定的功能,这个模块称为子程序。子程序。C的子程序是通过的子程序是通过函数函数实现的,函数是实现的,函数是C语言程序语言程序的的基本单位基本单位。函数的构成 源程序是由函数组成的。函数是源程序的基源程序是由函数组成的。函数是源程序的基本模块,通过对函数模块的调用实现特定的功本模块,通过对函数模块的调用实现特定的功 能。能。实用程序往往包括一实用程序往往包括一个
2、主函数个主函数main()和和 若干其他若干其他函数函数。其中主函数。其中主函数main()是是必须必须的,它是所有函的,它是所有函数的数的执行起点执行起点。由。由主函数调用其它函数主函数调用其它函数,其它函,其它函数也可以数也可以互相调用互相调用,同一函数可以被,同一函数可以被一个或多个一个或多个函数调用任意多次。调用示意图如下:函数调用任意多次。调用示意图如下:程序的全部工作都是由各式各样的函数完成的,所以也把语言称为函数式语言。f11()f11()f31()f1()f11();f2()f11();f22();main()f1();f2();程序开发中使用函数的优点1 1)使用函数可以控制
3、)使用函数可以控制任务的规模任务的规模2 2)使用函数可以)使用函数可以控制变量的作用范围控制变量的作用范围3 3)使用函数,程序的开发可以由)使用函数,程序的开发可以由多人分工协作多人分工协作 4 4)使用函数,可以)使用函数,可以重新利用重新利用已有的、调式好的、已有的、调式好的、成熟的程序模块成熟的程序模块 5)函数模块函数模块相对独立,功能单一相对独立,功能单一,可混合编写也,可混合编写也 可独立编写调试。可独立编写调试。函数的一些说明1)一个)一个C程序由多个程序模块组成,每个模块作为一个程序由多个程序模块组成,每个模块作为一个源源程序文件,程序文件,多个源程序文件组成一个多个源程序
4、文件组成一个C程序,这样程序,这样便于便于分分别编写分别编译,提高调试效率,一个源程序文件可为别编写分别编译,提高调试效率,一个源程序文件可为多个多个C程序程序共用共用。2)一个源程序文件由)一个源程序文件由一个或多个函数一个或多个函数及其相关内容(如数及其相关内容(如数据定义等)组成,一个源程序文件是一个据定义等)组成,一个源程序文件是一个基本的编译单基本的编译单位。位。3)C程序的执行从主函数程序的执行从主函数main()开始(称为()开始(称为主调函数主调函数),),可以调用其它函数(称为可以调用其它函数(称为被调用函数被调用函数),调用流程),调用流程返回返回main(),最后函数在(
5、),最后函数在main()中()中结束结束。4)所有函数都是)所有函数都是平行平行的,在定义时候是的,在定义时候是分别进行分别进行的,相互的,相互独立独立,无从属无从属关系,关系,不可嵌套不可嵌套定义。函数间可相互调用,定义。函数间可相互调用,但但不能调用主函数不能调用主函数,主函数只能由系统调用。,主函数只能由系统调用。函数的分类1.从用户使用的角度从用户使用的角度 1)标准函数()标准函数(库函数库函数),由系统提供,用户不),由系统提供,用户不必自定义可直接使用,注意:不同必自定义可直接使用,注意:不同C编译系统提编译系统提供的库函数可能有些不同供的库函数可能有些不同 2)用户)用户自定
6、义自定义函数,用来解决用户专门需要。函数,用来解决用户专门需要。2.从函数的形式从函数的形式 1)无参函数无参函数。在调用函数时,。在调用函数时,main不不向被调用向被调用函数传递数据,只用来执行一组操作。函数传递数据,只用来执行一组操作。2)有参函数,主调函数在调用被调用函数时,有参函数,主调函数在调用被调用函数时,通过参数向其通过参数向其传递数据传递数据,一般情况下,执行被调,一般情况下,执行被调用函数时,得到用函数时,得到一个函数值一个函数值,供主调函数使用。,供主调函数使用。函数应当先定义,后调用函数应当先定义,后调用(1)无参函数的一般形式无参函数的一般形式 函数类型函数类型 函数
7、名函数名()说明语句部分;说明语句部分;可执行语句部分;可执行语句部分;无参函数一般不需要返回函数值,函数类型无参函数一般不需要返回函数值,函数类型void类型类型(空类型)(空类型)2)有参函数的一般形式)有参函数的一般形式 函数类型函数类型 函数名函数名(形参表列形参表列)说明语句部分;说明语句部分;可执行语句部分;可执行语句部分;例:例:int max(x,y)int x,y;/形式参数说明形式参数说明 /int z;/函数体中的说明部分函数体中的说明部分 /z=xy?x:y;return(z);这两行可以写成一行:这两行可以写成一行:int max(int x,int y)3“空函数空
8、函数”类型说明符类型说明符 函数名函数名()“空函数空函数”什么操作也不做什么操作也不做。其作用是在此处。其作用是在此处留留一函数的位置一函数的位置,以便将来扩充功能之用。函数名,以便将来扩充功能之用。函数名也在将来换取实际的函数名。也在将来换取实际的函数名。函数定义的一些说明1.函数头(首部):说明了函数类型、函数名称及函数头(首部):说明了函数类型、函数名称及参数。参数。(1)函数类型:)函数类型:函数返回值的数据类型,可以是函数返回值的数据类型,可以是基本数据类型也可以是构造类型。如果省略默认基本数据类型也可以是构造类型。如果省略默认为为int,如果不返回值,定义为,如果不返回值,定义为
9、void类型。类型。(2)函数名:)函数名:给函数取的名字,以后用这个名字给函数取的名字,以后用这个名字调用。函数名由用户命名,命名规则同标识符。调用。函数名由用户命名,命名规则同标识符。(3)(3)函数名后面是参数表,无参函数没有参数传函数名后面是参数表,无参函数没有参数传递,但递,但“()()”号不能省略,这是格式的规定。号不能省略,这是格式的规定。参数表说明参数的类型和形式参数的名称,各个参数表说明参数的类型和形式参数的名称,各个形式参数用形式参数用“,”分隔。分隔。2.函数体:函数体:函数首部下用一对函数首部下用一对括起来的部括起来的部分。如果函数体内有多个分。如果函数体内有多个,最外
10、层最外层是函是函数体的范围。数体的范围。函数体一般包括声明部分、执行部分两部函数体一般包括声明部分、执行部分两部分。分。1)声明部分:)声明部分:在这部分定义本函数所使用在这部分定义本函数所使用的变量和进行有关声明(如函数声明)。的变量和进行有关声明(如函数声明)。2)执行部分:执行部分:程序段,由若干条语句组成程序段,由若干条语句组成(可以在其中调用其它函数)。(可以在其中调用其它函数)。例:输入三个整数,求三个整数中的最大值例:输入三个整数,求三个整数中的最大值不使用函数不使用函数(除除mainmain外外)main()main()intint n1,n2,n3,nmax;n1,n2,n3
11、,nmax;scanf(“%d%d%d”,&n1,&n2,&n3);scanf(“%d%d%d”,&n1,&n2,&n3);if(n1n2)if(n1n2)nmaxnmax=n1;=n1;else else nmaxnmax=n2;=n2;if(n3max)if(n3max)max=n3;max=n3;printf(“maxprintf(“max=%=%dndn”,nmaxnmax););使用函数使用函数int max(int,int,int);/*函数声明函数声明*/main()int n1,n2,n3,nmax;scanf(“%d%d%d”,&n1,&n2,&n3);nmax=max(n1
12、,n2,n3);printf(“max=%dn“,nmax);int max(int x,int y,int z)int m;if(xy)m=x;else m=y;if(zm)m=z;return m;像调用库函数像调用库函数一样调用一样调用函数定义函数定义8.3 函数参数和函数的值函数参数和函数的值8.3.1 形式参数与实际参数形式参数与实际参数 在调用函数时,大多情况下,主调与被调函在调用函数时,大多情况下,主调与被调函数间有数间有数据传递关系数据传递关系,这就是有参函数。在定义,这就是有参函数。在定义函数时,函数名后面括号中的变量名称为函数时,函数名后面括号中的变量名称为“形形式式参参数
13、数”,在主调函数中调用一个函数时,函数名,在主调函数中调用一个函数时,函数名后面括号中的参数(可以是表达式)称为后面括号中的参数(可以是表达式)称为“实实际际参参数数”。发生函数调用时,调用函数把发生函数调用时,调用函数把实参的值实参的值复制复制一份,一份,传送给传送给被调用函数的被调用函数的形参形参,从而实现调用,从而实现调用函数向被调用函数的函数向被调用函数的数据传送数据传送。例例 从键盘输入两个数,输出其中较大的一个。从键盘输入两个数,输出其中较大的一个。main()int a,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);/a,b为实际参数为实际参数 /pri
14、ntf(“Max is%d”,c);max(x,y)/x,y为形式参数为形式参数 /int x,y;int z;z=xy?x:y;return(z);说明:说明:1)形参变量在被调用前形参变量在被调用前不占用存储单元不占用存储单元;在被调用结束;在被调用结束 后,后,形参所占存储单元亦被形参所占存储单元亦被释放释放。因此,因此,形参只有在该函数形参只有在该函数内有效。内有效。调用结束,返回调用函数后,则不能再使用该调用结束,返回调用函数后,则不能再使用该形参变量。形参变量。2)实参可以是常量、变量、表达式、函数等。无论实参是)实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行
15、函数调用时,它们何种类型的量,在进行函数调用时,它们都必须具有确都必须具有确定的值,定的值,以便把这些值传送给形参。因此,应预先用赋以便把这些值传送给形参。因此,应预先用赋值、输入等办法,值、输入等办法,使实参获得确定的使实参获得确定的值。值。3)实参对形参的)实参对形参的数据传送是单向数据传送是单向的,即只能把实参的值传的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。送给形参,而不能把形参的值反向地传送给实参。4)实参和形参)实参和形参占用不同的内存单元占用不同的内存单元,即使同名也互不影响,即使同名也互不影响5)在被定义函数中,必须指定形参的类型。)在被定义函数中,必须指
16、定形参的类型。实参和形参的实参和形参的类型应相同或赋值相容。类型应相同或赋值相容。main()int a=3,b=5;void swap(int,int);swap(a,b);printf(“a=%d,b=%dn”,a,b);void swap(int x,int y)int temp;temp=x;x=y;y=temp;printf(“x=%d,y=%d n”,x,y);是按值传递的 按址传递放在指针里面讲。传递值35ab35xy 3tempMain()函数:调用Swap函数8.3.2 函数的返回值 通常,希望通过函数调用使通常,希望通过函数调用使主调函数主调函数得到一得到一个确定的值,这就
17、是函数的个确定的值,这就是函数的返回值。返回值。说明如下:说明如下:1)函数的返回值是通过)函数的返回值是通过return语句语句获得的。当不获得的。当不需返回函数值时,可省去需返回函数值时,可省去return语句。语句。2)return语句的后面可以语句的后面可以有括号,也可以没有。有括号,也可以没有。如:如:return z;return(z);3)return语句的后面可以是变量,也可以是表达语句的后面可以是变量,也可以是表达式。式。如:如:return(x y?x:y);4)return语句返回值的类型应与该函数的语句返回值的类型应与该函数的类型类型一一 致。致。否否 则以函数类型为准
18、。则以函数类型为准。5)若函数中)若函数中没有没有return语句语句,则该函数被调用,则该函数被调用后也会后也会带带 回不确定的值回不确定的值。为了明确表示不需要。为了明确表示不需要函数返回值,可函数返回值,可 以用以用“void”定义函数为定义函数为“无无类型类型”。凡不需要返回值的函数,一般均定义为。凡不需要返回值的函数,一般均定义为“void”类型。类型。6)一个函数可以)一个函数可以有一个以上有一个以上的的return语句,执行语句,执行到哪个到哪个return语句,哪个语句,哪个return语句起作用。语句起作用。8.4 函数的调用 在程序中,是通过对函数的调用来执行函数体的,其过
19、程在程序中,是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。与其它语言的子程序调用相似。语言中,函数调用的一般形式为:语言中,函数调用的一般形式为:函数名函数名(实际参数表实际参数表)说明:说明:1)对于无参函数,尽管没有)对于无参函数,尽管没有“实参表实参表”,但也,但也不得省略不得省略括括号。号。2)“实参表实参表”中的参数之间用中的参数之间用逗号逗号分开。分开。3)实参与形参之间的个数及类型必须)实参与形参之间的个数及类型必须一一对应。一一对应。4)对实参求值的顺序是自左至右还是自右至左)对实参求值的顺序是自左至右还是自右至左,视具体的视具体的系统而定。系统而定。Tu
20、rbo C 和和 MS C 是按是按自右至左自右至左的顺序求值。的顺序求值。见见P162 例例8.48.4.2 函数调用的方式按照函数在程序中出现的位置,可以有以下三种调用方式:1)函数语句:C语言中的函数可以只进行某些操作而不返回语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。如函数值,这时的函数调用可作为一条独立的语句。如 printf(“C pragram”)gets(s););2)函数表达式:函数作为表达式的一项,出现在表达式中,函数作为表达式的一项,出现在表达式中,以以函数返回值参与表达式的运算函数返回值参与表达式的运算。这种方式要求函数是。这种方式
21、要求函数是有有返回值返回值的。如:的。如:c=2 max(a,b);3)函数参数:函数作为另一个函数调用的函数作为另一个函数调用的实际参数实际参数出现。出现。这种情况是把该函数的返回值作为实参进行传送,因此要这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须求该函数必须是有返回值是有返回值的。如:的。如:m=max(max(a,b),c);8.4.3 对被调用函数的声明和函数原型对被调用函数的声明对被调用函数的声明在一个函数被另一个函数调用时,须具备以下条在一个函数被另一个函数调用时,须具备以下条件:件:1)被调用的函数已存在)被调用的函数已存在2)如果被调函数为库函数,则应在文件
22、开头)如果被调函数为库函数,则应在文件开头 用用“#include”命令命令声明声明相应的相应的“头文头文 件件”。如:。如:#include“stdio.h”#include“math.h”3)如果被调函数为如果被调函数为自定义函数自定义函数且其且其定义在主调函定义在主调函数定义之后数定义之后,则应在主调函数中说明其类型(即,则应在主调函数中说明其类型(即对被调用函数进行声明)。对被调用函数进行声明)。函数声明的作用是把函数名、函数参数的个数函数声明的作用是把函数名、函数参数的个数和参数类型等信息和参数类型等信息通知编译系统通知编译系统,以便在调用时,以便在调用时,编译系统能正确识别函数并检
23、查调用编译系统能正确识别函数并检查调用是否合法是否合法。函。函数声明又称函数原型。格式如下:数声明又称函数原型。格式如下:函数类型函数类型 函数名(参数类型函数名(参数类型1,参数类型,参数类型2,参数类型参数类型n);函数类型函数类型 函数名(参数类型函数名(参数类型1,参数名,参数名1,参数类,参数类型型2,参数名,参数名2,参数类型,参数类型n,参数名,参数名n);如果不声明,系统无法在调用时对函数调用的如果不声明,系统无法在调用时对函数调用的正确性进行检查,容易出错。正确性进行检查,容易出错。注意注意:函数的定义和声明:函数的定义和声明不是一回事不是一回事。定义是。定义是对函数功能的对
24、函数功能的确立确立,包括指定函数名、函数值类型、形参及其类型、,包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的、独立的的函数体等,它是一个完整的、独立的的函数单位函数单位。而函。而函数的声明则是把函数的名字、函数类型以及形参的类型、数的声明则是把函数的名字、函数类型以及形参的类型、个数和顺序等个数和顺序等通知编译系统通知编译系统以便在调用时进行以便在调用时进行对照检查对照检查。如:main()double new_style(int,double);/*函数声明*/Double new_style(int a,double x)/*函数定义*/说明:1)类型标识符类型标识符
25、 被调函数名被调函数名();这种声明形这种声明形式也是合法的,但不提倡。式也是合法的,但不提倡。2)如果被调函数为自定义函数且其定义)如果被调函数为自定义函数且其定义在主调函数定义之前,则在主调函数中可在主调函数定义之前,则在主调函数中可不必说明其类型。因为编译程序已知道其不必说明其类型。因为编译程序已知道其类型。类型。3)如果被调函数的值是)如果被调函数的值是整型或字符型整型或字符型,可可不必声明类型不必声明类型,系统自动按整型说明。,系统自动按整型说明。4)如果在)如果在所有被调函数定义之前、在文件所有被调函数定义之前、在文件的开头、在函数的外部的开头、在函数的外部已对被调函数作了已对被调
展开阅读全文