C语言程序设计第7章-函数.ppt

上传人:知****量 文档编号:78675779 上传时间:2023-03-18 格式:PPT 页数:28 大小:6.14MB
返回 下载 相关 举报
C语言程序设计第7章-函数.ppt_第1页
第1页 / 共28页
C语言程序设计第7章-函数.ppt_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《C语言程序设计第7章-函数.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第7章-函数.ppt(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计主编:连卫民 何 樱第7章 函数本章主要内容:本章主要内容:本章主要内容:本章主要内容:7 7.1 .1 函数概述函数概述函数概述函数概述7 7.2 .2 函数的定义与调用(重点)函数的定义与调用(重点)函数的定义与调用(重点)函数的定义与调用(重点)7 7.3 .3 函数的嵌套与递归(重点)函数的嵌套与递归(重点)函数的嵌套与递归(重点)函数的嵌套与递归(重点)7 7.4 .4 局部变量与全局变量局部变量与全局变量局部变量与全局变量局部变量与全局变量 7 7.5 .5 变量的存储类型变量的存储类型变量的存储类型变量的存储类型7 7.6 .6 内部函数与外部函数内部函数与外部函数

2、内部函数与外部函数内部函数与外部函数本章教学要求:本章教学要求:本章教学要求:本章教学要求:1.1.了解了解了解了解函数的基本概念和分类函数的基本概念和分类函数的基本概念和分类函数的基本概念和分类 2.2.熟悉熟悉熟悉熟悉变量存储属性的概念及其应用变量存储属性的概念及其应用变量存储属性的概念及其应用变量存储属性的概念及其应用 3.3.掌握掌握掌握掌握函数的定义形式、函数的参数和函数的返回值、函数的定义形式、函数的参数和函数的返回值、函数的定义形式、函数的参数和函数的返回值、函数的定义形式、函数的参数和函数的返回值、函数的嵌套调用和递归函数的设计方法函数的嵌套调用和递归函数的设计方法函数的嵌套调

3、用和递归函数的设计方法函数的嵌套调用和递归函数的设计方法 7.1 函数概述函数概述7.1.1 函数的概念函数的概念C C语言的函数与数学的函数十分语言的函数与数学的函数十分语言的函数与数学的函数十分语言的函数与数学的函数十分相似相似相似相似。数学函数数学函数数学函数数学函数“y=f(x)y=f(x)”表示表示表示表示:对于对于对于对于自变量自变量自变量自变量x x的每个给定的每个给定的每个给定的每个给定值,总是按照一定的规律值,总是按照一定的规律值,总是按照一定的规律值,总是按照一定的规律f f给出它的结果给出它的结果给出它的结果给出它的结果y y。例如:对于函数式例如:对于函数式例如:对于函

4、数式例如:对于函数式 y=xy=x2 2+3x+4+3x+4,C C语言可定义为语言可定义为语言可定义为语言可定义为:函数函数函数函数就是具有一定功能的可以单独命名的程序段。就是具有一定功能的可以单独命名的程序段。就是具有一定功能的可以单独命名的程序段。就是具有一定功能的可以单独命名的程序段。一个函数一般完成单一的一个函数一般完成单一的功能功能。函数函数函数函数是是是是C C程序的基本模块,通过对函数模块的调用实程序的基本模块,通过对函数模块的调用实程序的基本模块,通过对函数模块的调用实程序的基本模块,通过对函数模块的调用实现特定的功能现特定的功能现特定的功能现特定的功能。第7章 函数7.1

5、函数函数概述概述7.1.2 函数分类函数分类 在在在在C C语言语言语言语言中,可以中,可以中,可以中,可以从不同的角度对函数从不同的角度对函数从不同的角度对函数从不同的角度对函数分类。分类。分类。分类。1 1.根据函数自身形式划分根据函数自身形式划分根据函数自身形式划分根据函数自身形式划分 (1 1)无参函数)无参函数)无参函数)无参函数:函数名后括号中没有参数(调用时:函数名后括号中没有参数(调用时:函数名后括号中没有参数(调用时:函数名后括号中没有参数(调用时无数据传送无数据传送无数据传送无数据传送)。)。)。)。(2 2)有参函数)有参函数)有参函数)有参函数:函数名后括号函数名后括号

6、函数名后括号函数名后括号中有中有中有中有参数参数参数参数(调用时调用时调用时调用时有数据有数据有数据有数据传送传送传送传送)。2.2.从用户角度划分从用户角度划分从用户角度划分从用户角度划分 (1 1)标准函数(即库函数):)标准函数(即库函数):)标准函数(即库函数):)标准函数(即库函数):是是是是C C语言的系统软件为用户提供的语言的系统软件为用户提供的语言的系统软件为用户提供的语言的系统软件为用户提供的无需定义就可以直接使用的函数。无需定义就可以直接使用的函数。无需定义就可以直接使用的函数。无需定义就可以直接使用的函数。(2 2)自定义函数:)自定义函数:)自定义函数:)自定义函数:是

