C语言程序设计精编教程 教学课件 ppt 作者 陈正权 岳睿 第7章 函数

上传人:E**** 文档编号:89372411 上传时间:2019-05-24 格式:PPT 页数:19 大小:236.50KB
返回 下载 相关 举报
C语言程序设计精编教程 教学课件 ppt 作者  陈正权 岳睿 第7章 函数_第1页
第1页 / 共19页
C语言程序设计精编教程 教学课件 ppt 作者  陈正权 岳睿 第7章 函数_第2页
第2页 / 共19页
C语言程序设计精编教程 教学课件 ppt 作者  陈正权 岳睿 第7章 函数_第3页
第3页 / 共19页
C语言程序设计精编教程 教学课件 ppt 作者  陈正权 岳睿 第7章 函数_第4页
第4页 / 共19页
C语言程序设计精编教程 教学课件 ppt 作者  陈正权 岳睿 第7章 函数_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C语言程序设计精编教程 教学课件 ppt 作者 陈正权 岳睿 第7章 函数》由会员分享,可在线阅读,更多相关《C语言程序设计精编教程 教学课件 ppt 作者 陈正权 岳睿 第7章 函数(19页珍藏版)》请在金锄头文库上搜索。

1、第6章 函 数,教学内容 7.1 C函数概述 7.6 局部变量和全局变量 7.2 函数的定义与调用 7.7 变量的存储类别 7.3 函数的嵌套调用 7.8 内部函数和外部函数 7.4 函数的递归调用 7.9 编译预处理命令 7.5 数组作为函数参数,1理解函数的概念,掌握函数定义的一般形式; 2掌握函数参数的正确使用和函数值的确定方法; 3掌握函数调用的一般形式、调用的方法及函数声明; 4掌握函数的嵌套调用和递归调用的基本方法; 5掌握数组作为函数参数的使用方法; 6理解局部变量和全局变量的; 7了解变量的存储类别及内部函数和外部函数的概念; 8. 理解变量存储作用域、编译预处理的使用。,教学

2、目标,7.1 C函数概述,本书第1章已初步介绍过C语言程序是由一个或多个函数组成的。 在前面的章节中,我们也用到了不少函数,如:标准输入函数scanf 函数,标准输出函数printf函数以及其他一些字符串函数等。这些 函数是由C语言的函数库提供的,它们被称为C的标准函数(或库函 数)。对于用户来说,只要根据需要调用这些函数即可,并不需要 知道这些函数是如何实现这些功能的。因此,有了这些C的标准函 数(或库函数),既可以加强用户所编程序的功能,又可以提高程 序设计的效率。,函数的概念,7.1 C函数概述,通常一个具有一定规模的C程序往往是由多个函数组成的,其中必有而且仅有一个主函数 (即main

3、()),由主函数来调用其他函数;根据需要,其他函数之间可以相互调用;同一 个函数可以被一个或多个函数调用一次或多次。也就是说,C语言程序的全部功能都是由 函数实现的,每个函数相对独立并具有特定的功能;可以通过函数间的调用来实现程序的 总体功能。下图是某个程序中的函数调用示意图。,说 明,Main主函数,a函数,b函数,c函数,d函数,e函数,d函数,在C语言中,主函数可以调用其他函数,而其他函数均不能调用主函数。通常把调用其他函数的函数称为主调函数,而将被调用的函数称为被调函数。可见主函数只能是主调函数,而其他非主函数可以是主调函数,也可以是被调函数。,7.1 C函数概述,从使用的角度来分,可

4、以分为标准函数和用户函数。标准函数(即库函数) 是指由系统提供的、已定义好的函数(即已在C库函数头文件中定义),用 户可以直接使用(详见附录)。用户函数(也称自定义函数)是指用户在 源程序中自己定义的函数,用来专门解决用户自己的特定需求。 从形式上来分,可以分为无参函数(即函数没有参数)和有参函数(即函数 有若干个参数)。这是根据函数定义时是否设置参数来划分的。无参函数一 般以不带回函数返回值的居多;有参函数主要用来在主调函数与被调函数间 进行数据的传递,一般会带回函数的返回值。 从作用范围来分,可以分为外部函数和内部函数。外部函数是指可以被任何 源程序文件中的函数所调用的函数。内部函数是指只

