C语言程序设计 教学课件 ppt 作者 黄锐军 第6章 函数

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

《C语言程序设计 教学课件 ppt 作者 黄锐军 第6章 函数》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 黄锐军 第6章 函数(27页珍藏版)》请在金锄头文库上搜索。

1、第6章 函数,在这一章中将介绍C语言程序的函数,函数是一段连续的程序代码的组合,它用来完成一定功能,一个C语言程序往往由很多个函数组成,函数之间并列排放,相互调用,协同工作,完成一个大的任务。,6.1 函数定义 6.2 函数参数与返回值数 6.3 变量类型 6.4 函数调用,6.1 函数定义,实际上读者对函数并不陌生,C语言中有大量的内部函数,程序的主体main就是一个函数,除此之外在程序中还可以定义自己的函数。 返回类型 函数名称(类型1 参数1,类型2 参数2,) / 函数体 返回类型是函数值的数据类型,可以是C语言中的char、int、short、long、float、double等任何

2、一种基本的数据类型。返回类型可以省略不写,如不写则默认为int类型。,函数名称是用户自己定义的名称,与变量的命名规则一样。 函数可以有很多参数,每一个参数都有一个类型及名称,它们是函数的变量,不同的变量对应的函数值往往不同,这是函数的本质所在,这些参数称为函数的形式参数。 函数体是函数的程序代码,它们包含在一对大括号内。 函数被设计成为完成某一个功能的一段程序代码或模块,C语言把一个问题划分成多个模块,分别对应一个个的函数,一个C语言程序往往有多个函数组成,最简单的C语言程序只有一个函数,那就是main函数自己。,6.2 函数参数与返回值数,6.2.1 函数参数 在调用函数时,形式参数规定了函

3、数需要的数据个数及其类型,实际参数必须在类型与数目上与形式参数一样,一般规则是: (1) 形式参数是函数的内部变量,有名称及类型。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用; (2) 实际参数的个数与类型必须与形式参数一致,实际参数可以是变量,常数、表达式、甚至是一个函数;,(3) 当实际参数是变量时,它不一定要与形式参数同名称,实际参数变量与形式参数变量是不同的内存变量,它们其中一个值的变化不会影响到另外一个变量。 (4) 如实际参数的类型与形式参数的类型不完全一致,至少是可以赋值转换的,否则会发生“类型不匹配”的错误;,(5) 函数调用中发生的数据传送是单向的,即

4、只能把实参的值传送给形参,而不能把形参的值反向地传送给实参,因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化; (6) 函数可以没有参数,但此时圆括号不可缺少;,6.2.2 函数返回值 函数的值是指函数被调用之后, 执行函数体中的程序段所取得的并返回给主调函数的值。一般函数计算后总有一个返回值,通过函数内部的return语句来实现这个返回值,格式是: return 表达式; return返回一个数据类型与函数返回类型一致的表达式,该表达式的值就是函数的返回值。,6.2.3 没有返回值的函数,1 没有返回值的函数 函数也可以没有返回值,这种函数的返回类型被定义成void类型,例如下面