7、由用户按照需要编写的函数。是由用户按照需要编写的函数。第7章 函数7.1 函数函数概述概述7.1.2 函数函数分类分类3.C3.C语言程序总体结构语言程序总体结构语言程序总体结构语言程序总体结构C C语语语语言言言言程程程程序序序序是是是是由由由由一一一一个个个个或或或或多多多多个个个个函函函函数数数数模模模模块块块块组组组组成成成成,每每每每个个个个函函函函数数数数都都都都具具具具有有有有相相相相对对对对独独独独立立立立的的的的单单单单一一一一功功功功能能能能。所所所所以以以以,我我我我们们们们说说说说C C语语语语言言言言程程程程序是函数的集合体。序是函数的集合体。序是函数的集合体。序是函

8、数的集合体。有有有有且且且且只只只只有有有有一一一一个个个个函函函函数数数数称称称称为为为为主主主主函函函函数数数数,程程程程序序序序的的的的执执执执行行行行总总总总是是是是从从从从主主主主函数开始。函数开始。函数开始。函数开始。主函数中的所有语句执行完,则程序执行结束。主函数中的所有语句执行完,则程序执行结束。主函数中的所有语句执行完,则程序执行结束。主函数中的所有语句执行完,则程序执行结束。假假假假设设设设某某某某个个个个程程程程序序序序由由由由mainmain函函函函数数数数和和和和其其其其它它它它五五五五个个个个函函函函数数数数组组组组成成成成,如如如如图图图图7 7-1-1所示所示所

9、示所示。第7章 函数7.2 函数的定义及调用函数的定义及调用 C C语言中的标准函数用户可以直接使用,而自定义函数需语言中的标准函数用户可以直接使用,而自定义函数需语言中的标准函数用户可以直接使用,而自定义函数需语言中的标准函数用户可以直接使用,而自定义函数需要用户先定义后使用。要用户先定义后使用。要用户先定义后使用。要用户先定义后使用。7.2.1 函数的定义函数的定义1 1函数定义函数定义函数定义函数定义的的的的格式格式格式格式 定义格式定义格式定义格式定义格式:图图图图。说说说说明明明明:任任任任何何何何函函函函数数数数都都都都是是是是由由由由函函函函数数数数首首首首部部部部和和和和函函函

10、函数数数数体体体体两两两两部部部部分分分分组组组组成成成成。函函函函数数数数首首首首部部部部由由由由函函函函数数数数类类类类型型型型、函函函函数数数数名名名名和和和和函函函函数数数数参参参参数数数数组组组组成成成成,函函函函数数数数体体体体由由由由说说说说明部分和执行部分组成。明部分和执行部分组成。明部分和执行部分组成。明部分和执行部分组成。【例例例例7 7-1-1】定义一个求两个整数和的函数。定义一个求两个整数和的函数。定义一个求两个整数和的函数。定义一个求两个整数和的函数。【例例例例7 7-2-2】定义输出一串字符的函数。定义输出一串字符的函数。定义输出一串字符的函数。定义输出一串字符的函

11、数。注注注注意意意意:在在在在函函函函数数数数定定定定义义义义时时时时,函函函函数数数数名名名名要要要要反反反反映映映映函函函函数数数数的的的的功功功功能能能能;每每每每一一一一个个个个函函函函数数数数要要要要完完完完成成成成一一一一个个个个具具具具体体体体的的的的功功功功能能能能;函函函函数数数数定定定定义义义义不不不不能能能能嵌嵌嵌嵌套套套套,也也也也就就就就是是是是说在函数体内不能再定义函数。说在函数体内不能再定义函数。说在函数体内不能再定义函数。说在函数体内不能再定义函数。第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.1 函数的定义函数的定义2 2函数参数函数参数函数参数

12、函数参数 函数参数分为形参和实参两种,作用是实现数据传送。函数参数分为形参和实参两种,作用是实现数据传送。函数参数分为形参和实参两种,作用是实现数据传送。函数参数分为形参和实参两种,作用是实现数据传送。定定定定义义义义函函函函数数数数时时时时的的的的参参参参数数数数称称称称为为为为形形形形式式式式参参参参数数数数,简简简简称称称称形形形形参参参参。因因因因为为为为该该该该参参参参数数数数在在在在该该该该函函函函数数数数被被被被调调调调用用用用之之之之前前前前是是是是没没没没有有有有确确确确定定定定值值值值的的的的,只只只只是是是是形形形形式式式式上上上上的的的的参参参参数数数数,这种参数只有在