5、能被其所在的源程序文 件中的函数所调用的函数。 从返回值来分,可以分为无返回值函数和有返回值函数。,C语言中,函数可按多种方式分类,7.2 函数的定义与调用,和前面的变量与数组一样,函数也是先定义后使用(若是调用在前,定义在后,则需在调用 之前加上该函数的声明,具体做法见本节第3点的介绍)。定义函数就是编写一段描述该函数 要实现某种功能的程序。不得使用未定义的函数。 函数定义的一般形式如下: 函数类型标识符 函数名(形式参数列表) 变量定义或有关声明部分 语句部分 ,函数的定义,函数类型标识符:用来指定函数返回值的数据类型,可以是前面介绍的各种基本类型,也可以是后面将要 介绍的其他类型(如结构

6、体等)。当函数的类型为int型时也可以省略,所以当不指明函数的类型时,系统 默认函数返回值的数据类型是int型。无参函数一般不需要带回函数值,因此可以在函数名前面加上关键字 void(表示无类型或称为空类型),它表示本函数无返回值。函数名:是一个标识符,其命名规则必须遵 循C语言标识符命名规则(详见第2章)。在同一个C程序文件中,函数不允许重名。形式参数列表:说明 参数的数据类型和参数名,参数名也是标识符,其命名规则也必须遵循C语言标识符命名规则;如果有多个 形式参数,则参数之间要用逗号隔开,每个参数还必须指定它的数据类型。如果没有参数,说明定义的是一 个无参函数,函数名后面的圆括号不能省略(

7、圆括号是函数的标志)。 定义有参函数时,其函数首部的书写方法本书采用如下形式: int max(int x,int y,int z) 函数体 ,(1)函数的定义由两部分组成:函数首部和函数体。 (2)函数首部包含了函数类型说明、函数名和参数说明等几项。,说明,(3)函数体:包含该函数所用到的变量定义或有关声明部分及实现该函数功能的相关程序段部分。注意:函数体部分一定要写在一对花括号里面。 函数体一般是由说明部分和语句部分组成,说明部分主要是对本函数中使用到的变量进行定义;语句部分由C语言的基本语句组成,是实现函数功能的主体部分。每个函数必须单独定义,不允许嵌套定义,即不能在一个函数体中再定义另

8、一个函数。,7.2 函数的定义与调用,(4)空函数:是指函数体为空的函数,在空函数中,只定义函数的首部(函数名及其类型和参数名及其类型)。空函数是什么都不做的函数,用于程序设计的初期,先占位置,便于以后扩充新功能,提高程序的可读性,使得程序结构清晰。 (5)函数的参数分两种:一是形式参数(简称形参),是在定义函数时函数名后面圆括号内的变量名。二是实际参数(简称实参),是主调函数调用一个函数时,函数名后面圆括号中的参数(可以是常量、变量或表达式)。 在函数定义时必须指定形参的数据类型,只有在发生调用时才给形参分配存储单元,调用结束后,形参所占的内存单元就被释放。C语言规定实参对形参的数据传递是单

9、向值传递,即只由实参传给形参,不能由形参传给实参。实参变量和形参变量在内存中是占用不同的存储单元。形参的值如果发生变化,并不会改变主调函数中实参的值。,7.2 函数的定义与调用,函数调用就是主调函数通过数据传递来使用被调函数的功能,数据传递 是通过实参与形参来完成的。函数调用的一般形式为: 函数名(实参表列) 如果调用的是无参函数,则实参表列就没有,但一对圆括号不能少。如果 实参表列中包含多个实参,则参数间用逗号隔开。实参和形参的个数应相 等、类型一致,并按顺序一一对应传递数据。 函数调用的方式有三种:一是函数语句(以分号结束)。 如:printf(“sum= %dn”, sum);。二是函数

