c语言 第7章 函数 njcc.ppt_第1页
c语言 第7章 函数 njcc.ppt_第2页
c语言 第7章 函数 njcc.ppt_第3页
c语言 第7章 函数 njcc.ppt_第4页
c语言 第7章 函数 njcc.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 函数,本章要点: 7.1 库函数 7.2 函数的定义和返回值 7.3 函数的调用 7.4 函数的说明 7.5 调用函数和被调用函数之间的数据传递,7.1 库函数 1函数的概念 函数从本质上来说就是完成一定功能程序段,有一个名字叫函数名。若有其它程序要完成该函数的功能,可通过函数名调用它,函数可多次反复调用。引入函数主要是解决两个问题:一是为了解决代码的重复。如有一个程序段在程序中要出现很多次,每次都要写出来既非常麻烦又使程序显得很长,此时就可以把该程序段定义成一个函数,在使用该程序段的地方直接调用该函数就可以了;二是结构化、模块化编程的需要。,建立函数的过程称“函数的定义”,在程序中使

2、用函数称“函数的调用”。被调用的函数称“被调函数”,而调用函数的函数称“主调函数”。在C程序中,main()可以调用任何非主函数,非主函数可以调有非主函数也可被其它函数调用但不能调用main()函数,也就是说main()只能作用主调函数。一般情况下,函数对数据进行加工,最后得到一个结果作为函数的返回值。 根据不同的方法,函数可以分成不同的种类。如从使用的角度来看,可以把函数分成用户函数和系统函数;从定义时有无参数来分,可分为有参函数和无参函数;根据函数调用时是否有返回值来分,可分为有返回值的函数和无返回值的函数;根据函数的作用范围来分,可分成内部函数和外部函数。,2库函数 C语言提供了丰富的库

3、函数,包括常用的数学函数,字符、字符串处理函数,输入输出函数等,用户在编写程序时可以直接调用这些已有的库函数。以下是关于库函数调用的几点说明: (1)调用C语言标准库函数时要求用include命令 对每一类库函数,都有其相应的头文件名,调用某个库函数时,用户在源程序中须用include命令包含其头文件名。一般形式为: #include 或#include “头文件名.h”,(2)标准库函数的调用 库函数调用的一般形式为: 函数名(参数表) C语言中库函数的调用有两种方式: 在表达式中调用。如: x=pow(2),就是在赋值表达式中调用pow函数来求x的值。 作为独立的语句完成某种操作。如: p

4、rintf(“*,就是调用了printf函数,且调用之后加了分号,构成了一条独立的语句,完成该输出操作。 (3)各个库函数的功能、参数的个数和类型、函数值的类型都有其规定,用户在调用时根据需要选择合适的库函数,并严格按照该库函数的规则,正确的进行调用。 重点提示:库函数的调用需要注意的是:函数的功能,函数的参数个数、类型,函数的返回值,对参数的一些特殊要求。,7.2 函数的定义和返回值 1函数的定义方法 (1)C语言函数定义的一般形式: 存储类型说明符 函数返回值类型名 函数名(类型名 形参1,类型名 形参2,) *函数首部*/ 说明部分 执行部分 存储类型说明符说明该函数是内部函数还是外部函

5、数。 函数返回值类型名是用来说明该函数返回值的类型,如果没有返回值,则其类型说明符应为“void”。, 第一行通常称为函数首部,通过它就能知道函数的功能及调用方式。 其它部分称函数体。函数体包括两个部分,说明部分和执行部分,说明部分通常用来定义在本函数中使用的变量、数组等,执行部分是函数功能的实现,通常由一系列的可执行语句构成。 (2)无参函数的定义格式 存储类型说明符 数据类型说明符 函数名( ) /*函数头*/ 说明部分 执行部分 说明: 无参函数与有参函数基本一样,不同的只是它没有形式参数,调用时不需实参。,3)关于函数定义的几点说明 C语言规定,不能在同一个函数内部再定义函数。 函数名