13、函数被调用时通过实参来获取值。这种参数只有在函数被调用时通过实参来获取值。这种参数只有在函数被调用时通过实参来获取值。这种参数只有在函数被调用时通过实参来获取值。调用函数时的参数称为调用函数时的参数称为调用函数时的参数称为调用函数时的参数称为实际参数实际参数实际参数实际参数,简称实参。,简称实参。,简称实参。,简称实参。强强强强调调调调:函函函函数数数数的的的的参参参参数数数数表表表表示示示示实实实实现现现现该该该该函函函函数数数数功功功功能能能能所所所所必必必必需需需需的的的的已已已已知知知知条条条条件件件件,在定义函数时以形参的形式给出。在定义函数时以形参的形式给出。在定义函数时以形参的形

14、式给出。在定义函数时以形参的形式给出。【例例例例7 7-3-3】定义一个求定义一个求定义一个求定义一个求n n个整数和的函数个整数和的函数个整数和的函数个整数和的函数。说明:说明:说明:说明:数组作为形参时其长度可省略。数组作为形参时其长度可省略。第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.1 函数的定义函数的定义3 3函数的类型和返回值函数的类型和返回值函数的类型和返回值函数的类型和返回值 函数的类型在函数名前面给出,表明该函数返回值的类型。函数的类型在函数名前面给出,表明该函数返回值的类型。函数的类型在函数名前面给出,表明该函数返回值的类型。函数的类型在函数名前面给出,表明

15、该函数返回值的类型。函函函函数数数数返返返返回回回回值值值值是是是是指指指指函函函函数数数数被被被被调调调调用用用用之之之之后后后后,用用用用returnreturn语语语语句句句句返返返返回回回回主主主主调调调调函数的值。函数的值。函数的值。函数的值。returnreturn语句的格式:语句的格式:语句的格式:语句的格式:return return 表达式表达式表达式表达式;或或或或 return(return(表达式表达式表达式表达式););或或或或 return;return;一般地,一般地,一般地,一般地,函数函数函数函数的的的的类型类型类型类型应与应与应与应与returnreturn

16、语句后表达式的类型一致语句后表达式的类型一致语句后表达式的类型一致语句后表达式的类型一致。当当当当函函函函数数数数体体体体没没没没有有有有returnreturn语语语语句句句句或或或或returnreturn后后后后没没没没有有有有表表表表达达达达式式式式,表表表表示示示示函函函函数数数数没没没没有有有有明明明明确确确确的的的的返返返返回回回回值值值值,此此此此时时时时函函函函数数数数的的的的类类类类型型型型一一一一般般般般定定定定义义义义为为为为空空空空类类类类型型型型,即即即即voidvoid类型。类型。类型。类型。如例如例如例如例7-27-2的的的的hellohello函数函数函数函数

17、。returnreturn控制程序控制程序控制程序控制程序流程返回主调函数,宣告流程返回主调函数,宣告流程返回主调函数,宣告流程返回主调函数,宣告函数调用结束函数调用结束函数调用结束函数调用结束。第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.2 函数的调用函数的调用1.1.函数调用方式函数调用方式函数调用方式函数调用方式 一般形式:一般形式:函数函数函数函数名(实参表列)名(实参表列)名(实参表列)名(实参表列)三三三三种方式种方式种方式种方式:(1 1)函数语句:)函数语句:)函数语句:)函数语句:函数调用的一般形式加上分号。函数调用的一般形式加上分号。函数调用的一般形式加上分

18、号。函数调用的一般形式加上分号。例如:例如:例如:例如:hellohello();();(2 2)函数表达式)函数表达式)函数表达式)函数表达式:函数出现在一个表达式中,这种表达式:函数出现在一个表达式中,这种表达式:函数出现在一个表达式中,这种表达式:函数出现在一个表达式中,这种表达式称为函数表达式。称为函数表达式。称为函数表达式。称为函数表达式。例如例如例如例如:x=max(x=max(a,ba,b)+2;)+2;(3 3)函数参数)函数参数)函数参数)函数参数:函数作为另一个函数调用的实际参数出现。:函数作为另一个函数调用的实际参数出现。:函数作为另一个函数调用的实际参数出现。:函数作为