10、表达式。 如:c=3*max(a, b);。三是函数参数,函数调用作为另一个函数的实参。 如:printf (“max= %dn“, max(a, b);,函数的调用,在主调函数中调用某一函数时,如果被调函数的定义在后面,也就是先调用后定义, 此时在调用前必须要对被调函数进行声明,目的是向编译系统提供必要的信息,以便 在函数调用时进行语法检查。,函数声明,7.2 函数的嵌套调用,嵌套调用简介,所谓函数的“嵌套调用”是指函数x调用了函数y,而函数y又调用了函数z。C语言中函数不允许嵌套定义,但可以嵌套调用,即在调用一个函数的过程中,被调函数又可以调用另一个函数。,示意图,7.4 函数的递归调用,

11、所谓函数的“递归调用”是指一个函数直接调用自己(即直接递归调用) 或通过其他函数间接地调用自己(即间接递归调用)。如下图所示。,f函数,调用f函数,f1函数,f2函数,调用f2函数,调用f1函数,7.5 数组作为函数参数,把数组元素(又称为下标变量)作为实 参使用,它与普通变量并无区别,其用 法与普通变量完全相同:在发生函数调 用时,把数组元素的值传递给形参,也 是单向值传递的方式。,数组名作函数参数时,既可以作形参,也可 以作实参;此时要求形参和它相对应的实参 都必须是类型相同的数组(或者是指向数组 的指针变量),并且必须对数组都有明确的 说明。,数组名作函数的形参和实参,(1)用数组名作函

12、数参数,应在主调函数和被调函数中分别定义数组; (2)实参数组与形参数组的数据类型应一致; (3)形参数组的大小实际不起作用,C编译系统只是将实参数组的首地址 传给形参数组; (4)形参数组也可以不指定大小,在定义时数组名后面跟一对空的方括弧即可,也 可另设一个参数来传递需要处理的数组元素的个数; (5)用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的 首地址传递给形参数组,两个数组共同占用同一块内存单元。如果形参数组中各元素 的值发生变化,实参数组元素的值也会随之而变。,数组元素作函数实参,对数组名作函数参数的说明,7.6 局部变量和全局变量,在C语言中,变量能够被使用的

13、范围或者变量能起作用的范围就称为变量的作用域。变量只能在它的作用范围内使用,不能在它的作用域之外被引用。变量的作用域和变量的定义位置有关。,(1)在main函数中定义的变量只在main函数中有效,不因为是主函数而使 其中定义的变量在整个程序文件中有效; (2)不同的函数中可以使用相同名字的变量,它们代表不同的对象,互不 影响,均为局部变量,仅在它所在的函数中有效; (3)形参也是局部变量,仅在它所在的函数中有效,即其作用范围是它所在的函数; (4)在一个函数的内部,可以在复合语句中定义变量,这些变量只在本复合语句内有效, 而且它可以和复合语句外的变量同名,互不影响。,说明,1局部变量 在一个函

14、数的内部定义的变量就是局部变量(又称为内部变量),它只在本函数范围内有效,也就是说只能在本函数内使用,在本函数的外面是不能使用的,故称它为局部变量。局部变量就是函数的内部定义的变量。,7.6 局部变量和全局变量,(1)全局变量增加了函数之间数据联系的渠道。为了区分全局变量和局部变量,C程序 设计人员有一个不成文的约定:将全局变量名的首字母用大写表示; (2)在同一源程序文件中,如果全局变量与局部变量同名,那么在局部变量的作用范围 内,全局变量不起作用,也就是说此时的全局变量被同名的局部变量所屏蔽; (3)建议不在必要时不要使用全局变量,因为全局变量给程序设计带来诸多弊病:在 程序执行过程中始终

15、占用存储单元,而不是根据需要,从而降低了存储空间的利用率。 降低程序的清晰性,让人难以判断每个瞬间各外部变量的值。降低了函数的通用性 和可靠性,如果函数在执行时要依赖外部变量,当以后将此函数移到另一个文件中时, 就要连同它的外部变量也随之移去;如该变量和其他文件中的变量同名,就会出问题。,说明,2全局变量 一个源程序文件可以有若干个函数,在函数内定义的变量是局部变量,而在一个源程序文件中所有函数之外定义的变量就称为外部变量,外部变量是全局变量(也称为全程变量)。全局变量可以被本文件中的多个函数共用,它的有效范围是从定义变量的位置开始到本源程序文件结束。在一个函数中既可使用本函数中的局部变量,也

16、可使用有效的全局变量。,7.7 变量的存储类别,C程序在运行时占用的内存空间通常分为三部分: 程序区、静态存储区和动态存储区。 数据一般放在静态存储区或动态存储区中。 静态存储区用来存放全局变量和静态局部变量; 动态存储区用来存放自动变量和函数的形参。 在C语言中每个变量和函数有两个属性:数据类型和数据的存储类别。 数据类型前已述及,在此不再赘述,详见有关章节。数据的存储类别表示数据在 内存中存储的方式,存储方式分为两大类:静态存储类和动态存储类。具体包括 自动的(auto)、静态的(static)、寄存器的(register)和外部的 (extern)。完整的变量定义形式为: 存储类别 数据类型 变量名1,变量名2, 变量名n;,概 念,7.7 变量的存储类别,变量的存储类别决定了变量的作用域和生存期。按变量值的生存时间(生存期)的不同, 变量可分为静态存储方式和动态存储方式:静态存储方式是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号