6、和形式参数都是由用户命名的标识符。在同一程序中,函数名必须唯一,形式参数名只要在同一函数中即可,可以与其他函数中的变量同名。 若省略了函数返回值的类型名,则C默认函数返回值的类型为int类型。 形参可以省略,称为无参函数。在调用时不需实参。即 存储类型说明符 函数返回值类型名 函数名() 函数体中,除形参外,用到的其它变量必须在说明部分进行定义,且可以和其他函数中的变量同名。,2函数的返回值 函数值通过return语句返回,return语句的一般形式为: return 表达式; 或 return (表达式) 或 return; 以下是几点说明: (1)return语句中表达式的值就是所求的函数

7、值,且其类型必须与函数首部所说明的类型一致。若类型不一致,则由系统自动转换为函数值的类型。,(2)在程序执行到return语句时,流程就返回到调用该函数处,并带回函数值。在同一个函数内,可以在多处出现return语句。 (3)return语句也可以不含表达式。此时,它只是使流程返回到调用函数,并没有确定的函数值。 (4)函数体内可以没有return语句,程序就一直执行到函数末尾,然后返回调用函数,此时也没有确定的函数值带回。,3函数定义举例 (1)定义一个函数,其功能是对三个实型参数求最大值,并返回这个值。 float max(float f1,float f2,float f3) /*定义函

8、数返回值的类型、函数名和形式参数*/ float m1; /*函数体的说明部分*/ if (f1f2) m1=f1; /*以下是函数体的执行部分*/ else m1=f2; if(m1f3) m1=f3; return(m1); /*通过return(表达式)返回一个确定的值*/ ,(2)无参函数定义示例:定义一个函数,其作用是打印出五行欢迎词“Welcome you, my dear friends”。 void welc()/*定义函数返回值的类型(为“void”说明无返回值)及函数名*/ int i; /*函数体的说明部分*/ for(i=1;i=5;i+)/*以下是函数体的执行部分*/

9、 printf(“Welcome, my dear friends”); 说明:该函数的类型说明为“void”,所以为无返回值的函数,函数中不需要return语句。,重点提示:要想让函数返回一个确定的值,必须通过语句“return(表达式)”来实现,其中表达式就是函数的返回值。如果没有return语句,或return语句不带表达式并不表示没有返回值,而是表示返回一个不确定的值。如果不希望有返回值,必须在定义函数时把“数据类型说明符”说明为“void”。,7.3 函数的调用 7.3.1 函数调用的两种形式 1有返回值的函数的调用形式 有返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为

10、一条语句。其调用形式是: 函数名(实际参数列表) 调用的结果是获得一个返回值,该返回值可以参加相应类型的计算。 如:sum(x,y)是一函数,可以由以下两种调用方式 y2sum(3,4);(作为表达式的一部分,参与计算) 或sum(3,4);(单独作为一条语句,不使用返回值),,,,,2无返回值的函数调用形式 无返回值的函数调用只能作为一条语句,其调用形式如下: 函数名(实际参数列表);(注意,这里的分号必不可少) 如:max(a,b,c);,3函数调用执行过程 其实在执行函数调用时,系统要完成一系列复杂的过程:首先为被调函数的所有形式参数分配内存,再计算实际参数的值,再一一对应地赋给相应的形

11、式参数(对于无参函数,不做该项工作);然后进入函数体,为函数说明部分定义的变量分配存储空间,再依次执行函数体中的可执行语句;当执行到“return(表达式)”语句时,计算返回值(如果是无返回值的函数,不做该项工作),收回本函数中定义的变量所占用的存储空间(对于static类型的变量,其空间不收回),返回主调函数继续执行。 重点提示:有返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句。而无返回值的函数调用只能作为一条语句。,7.3.2 函数调用时的语法要求 函数调用时,需要遵循以下几条语法要求: (1)调用函数时,函数名必须与所调用的函数名字完全一致。 (2)实参的个数必须与