19、另一个函数调用的实际参数出现。例如例如例如例如:m=max(m=max(a,maxa,max(b,cb,c););说明:三种调用方式中后两种要求函数必须有明确的返回值。说明:三种调用方式中后两种要求函数必须有明确的返回值。说明:三种调用方式中后两种要求函数必须有明确的返回值。说明:三种调用方式中后两种要求函数必须有明确的返回值。第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.2 函数的调用函数的调用2.2.函数调用中的参数函数调用中的参数函数调用中的参数函数调用中的参数 参参参参数数数数是是是是函函函函数数数数调调调调用用用用时时时时进进进进行行行行信信信信息息息息交交交交换换换换

20、的的的的载载载载体体体体,其其其其传传传传递递递递方方方方式式式式是是是是单单单单向传送,即数据由实参传给形参向传送,即数据由实参传给形参向传送,即数据由实参传给形参向传送,即数据由实参传给形参。要要要要求求求求实实实实参参参参与与与与形形形形参参参参个个个个数数数数相相相相等等等等、类类类类型型型型对对对对应应应应一一一一致致致致,并并并并且且且且实实实实参参参参的的的的值值值值必须确定必须确定必须确定必须确定。参数之间的数据传递一般有参数之间的数据传递一般有参数之间的数据传递一般有参数之间的数据传递一般有两种形式:两种形式:两种形式:两种形式:(1 1)传值)传值)传值)传值 (普通变量作

21、为函数参数普通变量作为函数参数普通变量作为函数参数普通变量作为函数参数)函函函函数数数数调调调调用用用用时时时时,系系系系统统统统给给给给形形形形式式式式参参参参数数数数分分分分配配配配存存存存储储储储空空空空间间间间,按按按按数数数数据据据据复复复复制制制制的的的的方方方方式式式式,实实实实参参参参把把把把数数数数据据据据传传传传递递递递给给给给形形形形参参参参。数数数数据据据据传传传传递递递递是是是是单单单单向向向向的的的的值值值值传传传传送,送,送,送,形参与实参分别占用不同的存储空间。形参与实参分别占用不同的存储空间。形参与实参分别占用不同的存储空间。形参与实参分别占用不同的存储空间。

22、调调调调用用用用结结结结束束束束后后后后,被被被被调调调调函函函函数数数数中中中中所所所所有有有有变变变变量量量量(包包包包含含含含形形形形参参参参)的的的的存存存存储储储储空空空空间释放,不能再被使用,其值也不会再传回给实参间释放,不能再被使用,其值也不会再传回给实参间释放,不能再被使用,其值也不会再传回给实参间释放,不能再被使用,其值也不会再传回给实参。例如:例如:例如:例如:调用例调用例调用例调用例7-27-2中中中中sumsum函数的完整程序函数的完整程序函数的完整程序函数的完整程序第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.2 函数的调用函数的调用2.2.函数调用中的