5、函数: void SayHello() puts(“Hello,everyone!”); void类型的函数中也可以有return语句,但return后面不可以有任何表达式,例如: void fun(float x) if(x0) return; /在x0时结束函数并返回 printf(“%f的平方根是%f”,sqrt(f); ,没有确定值的函数 如果函数的返回类型不是void而是一个有确定类型的数据,但函数内部没有由return语句返回一个确定的表达式的值,则该函数的值不确定,例如: int Max(int x,int y) int z; z=(xy?x:y); 则调用Max函数后值不确定,

6、例如Max(1,2)的值不一定是。,6.2.4 函数调用,函数调用是比较简单的,调用自己编写的函数就象调用C语言内部函数一样。有返回值的函数可以放在合适的任何一个表达式中去计算,当然也可以单独作为一条语句执行。而void类型的函数不能用在任何一个表达式中去参加计算,只能作为单独的一条语句执行。 但C语言中规定,函数必须先定义才可以调用,既在调用函数时编译器必须已经事先知道该函数的参数构造,不然编译会出错误。,对库函数的调用不需要再作说明, 但必须把该函数的头文件用include命令包含在源文件前部,实际上include命令包含的头文件中就是库函数说明。 main函数是C语言中的主函数,程序是从

7、main函数的第一条语句开始的,当main的最后一条语句执行完毕后,main函数执行完毕,这样整个程序就执行完毕。一个复杂的C程序中main函数要去调用别的函数,而被main调用的函数又有可能再去调用别的函数,这样形成函数的层层调用,从而完成一个复杂的任务。,6.3 变量类型,6.3.1 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。,关于局部变量的作用域还要说明以下几点: (1) 函数中定义的变量只能在函数中使用,不能在其它函数中使用。同时,一个函数中也不能使用其它函数中定义的变量。各个函数之间是平行关系,每个函数

8、都封装了一块字节的区域,互不相干。 (2) 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 (3) 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。例6_3中sum函数的m、s变量与main函数的m、s变量同名,但它们是不同的变量。,6.3.2 全局变量,1 全局变量的作用域 全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。全局变量一般在程序的开头部分定义,任何一个函数都可以使用它,当在一个函数中改变了全局变量的值时,会直接影响到其它函数的访问值。 全局变量

9、也可以在程序别位置定义,只要它在函数之外就行,但在使用它时必须让编译器已经知道它是什么,因此也像函数说明那样,在程序使用它之前必须先说名变量,说明的方法是用extern声明变量。,2 全局变量与局部变量 前面已经讲到全局变量的作用域是整个程序,它在程序开始时就存在,任何函数都可以访问它,而且所有函数访问的同名称的全局变量是同一个变量,全局变量只有在程序结束时才销毁。 局部变量是函数内部的范围内的变量,当执行此函数时才有效,退出函数后局部变量就销毁。不同的函数之间的局部变量是不同的,哪怕同名字也互不相干。,但存在一个问题,就是如果一个函数内部的局部变量与程序的全局变量同名字,那么函数访问到的变量

10、是函数自己的局部变量呢还程序的全局变量?这种情况下C语言规定局部变量优先。 局部变量有局部性,这使得函数有对立性,函数与外界的接口只有函数参数与它的返回值,使程序的模块化更突出,这样有利于开发大型的程序。全局变量具有全局性,是实现函数之间数据交换的公共途径,但大量地使用全局变量会破坏函数的独立性,导致程序的模块化程度下降,因此要尽量减少使用全局变量,多使用局部变量,函数之间应尽量保持其独立性,函数之间最好只通过接口参数来传递数据。,6.3.3 静态变量,静态变量是一种在变量定义时就分配存储单元并一直保持不变的变量,直至整个程序结束。静态变量用static来定义,静态变量也称为static变量,

11、没有用static定义的变量就称为是动态变量或普通变量。 静态变量也可以分全局的静态变量与局部的静态变量变量。全局的static变量与全局的普通变量在只有一个源程序的系统中没有什么区别,只有在多个源程序文件的系统中才有区别。,6.3.4 变量的初始值,C语言对于一般函数内部的局部变量、静态变量以及全局变量的初始值设置是不同的。对于一般函数内部的局部变量如果在定义时没有设置它的初始值,则变量的值是随机的,但对于静态变量或全局变量,如果在定义时没有设置它的初始值则变量的值是0。 在程序设计中要保证变量初始化,尤其是对局部变量的初始化,不然会得到预想不到的结果。,6.4 函数调用,6.4.1 嵌套调

12、用 在C语言中,所有的函数定义,包括主函数main在内,都是平行的。函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。main 函数是全程序的主函数,它可以调用其它函数,而不允许被其它函数调用。C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。,嵌套调用就是一个函数调用另外一个函数,被调用的函数又进一步调用另外一个函数,形成一层层的嵌套关系,一个复杂的程序存在多层的函数调用。如图6-10所示展示了这种关系,main函数调用函数A,在A中又调用函数B,B又调用C,在C完成后返回B的调用处,继续B的执行,之后B执行完毕返

13、回A的调用处,A又接着往下执行,随后A又调用D函数,D执行完后返回A,A执行完后返回main函数,main接着往下执行,main完成后程序就结束了。,图6-10 函数嵌套调用,对应的程序结构如下: void D() void C() void B() C(); void A() B(); D(); void main() A(); ,函数调用可以这样一层层地嵌套下去,但函数调用一般不可以出现循环,如图6-11所示是一个循环,函数X调用函数Y,Y又反过来调用X,之后X又调用Y,没完没了,形成死循环。,图6-11 函数循环,6.4.2 递归调用,上面讲到函数一般不能形成循环调用,但函数可以自己调用自己,既自己形成循环调用,这种自己调用自己的调用称为递归。递归调用实际上是一种循环,这种调用的关键是要设置好循环条件,让循环进行到一定程度时能一层层地退出,不能形成死循环,因此这一类的程序编写要格外小心。,

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

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

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