12、形参一致。实参可以是表达式,在类型上应按位置与形参一一对应匹配。如果类型不匹配,C编译程序按赋值兼容的规则进行转换,否则,程序运行后不能得到正确的结果。 (3)C语言规定,函数必须先定义后调用(函数的返回值类型为int或char时除外)。 (4)实参可以是 C程序中函数可以直接或间接的自己调用自己,即递归调用。 重点提示:函数调用时,必须特别注意实参和形参的类型匹配。,7.4 函数说明 7.4.1 函数说明的形式 在C语言中,要调用某个函数,需对该函数进行函数说明(或称为函数原型说明)。函数说明的一般形式为: 类型名 函数名(参数类型1,参数类型2,)或 类型名 函数名(参数类型1 参数名1,

13、参数类型2 参数名2,),以下是函数说明的几条规则: (1)调用系统函数时,需要在程序的开头包含相应的头文件。但scanf()和printf()等少数的几个函数不需要。 (2)当被调函数定义在主调函数之前时,对被调函数的说明可以省去,也可以不省。 (3)当被调函数的返回值类型是整形或字符型时,不管其定义在主调函数之前还是之后,对被调函数的说明都可以省去,也可以不省。 (4)其它情况一律需要对被调函数进行说明。,(5)当被调函数和主调函数在同一个程序文件中,可在主调函数的函数体说明部分对被调函数进行说明,说明格式有两种,如下: 类型名 被调函数名() 或 类型名 被调函数名(形式参数列表) (6

14、)函数说明可以是一条独立的语句,也可以与普通变量一起出现在同一个定义语句中。如double sub(float,double)和double x,y,sub(float,double)都是合法的。 重点提示:内部函数的说明包含在.h文件中,故调用某个内部函数,必须包含相应的头文件。,7.4.2 函数说明的位置 当在函数的外部、被调用之前说明函数时,在函数说明的后面所有位置上都可以对该函数进行调用。 函数说明也可以放在调用函数内的说明部分,如在main函数内部进行说明,则只能在main函数内部才能识别函数。 重点提示:函数调用时,必须特别注意实参和形参的类型匹配。,7.5 调用函数和被调用函数之

15、间的数据传递,1形参和实参的概念 每个函数一般都能完成一定的功能,可以形象地把函数看成一个加工厂,该加工厂对材料进行加工,最后生产出产品。而加工厂加工的材料,称为“函数的参数”,而加工出来的产品称为“函数的返回值”(有的函数没有返回值)。在定义函数时,只是形式化地说明函数加工的对象,这种对象并不实际存在,就象建立一个本材加工厂时只是说明该加工厂把木材加工成木板,但并没有实际的木材,把这种参数称为“形式参数”。当程序段要调用该函数完成指定的功能,就需要给它实际的材料,以便加工出“产品”。就象一个人要把木材加工成木板,就必须把实际的木材送到加工厂加工一样,函数调用时传入的参数称为“实际参数”。,2

16、数据传递的形式 (1)C语言中,调用函数和被调函数之间的数据可以通过三种方式进行传递: 实际参数和形式参数之间进行数据传递。 通过return语句把函数值返回调用函数。 通过全局变量。 (2)参数值的传递 主调函数在调用函数时,需要把相应的实际参数传给相应的形式参数,实际参数的个数和类型要和形式参数的个数和类型一致。, 实参的个数与类型应与形参一致,否则将会出现编译错误。 实参可以是常量、变量、数组元素和表达式,但如果在被调函数中有取形参地址或给形参赋值的语句,则对应的实参必须是变量和数组元素。 定义函数时定义的形参并不占用实际的存储单元,只有在被调用时才由系统给它分配存储单元,在调用结束后,形参所占用的存储单元被回收。 C语言规定,函数间的参数传递是“值传参”,即单向传递,实参可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论