23、参数函数调用中的参数函数调用中的参数函数调用中的参数(2 2)传地址)传地址)传地址)传地址 (数组名(数组名(数组名(数组名作为作为作为作为函数参数函数参数函数参数函数参数)当需要当需要当需要当需要把把把把数组的全部元素传递到另一函数中数组的全部元素传递到另一函数中数组的全部元素传递到另一函数中数组的全部元素传递到另一函数中处理处理处理处理时使用。时使用。时使用。时使用。数数数数组组组组名名名名作作作作参参参参数数数数,实实实实参参参参和和和和形形形形参参参参都都都都应应应应使使使使用用用用数数数数组组组组名名名名,并并并并且且且且在在在在主主主主调调调调函数和被调函数中分别进行定义函数和被

24、调函数中分别进行定义函数和被调函数中分别进行定义函数和被调函数中分别进行定义。例如:调用例如:调用例如:调用例如:调用例例例例7-37-3中中中中sumnsumn函数的完整函数的完整函数的完整函数的完整程序程序程序程序 当当当当执执执执行行行行“s=s=sumnsumn(x,10)(x,10)”语语语语句句句句时时时时,将将将将数数数数组组组组x x的的的的首首首首地地地地址址址址(假假假假设设设设为为为为10201020)传传传传送送送送给给给给形形形形参参参参数数数数组组组组a a,从从从从而而而而形形形形参参参参数数数数组组组组a a与与与与实实实实参参参参数数数数组组组组arrayar

25、ray共用相同的一组存储单元,共用相同的一组存储单元,共用相同的一组存储单元,共用相同的一组存储单元,如图如图如图如图7-27-2所示所示所示所示。值值值值得得得得强强强强调调调调:在在在在被被被被调调调调函函函函数数数数中中中中并并并并没没没没有有有有为为为为形形形形参参参参数数数数组组组组另另另另外外外外开开开开辟辟辟辟存存存存储储储储单单单单元元元元,也也也也没没没没有有有有进进进进行行行行复复复复制制制制式式式式传传传传递递递递数数数数组组组组元元元元素素素素的的的的值值值值,而而而而是是是是通通通通过过过过与与与与实参数组共享存储单元而达到目的。实参数组共享存储单元而达到目的。实参数

26、组共享存储单元而达到目的。实参数组共享存储单元而达到目的。第7章 函数7.2 函数的定义及调用函数的定义及调用7.2.2 函数的调用函数的调用3.3.被调函数的声明被调函数的声明被调函数的声明被调函数的声明 若函数若函数若函数若函数定义放在调用它的函数之前,主调函数中可以直定义放在调用它的函数之前,主调函数中可以直定义放在调用它的函数之前,主调函数中可以直定义放在调用它的函数之前,主调函数中可以直接使用该函数接使用该函数接使用该函数接使用该函数。否则要。否则要。否则要。否则要在主调函数中先声明该在主调函数中先声明该在主调函数中先声明该在主调函数中先声明该函数。函数。函数。函数。函数声明的函数声

27、明的函数声明的函数声明的一般格式一般格式一般格式一般格式为:为:为:为:类型类型类型类型标识符标识符标识符标识符 函数名函数名函数名函数名(函数参数表函数参数表函数参数表函数参数表 ););函数声明的内容函数声明的内容函数声明的内容函数声明的内容就是函数定义的首部内容,也称函数模就是函数定义的首部内容,也称函数模就是函数定义的首部内容,也称函数模就是函数定义的首部内容,也称函数模型(或函数原型)。向编译系统提供函数名、函数类型、型(或函数原型)。向编译系统提供函数名、函数类型、型(或函数原型)。向编译系统提供函数名、函数类型、型(或函数原型)。向编译系统提供函数名、函数类型、函数参数的个数、类

28、型等信息。函数参数的个数、类型等信息。函数参数的个数、类型等信息。函数参数的个数、类型等信息。【例例例例7 7-4-4】函数声函数声函数声函数声明可以明可以明可以明可以省略形参名,仅有形参类型,也可二者均省略形参名,仅有形参类型,也可二者均省略形参名,仅有形参类型,也可二者均省略形参名,仅有形参类型,也可二者均省略省略省略省略。如:。如:。如:。如:float max(float max(float,floatfloat,float);或或 float max()float max();函数函数函数函数声声声声明明明明可以函数定义的外部。可以函数定义的外部。可以函数定义的外部。可以函数定义的外

29、部。省略省略省略省略函数函数函数函数声明声明声明声明:整型函数、被:整型函数、被:整型函数、被:整型函数、被调函调函调函调函数放在主调函数之前数放在主调函数之前数放在主调函数之前数放在主调函数之前,在在在在程序开头对定义的所有函数进行声明。程序开头对定义的所有函数进行声明。程序开头对定义的所有函数进行声明。程序开头对定义的所有函数进行声明。第7章 函数7.3 函数的嵌套和递归函数的嵌套和递归7.3.1 函数的嵌套调用函数的嵌套调用 在调用一个函数的过程中又调用了另一个函数,称为函在调用一个函数的过程中又调用了另一个函数,称为函在调用一个函数的过程中又调用了另一个函数,称为函在调用一个函数的过程

30、中又调用了另一个函数,称为函数的嵌套调用。数的嵌套调用。数的嵌套调用。数的嵌套调用。【例例例例7 7-5-5】求组合数求组合数求组合数求组合数 。分析分析分析分析:由于运算式中,多次用到阶乘运算,所以把阶乘运算:由于运算式中,多次用到阶乘运算,所以把阶乘运算:由于运算式中,多次用到阶乘运算,所以把阶乘运算:由于运算式中,多次用到阶乘运算,所以把阶乘运算定义成一个函数,供多次使用。定义成一个函数,供多次使用。定义成一个函数,供多次使用。定义成一个函数,供多次使用。C C语言中函数的定义是平行的、独立的,不允许在一个函语言中函数的定义是平行的、独立的,不允许在一个函语言中函数的定义是平行的、独立的

31、,不允许在一个函语言中函数的定义是平行的、独立的,不允许在一个函数体内定义另一个函数,但是数体内定义另一个函数,但是数体内定义另一个函数,但是数体内定义另一个函数,但是C C语言允许在一个函数的定语言允许在一个函数的定语言允许在一个函数的定语言允许在一个函数的定义中调用另一个函数。这样就出现了函数的嵌套调用,义中调用另一个函数。这样就出现了函数的嵌套调用,义中调用另一个函数。这样就出现了函数的嵌套调用,义中调用另一个函数。这样就出现了函数的嵌套调用,如如如如图图图图7 7-3-3所示所示所示所示。函数嵌套的级数是不受限制的。但是,函数嵌套的级数函数嵌套的级数是不受限制的。但是,函数嵌套的级数函

32、数嵌套的级数是不受限制的。但是,函数嵌套的级数函数嵌套的级数是不受限制的。但是,函数嵌套的级数越多,执行效率就越低。越多,执行效率就越低。越多,执行效率就越低。越多,执行效率就越低。第7章 函数7.3.2 函数的函数的递归递归调用调用 函函函函数数数数的的的的递递递递归归归归调调调调用用用用是是是是在在在在调调调调用用用用一一一一个个个个函函函函数数数数的的的的过过过过程程程程中中中中又又又又直直直直接接接接或或或或间间间间接接接接地地地地调调调调用用用用该该该该函函函函数数数数本本本本身身身身。在在在在调调调调用用用用函函函函数数数数的的的的过过过过程程程程中中中中又又又又调调调调用用用用了

33、了了了本本本本函函函函数数数数,这这这这称称称称为为为为直直直直接接接接递递递递归归归归调调调调用用用用。而而而而在在在在调调调调用用用用函函函函数数数数中中中中通通通通过过过过调调调调用用用用其他函数调用本函数,这称为间接递归调用。其他函数调用本函数,这称为间接递归调用。其他函数调用本函数,这称为间接递归调用。其他函数调用本函数,这称为间接递归调用。【例例例例7 7-6-6】设计一个递归函数计算设计一个递归函数计算设计一个递归函数计算设计一个递归函数计算n!n!。(1 1)递归调用的条件)递归调用的条件)递归调用的条件)递归调用的条件:原问题化为新问题,新问题与原问:原问题化为新问题,新问题

