《C语言程序设计-第7章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计-第7章.ppt(17页珍藏版)》请在三一办公上搜索。
1、C语言程序设计,贵阳新科电脑培训中心 唐绍国 制作,全国计算机等级考试 二级教程,本章要点:函数的概念库函数函数的定义和返回值函数的调用函数的说明调用函数和被调用函数之间的数据传递,第七章 函数,函数的概念:函数是能完成一定功能的程序模块一个较大的程序 一般应分为若干个程序模块,每一个程序模块用来实现一个特定的功能在其他的高级语言中都有子程序这个概念,用子程序实现模块的功能。而在C语言中,子程序的作用是由函数完成的一个C程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数。其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次,函数的分类,从用户使用的角度看,函数有两种:(
2、1)标准函数(库函数):这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。(2)用户自已定义的函数:用来解决用户的专门需要。从函数的形式看,函数分两类:(1)无参函数:在调用这类函数时,主调函数并不将数据传递给被调用函数,一般用来执行指定的一组操作。无参函数可以带回或不带回函数值,但一般以不带回函数值的居多。(2)有参函数:在调用函数时,在主调函数和被调用子函数之间有数据传递。也就是说,主调函数可以将数据传给被调函数使用,被调用函数中的数据也可以带回来供主调函数使用。,库函数(标准函数),注意:调用库函数时要给出包含该函数的头文件 例:调用数学库函数时,要求在函数前包含以下命令:#
3、include“math.h”说明:include命令必须以#开头,系统提供的头文件以.h作为文件后缀,文件名用一对双撇号”或一对尖括号括起来。二者的区别是:用形式编译时只在目标文件所在的子目录中找math.h文件,而用“math.h”形式则编译系统先从目标文件所在的子目录中找math.h文件,若找不到则到上级目录找,直到找到为止(除非它不存在)。注意:include命令不是C语句,因此不能在最后加分号。,常用库函数及相关的包含头文件,标准库函数的调用格式,对库函数的一般调用形式为:函数名(参数1,参数2,参数n)调用库函数的两种形式:1、在表达式中调用(要求函数返回一个值)例:y=pow(x
4、,2.5)+1.3;或 s=fabs(x)-fabs(y);2、作为独立的语句使用(不要求函数带回值,只要求完成一定的操作)例:exit();或 scanf(“%d”,7.2 函数的定义和返回值,函数定义的语法函数定义的一般形式:,函数体,数据类型 函数名(形式参数表)内部数据;可执行语句;返回语句;,当形式参数表中的参数在一个以上时,定义形式为:(类型名 形式参数1,类型名 形式参数2,),Int sum(int x,int y)int z;z=x+y;return(z);,函数名是函数的标志,调用函数时必须指定要调用的函数名。数据类型是函数返回值的类型。在省略书写返回类型时,c语言默认为i
5、nt型或char型。当函数没有数据返回时,使用void关键字说明为“无类型”。形式参数表包括形参类型说明。它是为了便于在调用该函数时将相应的参数传递给函数。形式参数是函数的内部变量,在定义函数时可以没有形参,但不能省略圆括号。函数体是函数的主要部分,函数的功能就是由它来实现的。函数体通常定义一些内部数据,使用一些执行语句来完成函数的功能,由返回语句return()把函数的结果传送给函数的调用者。,函数体,数据类型 函数名(形式参数表)内部数据;可执行语句;返回语句;,函数定义的例子及说明,例:,函数定义的说明,函数名和形式参数都是由用户命名的标识符。在同一程序中,函数名必须唯一;形式参数名在同
6、一函数中唯一即可,可以与其他函数中的变量同名。在同一个函数的内部不能再定义函数,但可以调用其他函数。函数体中的变量只有在函数被调用时才临时开辟存储单元,当退出函数时,这些临时开辟的存储单元全被释放掉,因此,这种变量只在函数体内部起作用,与其他函数体中的变量无关。,函数的返回值,函数的值通过return语句返回,return语句的形式如下:return 表达式;或 return(表达式);或return;例:return s;或return(x+y);或return;也就是说,return语句中的表达式的值就是所求的函数值.此表达式值的类型必须与函数首部所说明的类型一致.若类型不一致,则以函数值
7、的类型为准,由系统自动进行转换.当程序执行到return语句时,程序的流程就返回到调用该函数的地方(通常称为退出调用函数),并带回函数值.在同一个函数内,可以根据需要多处出现return语句.return语句也可以不含表达式,这时它的作用只是使流程返回到调用函数,并没有确定的函数值.函数体内可以没有return语句,程序的流程就一直执行到函数末尾”,然后返回调用函数,这时也没有确定的值带回.,7.3 函数的调用,函数的一般调用形式为:函数名(实在参数表)当实在参数的个数多于一个时,参数之间用逗号分开。如果是无参函数,则调用形式为:函数名()例:若有以下两个用户自定义函数sum和outstar,
8、Int sum(int x,int y)return(x+y);,void outstar()printf(“*”);,用户定义的函数也可以像调用标准库函数一样采用以下两种方式:1、作为表达式出现在允许表达式出现的任何地方。2、作为一条独立的语句。,演 示,则它们的调用形式分别为:sum(3,7)和 outstar(),函数调用时的语法要求,(1)调用函数时,函数名必须与被调用的函数名字完全一致。实参的个数和类型与形参的个数和类型一致。(2)函数必须先定义、后调用,也就是调用函数必须在被调用之前加以说明或被调用函数整个放在调用函数之前。但返回值类型为int型或char类型的函数可以放在调用函数
9、之后。(3)c语言中函数的定义都是平行、独立的,c语言不允许嵌套定义函数,但允许嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。(4)c语言允许函数出现递归调用(在调用一个函数的过程中又出现直接或间接地调用函数本身)。,函数的说明,在C语言中,除了主函数外,对于用户定义的函数要遵循“先定义,后使用”的原则。凡是未在调用前定义的函数,C编译程序都认为函数的返回值为int类型。对于返回值为其他类型的函数,若把函数的定义放在调用之后,应该在调用之前对函数进行说明(或称为函数原形说明)。函数说明的一般形式如下:类型名 函数名(参数类型1,参数类型2,)如 float sum(floa
10、t,float)或:类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,)如 float sum(float x,float y)函数说明也可以是一条独立的语句,如:float sum(float,float);也可以与普通变量一起出现在同一个定义语句中。如:float x,y,sum(float,float);,函数说明的位置,函数的定义是用来定义函数的实体,函数的说明是用来声明函数的特征,一个函数只能定义一次,而说明可以是多个、多处的,通常情况下,说明应放在调用之前。当在所有函数的外部,被调用之前说明函数时,在函数说明的后面所有位置上都可以对该函数进行调用函数说明也可以放在调用函数内的说明部分,如在main函数内部进行说明,则只能在main函数内部才能识别该函数.,7.5 调用函数和被调用函数之间的数据传递,1、实在参数与形式参数之间进行数据传递 形式参数与实在参数的区别:形式参数是指在定义函数时形参里的变量,之所以称它为“形参”,是因为所用的变量并不是一个实际存在的变量,在未调用时并不给它分配存储空间,调用开始时才为它开辟一个临时存储区;实在参数是指在调用函数时实参里的变量、常量或表达,“实参”的存储空间与函数是否被调用没有关系,它在文件中一直存在。2、通过return语句把函数值返回调用函数 3、通过全局变量(不提倡使用),本章完祝大家学有所成!Thanks!,