34、与原问:原问题化为新问题,新问题与原问:原问题化为新问题,新问题与原问题的解决办法相同;经过有限次数的划分,最终获得解题的解决办法相同;经过有限次数的划分,最终获得解题的解决办法相同;经过有限次数的划分,最终获得解题的解决办法相同;经过有限次数的划分,最终获得解决。决。决。决。(2 2)递归调用的特点)递归调用的特点)递归调用的特点)递归调用的特点:程序简洁清晰,可读性强:程序简洁清晰,可读性强:程序简洁清晰,可读性强:程序简洁清晰,可读性强 ,但开销,但开销,但开销,但开销比较大。比较大。比较大。比较大。(3 3)递归调用的过程)递归调用的过程)递归调用的过程)递归调用的过程:“递推递推递推

35、递推”阶段阶段阶段阶段 ;“回归回归回归回归”阶段。阶段。阶段。阶段。图图图图第7章 函数7.3 函数的嵌套和递归函数的嵌套和递归7.4 局部变量和全局变量局部变量和全局变量 定定定定义义义义一一一一个个个个变变变变量量量量后后后后,只只只只有有有有在在在在该该该该变变变变量量量量的的的的作作作作用用用用域域域域内内内内才才才才能能能能使使使使用用用用这这这这个个个个变变变变量。在量。在量。在量。在C C语言中,按作用域可以把变量分为局部变量和全局变量。语言中,按作用域可以把变量分为局部变量和全局变量。语言中,按作用域可以把变量分为局部变量和全局变量。语言中,按作用域可以把变量分为局部变量和全

36、局变量。7.4.1 局部变量局部变量 在函数体内定义的变量称为局部变量,也称内部变量在函数体内定义的变量称为局部变量,也称内部变量在函数体内定义的变量称为局部变量,也称内部变量在函数体内定义的变量称为局部变量,也称内部变量 局部变量只在定义它的函数体内有效。局部变量只在定义它的函数体内有效。局部变量只在定义它的函数体内有效。局部变量只在定义它的函数体内有效。在不同的函数体内可以定义同名的变量,这些变量互不干扰。在不同的函数体内可以定义同名的变量,这些变量互不干扰。在不同的函数体内可以定义同名的变量,这些变量互不干扰。在不同的函数体内可以定义同名的变量,这些变量互不干扰。【例【例【例【例7 7-

37、8-8】阅读下列程序,注意同名的局部变量的使用。阅读下列程序,注意同名的局部变量的使用。阅读下列程序,注意同名的局部变量的使用。阅读下列程序,注意同名的局部变量的使用。说明说明说明说明:(1 1)主函数中定义的变量只在主函数中有效。)主函数中定义的变量只在主函数中有效。)主函数中定义的变量只在主函数中有效。)主函数中定义的变量只在主函数中有效。(2 2)不同函数中可以使用相同)不同函数中可以使用相同)不同函数中可以使用相同)不同函数中可以使用相同变量变量变量变量名,不会发生冲突。名,不会发生冲突。名,不会发生冲突。名,不会发生冲突。(3 3)形参也是局部变量。)形参也是局部变量。)形参也是局部

38、变量。)形参也是局部变量。(4 4)在一个函数内部可以使用复合语句来定义变量,这样)在一个函数内部可以使用复合语句来定义变量,这样)在一个函数内部可以使用复合语句来定义变量,这样)在一个函数内部可以使用复合语句来定义变量,这样 的变量只在本复合语句中有效。的变量只在本复合语句中有效。的变量只在本复合语句中有效。的变量只在本复合语句中有效。第7章 函数7.4 局部变量和全局变量局部变量和全局变量7.4.2 全局变量全局变量 在函数体外定义的变量称为全局变量,也称外部变量。在函数体外定义的变量称为全局变量,也称外部变量。在函数体外定义的变量称为全局变量,也称外部变量。在函数体外定义的变量称为全局变

39、量,也称外部变量。全全全全局局局局变变变变量量量量可可可可以以以以被被被被本本本本文文文文件件件件中中中中的的的的函函函函数数数数所所所所共共共共用用用用,它它它它的的的的有有有有效效效效范范范范围围围围是是是是从从从从定定定定义变量的位置开始到本源文件结束。义变量的位置开始到本源文件结束。义变量的位置开始到本源文件结束。义变量的位置开始到本源文件结束。【例【例【例【例7 7-9-9】用函数实现两个变量值的交换用函数实现两个变量值的交换用函数实现两个变量值的交换用函数实现两个变量值的交换 普普普普通通通通变变变变量量量量作作作作函函函函数数数数参参参参数数数数时时时时是是是是单单单单向向向向的

40、的的的“值值值值”传传传传递递递递,形形形形参参参参和和和和实实实实参参参参都都都都是是是是局部变量局部变量局部变量局部变量,各自,各自,各自,各自作用域作用域作用域作用域不同。此时用全局变量实现(不同。此时用全局变量实现(不同。此时用全局变量实现(不同。此时用全局变量实现(修改程序修改程序修改程序修改程序)说明:说明:说明:说明:(1 1)全局变量可以为多个函数共用)全局变量可以为多个函数共用)全局变量可以为多个函数共用)全局变量可以为多个函数共用,降低,降低,降低,降低函数的独立性函数的独立性函数的独立性函数的独立性。建议建议建议建议只有在必要时才设置全局变量只有在必要时才设置全局变量只有

41、在必要时才设置全局变量只有在必要时才设置全局变量。(2 2)当全局变量名与局部变量名相同时,在局部变量的有效范当全局变量名与局部变量名相同时,在局部变量的有效范当全局变量名与局部变量名相同时,在局部变量的有效范当全局变量名与局部变量名相同时,在局部变量的有效范围内全局变量不起作用围内全局变量不起作用围内全局变量不起作用围内全局变量不起作用。(3 3)全局变量的作用域是从定义处开始到整个程序结束。若想全局变量的作用域是从定义处开始到整个程序结束。若想全局变量的作用域是从定义处开始到整个程序结束。若想全局变量的作用域是从定义处开始到整个程序结束。若想在定义点之前引用,需要用关键字在定义点之前引用,

42、需要用关键字在定义点之前引用,需要用关键字在定义点之前引用,需要用关键字“extern”extern”作引用说明。作引用说明。作引用说明。作引用说明。第7章 函数7.5 变量的存储类型变量的存储类型 变变变变量量量量是是是是对对对对程程程程序序序序中中中中数数数数据据据据存存存存储储储储空空空空间间间间的的的的抽抽抽抽象象象象,完完完完整整整整的的的的变变变变量量量量定定定定义义义义应应应应该该该该确确确确定定定定它它它它的的的的两两两两种种种种属属属属性性性性:存存存存储储储储类类类类型型型型和和和和数数数数据据据据类类类类型型型型。数数数数据据据据类类类类型型型型是是是是变变变变量量量量的

43、的的的操操操操作作作作属属属属性性性性,表表表表明明明明变变变变量量量量的的的的取取取取值值值值范范范范围围围围和和和和可可可可以以以以执执执执行行行行的的的的操操操操作作作作。存储类型是变量的存储存储类型是变量的存储存储类型是变量的存储存储类型是变量的存储属性属性属性属性,表明,表明,表明,表明变量在内存中的存储方法变量在内存中的存储方法变量在内存中的存储方法变量在内存中的存储方法。7.5.1 存储空间的划分存储空间的划分 计算机的存储器:内存储器、外存储器和寄存器。计算机的存储器:内存储器、外存储器和寄存器。计算机的存储器:内存储器、外存储器和寄存器。计算机的存储器:内存储器、外存储器和寄

44、存器。计算机的内存可以分为程度区、静态存储区和动态存储区计算机的内存可以分为程度区、静态存储区和动态存储区计算机的内存可以分为程度区、静态存储区和动态存储区计算机的内存可以分为程度区、静态存储区和动态存储区 静静静静态态态态存存存存储储储储是是是是指指指指在在在在程程程程序序序序运运运运行行行行期期期期间间间间分分分分配配配配固固固固定定定定的的的的存存存存储储储储空空空空间间间间,该该该该存存存存储空间直到程序运行结束后才被释放储空间直到程序运行结束后才被释放储空间直到程序运行结束后才被释放储空间直到程序运行结束后才被释放;动动动动态态态态存存存存储储储储是是是是在在在在程程程程序序序序运运

45、运运行行行行期期期期间间间间根根根根据据据据需需需需要要要要进进进进行行行行动动动动态态态态的的的的分分分分配配配配存存存存储储储储空间,该存储空间不需要时立即释放空间,该存储空间不需要时立即释放空间,该存储空间不需要时立即释放空间,该存储空间不需要时立即释放。变量变量变量变量的存储方式实质上描述了变量的时间的存储方式实质上描述了变量的时间的存储方式实质上描述了变量的时间的存储方式实质上描述了变量的时间特性特性特性特性。第7章 函数7.5 变量的存储类型变量的存储类型 在在在在C C语语语语言言言言中中中中,变变变变量量量量的的的的存存存存储储储储类类类类型型型型有有有有四四四四种种种种:自自

46、自自动动动动的的的的(auto)(auto)、静静静静态态态态的的的的(static)(static)、寄存器寄存器寄存器寄存器的的的的(register)(register)、和外部和外部和外部和外部的的的的(extern)(extern)。7.5.2 局部变量的存储类型局部变量的存储类型1.1.自动(自动(自动(自动(autoauto)局部变量)局部变量)局部变量)局部变量 定定定定义义义义局局局局部部部部变变变变量量量量时时时时,如如如如果果果果没没没没有有有有指指指指定定定定存存存存储储储储类类类类型型型型或或或或使使使使用用用用了了了了autoauto说说说说明明明明符,系统就认为所

47、定义的变量具有自动存储类型符,系统就认为所定义的变量具有自动存储类型符,系统就认为所定义的变量具有自动存储类型符,系统就认为所定义的变量具有自动存储类型。自自自自动动动动存存存存储储储储类类类类型型型型用用用用关关关关键键键键字字字字autoauto表表表表示示示示,其其其其中中中中“auto”auto”也也也也可可可可以以以以省省省省略。略。略。略。intint a,ba,b;等价于等价于 auto auto intint a,ba,b;自动变量的存储单元被分配在内存的动态存储区自动变量的存储单元被分配在内存的动态存储区自动变量的存储单元被分配在内存的动态存储区自动变量的存储单元被分配在内存

48、的动态存储区。自动变量自动变量自动变量自动变量“用之则建,用完即撤用之则建,用完即撤用之则建,用完即撤用之则建,用完即撤”。强调:强调:强调:强调:自动变量定义后如果没有赋值,其初始值是不确定的。自动变量定义后如果没有赋值,其初始值是不确定的。自动变量定义后如果没有赋值,其初始值是不确定的。自动变量定义后如果没有赋值,其初始值是不确定的。第7章 函数7.5 变量的存储类型变量的存储类型7.5.2 局部变量的存储类型局部变量的存储类型2.2.静态(静态(静态(静态(staticstatic)局部变量)局部变量)局部变量)局部变量 定定定定义义义义局局局局部部部部变变变变量量量量时时时时,指指指指

49、定定定定存存存存储储储储类类类类型型型型为为为为staticstatic的的的的变变变变量量量量,称称称称该该该该变变变变量量量量为为为为静态局部变量静态局部变量静态局部变量静态局部变量。静态变量的存储单元分配在静态存储静态变量的存储单元分配在静态存储静态变量的存储单元分配在静态存储静态变量的存储单元分配在静态存储区。区。区。区。函函函函数数数数调调调调用用用用结结结结束束束束后后后后,静静静静态态态态局局局局部部部部变变变变量量量量所所所所占占占占的的的的存存存存储储储储单单单单元元元元不不不不释释释释放放放放。在在在在下一次函数调用时,该变量下一次函数调用时,该变量下一次函数调用时,该变量

50、下一次函数调用时,该变量可以保存上次可以保存上次可以保存上次可以保存上次函数调用后函数调用后函数调用后函数调用后的值。的值。的值。的值。【例【例【例【例7 7-10-10】编程计算编程计算编程计算编程计算1 1!、!、!、!、2 2!、!、!、!、3 3!、!、!、!、4 4!和!和!和!和5 5!说说说说明明明明:(1 1)静静静静态态态态变变变变量量量量是是是是在在在在编编编编译译译译时时时时赋赋赋赋初初初初值值值值一一一一次次次次。如如如如定定定定义义义义静静静静态态态态变变变变量量量量时没有赋值,系统会自动赋初值时没有赋值,系统会自动赋初值时没有赋值,系统会自动赋初值时没有赋值,系统会

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

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com