C语言-第8章-数组做函数参数推荐课件

上传人:大米 文档编号:593215771 上传时间:2024-09-23 格式:PPT 页数:36 大小:213KB
返回 下载 相关 举报
C语言-第8章-数组做函数参数推荐课件_第1页
第1页 / 共36页
C语言-第8章-数组做函数参数推荐课件_第2页
第2页 / 共36页
C语言-第8章-数组做函数参数推荐课件_第3页
第3页 / 共36页
C语言-第8章-数组做函数参数推荐课件_第4页
第4页 / 共36页
C语言-第8章-数组做函数参数推荐课件_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C语言-第8章-数组做函数参数推荐课件》由会员分享,可在线阅读,更多相关《C语言-第8章-数组做函数参数推荐课件(36页珍藏版)》请在金锄头文库上搜索。

1、第第8 8讲讲 函函 数数_2_2C语言程序设计12021/8/22内内 容容 提提 要要 一维数组做函数参数一维数组做函数参数一维数组做函数参数一维数组做函数参数 二维数组做函数参数二维数组做函数参数二维数组做函数参数二维数组做函数参数 变量的作用域和存储类别(理论性变量的作用域和存储类别(理论性变量的作用域和存储类别(理论性变量的作用域和存储类别(理论性知识知识知识知识) 进一步理解函数的递归调用和递归进一步理解函数的递归调用和递归进一步理解函数的递归调用和递归进一步理解函数的递归调用和递归算法的应用算法的应用算法的应用算法的应用回顾上周内容回顾上周内容 怎样怎样编写编写自定义函数?自定义

2、函数? 怎样怎样调用调用自定义函数?自定义函数?函数的格式函数的格式函数值类型函数值类型函数值类型函数值类型 函数名函数名函数名函数名( ( ( (形式参数形式参数形式参数形式参数) ) ) ) 函数体函数体函数体函数体 说明:说明:说明:说明: 如果函数没有函数值,函数值类型为如果函数没有函数值,函数值类型为如果函数没有函数值,函数值类型为如果函数没有函数值,函数值类型为voidvoidvoidvoid 如果函数有函数值,函数值类型为某种数据类型,函数值由如果函数有函数值,函数值类型为某种数据类型,函数值由如果函数有函数值,函数值类型为某种数据类型,函数值由如果函数有函数值,函数值类型为某种

3、数据类型,函数值由returnreturnreturnreturn语句语句语句语句返回;返回;返回;返回; 如果函数没有形式参数,表示为如果函数没有形式参数,表示为如果函数没有形式参数,表示为如果函数没有形式参数,表示为voidvoidvoidvoid 如果函数有形式参数,则每一个形参的说明均为:如果函数有形式参数,则每一个形参的说明均为:如果函数有形式参数,则每一个形参的说明均为:如果函数有形式参数,则每一个形参的说明均为: 数据类型数据类型数据类型数据类型 形参名形参名形参名形参名 如果有多个形参,用逗号分隔。如果有多个形参,用逗号分隔。如果有多个形参,用逗号分隔。如果有多个形参,用逗号分

4、隔。函数的调用函数的调用函数的调用函数的调用要让计算机执行一个函数,就必须对函数进行调用。要让计算机执行一个函数,就必须对函数进行调用。说明:说明:说明:说明: 调用库函数,需要在源程序最前面通过调用库函数,需要在源程序最前面通过调用库函数,需要在源程序最前面通过调用库函数,需要在源程序最前面通过includeincludeincludeinclude预编译指令预编译指令预编译指令预编译指令引入对应库函数的头文件引入对应库函数的头文件引入对应库函数的头文件引入对应库函数的头文件 调用库函数的关键是遵守调用库函数的关键是遵守调用库函数的关键是遵守调用库函数的关键是遵守函数原型定义函数原型定义函数

5、原型定义函数原型定义的约定的约定的约定的约定 使用正确的使用正确的使用正确的使用正确的函数名函数名函数名函数名 传递的传递的传递的传递的实参实参实参实参在在在在数量,类型和顺序数量,类型和顺序数量,类型和顺序数量,类型和顺序必须必须必须必须和形参一致和形参一致和形参一致和形参一致 如果有函数值,注意如果有函数值,注意如果有函数值,注意如果有函数值,注意返回值的类型返回值的类型返回值的类型返回值的类型 函数可以嵌套调用,递归调用,但是不能循环调用。函数可以嵌套调用,递归调用,但是不能循环调用。函数可以嵌套调用,递归调用,但是不能循环调用。函数可以嵌套调用,递归调用,但是不能循环调用。1 1 1

6、1、实参与形参的、实参与形参的、实参与形参的、实参与形参的个数相等个数相等个数相等个数相等,类型一致类型一致类型一致类型一致;2 2 2 2、实参可以是变量、表达式、常数,实参必须、实参可以是变量、表达式、常数,实参必须、实参可以是变量、表达式、常数,实参必须、实参可以是变量、表达式、常数,实参必须有确有确有确有确定的值定的值定的值定的值;3 3 3 3、在调用函数时,如果被调用函数的形参是变量,、在调用函数时,如果被调用函数的形参是变量,、在调用函数时,如果被调用函数的形参是变量,、在调用函数时,如果被调用函数的形参是变量,实参和形参分别拥有实参和形参分别拥有实参和形参分别拥有实参和形参分别

7、拥有各自的内存空间各自的内存空间各自的内存空间各自的内存空间,实参将,实参将,实参将,实参将值值值值传递传递传递传递给对应的形参,形参值的改变给对应的形参,形参值的改变给对应的形参,形参值的改变给对应的形参,形参值的改变不影响不影响不影响不影响实参;实参;实参;实参;4 4 4 4、如果函数调用在前,函数定义在后,则在调用函、如果函数调用在前,函数定义在后,则在调用函、如果函数调用在前,函数定义在后,则在调用函、如果函数调用在前,函数定义在后,则在调用函数前必须对函数进行原型声明。数前必须对函数进行原型声明。数前必须对函数进行原型声明。数前必须对函数进行原型声明。函数总结函数总结 1 1 1

8、1、输入的时候。、输入的时候。、输入的时候。、输入的时候。scanf(“%d ”, &a);2 2 2 2、数组名。、数组名。、数组名。、数组名。int a10, b10;a = b; /错误,为什么之前哪些地方涉及过之前哪些地方涉及过“地址地址”这个概念这个概念在调用函数时,如果被调函数的形参是一维在调用函数时,如果被调函数的形参是一维数组,则对应的实参是一个内存单元的数组,则对应的实参是一个内存单元的地址地址,实参数组和形参数组实参数组和形参数组共享一段内存共享一段内存。在函数中对形参数组定义时,可以省略数组在函数中对形参数组定义时,可以省略数组的大小说明。的大小说明。例如,例如, int

9、 arr int arr 一维数组做函数参数一维数组做函数参数程序举例程序举例P241.C P241.C 程序的功能是:从键盘分别读入程序的功能是:从键盘分别读入5 5个数到个数到arrAarrA中、中、8 8个数至个数至arrBarrB中,然后分别调用自定义函数输出中,然后分别调用自定义函数输出数组数组arrAarrA和和arrBarrB的各元素。的各元素。void printArray(int a, int n)void printArray(int a, int n) int i;int i;for (i=0; in; i+)for (i=0; in; i+) printf(%d , a

10、i);printf(%d , ai); 程序举例程序举例P243.C P243.C 程序的功能是:从键盘分别读入程序的功能是:从键盘分别读入5 5个数到个数到arrAarrA中、中、8 8个数至个数至arrBarrB中,然后分别调用自定义函数计算中,然后分别调用自定义函数计算数组数组arrAarrA和和arrBarrB各元素的平均值、再输出平均值。各元素的平均值、再输出平均值。float average(int a, int n)float average(int a, int n) int i, sum = 0;int i, sum = 0;for (i=0; in; i+)for (i=0

11、; in; i+) sum = sum + ai;sum = sum + ai; return (float)sum/n;return (float)sum/n; 程序举例程序举例P244.C P244.C 程序的功能是:从键盘分别读入程序的功能是:从键盘分别读入5 5个数到个数到arrAarrA中、中、8 8个数至个数至arrBarrB中,再读入一个欲查找的数中,再读入一个欲查找的数searchValsearchVal,然后分别调用自定义函数在数组,然后分别调用自定义函数在数组arrAarrA和和arrBarrB中查找中查找searchValsearchVal所在位置的下标所在位置的下标(

12、(不考虑在数组中存在多个不考虑在数组中存在多个searchValsearchVal的情况的情况) )、输出查找结果。、输出查找结果。int search(int a, int n, int m)int search(int a, int n, int m) int weizhi = -1, i;int weizhi = -1, i;for (i=0; in; i+)for (i=0; in; i+) if (ai = m)if (ai = m) weizhi = i;weizhi = i;break;break; return weizhi;return weizhi; 程序举例程序举例P81

13、7.C P817.C 程序的功能是:从键盘输入一行可带空格的程序的功能是:从键盘输入一行可带空格的字符串字符串( (约定:字符数约定:字符数127127字节字节) ),调用函数将该字符,调用函数将该字符串逆序存放,然后输出该字符串。串逆序存放,然后输出该字符串。void nixu(char a)void nixu(char a) int i, j;int i, j;char tmp;char tmp;for (i = 0, j = strlen(a) - 1; i j; i+, j-)for (i = 0, j = strlen(a) - 1; i j; i+, j-) tmp = ai;tm

14、p = ai;ai = aj;ai = aj;aj = tmp;aj = tmp; 在调用函数时,如果被调函数的形参是二维数组,在调用函数时,如果被调函数的形参是二维数组,在调用函数时,如果被调函数的形参是二维数组,在调用函数时,如果被调函数的形参是二维数组,则对应的实参是一个内存单元地址,实参数组和形则对应的实参是一个内存单元地址,实参数组和形则对应的实参是一个内存单元地址,实参数组和形则对应的实参是一个内存单元地址,实参数组和形参数组共享一段内存。参数组共享一段内存。参数组共享一段内存。参数组共享一段内存。在函数中对形参数组定义时,可以指定每一维的大在函数中对形参数组定义时,可以指定每一维

15、的大在函数中对形参数组定义时,可以指定每一维的大在函数中对形参数组定义时,可以指定每一维的大小,也可以省略第一维的大小说明,但不能只指定小,也可以省略第一维的大小说明,但不能只指定小,也可以省略第一维的大小说明,但不能只指定小,也可以省略第一维的大小说明,但不能只指定第一维而省略第二维。第一维而省略第二维。第一维而省略第二维。第一维而省略第二维。例如:例如:例如:例如: int array34; int array 10; int array34; int array 10; int array34; int array 10; int array34; int array 10; ( ( (

16、 ( 正确!正确!正确!正确!) ) ) ) int array ; int array3 ; int array ; int array3 ; int array ; int array3 ; int array ; int array3 ; ( ( ( ( 错误!错误!错误!错误!) ) ) ) 二维数组做函数参数二维数组做函数参数程序举例程序举例P818.C P818.C 程序的功能是:找出任意的一个程序的功能是:找出任意的一个mnmn矩阵每矩阵每一行上的最大值的列下标并按示例格式要求显示。一行上的最大值的列下标并按示例格式要求显示。void max(int aNN, int hang,

17、 int lie)void max(int aNN, int hang, int lie) int i, j, maxvalue, maxlie;int i, j, maxvalue, maxlie;for (i=0; ihang; i+)for (i=0; ihang; i+) maxvalue = ai0; maxvalue = ai0; maxlie = 0; maxlie = 0; for (j=1; jlie; j+) for (j=1; j maxvalue)if (aij maxvalue) maxvalue = aij;maxvalue = aij;maxlie = j;max

18、lie = j; printf(The max value in line %d is %dn, i, maxlie); printf(The max value in line %d is %dn, i, maxlie); 程序举例程序举例P823.C P823.C 程序的功能是:将程序的功能是:将m(2=m=20)m(2=m=20)行行m m列的二列的二维数组维数组arrayAarrayA中的最后一行放到二维数组中的最后一行放到二维数组arrayBarrayB的第的第0 0列中,把二维数组列中,把二维数组arrayAarrayA中的第中的第0 0行放到二维数组行放到二维数组arrayBar

19、rayB的最后一列中,二维数组的最后一列中,二维数组arrayBarrayB中的其他数据中的其他数据和和arrayAarrayA一致。一致。void zh(int a2020, int b2020, int n)void zh(int a2020, int b2020, int n) int i, j;int i, j;for (i=0; in; i+)for (i=0; in; i+) for (j=0; jn; j+)for (j=0; jn; j+) bij = aij;bij = aij; for (i=0; in; i+)for (i=0; in; i+) bin-1 = a0i;b

20、in-1 = a0i;bi0 = an-1i;bi0 = an-1i; 变量的作用域变量的作用域(局部变量和全局变量局部变量和全局变量)1. 局部变量局部变量局部变量:在一个函局部变量:在一个函局部变量:在一个函局部变量:在一个函数范围内部定义的变数范围内部定义的变数范围内部定义的变数范围内部定义的变量,称为局部变量。量,称为局部变量。量,称为局部变量。量,称为局部变量。 它只在本函数范围内它只在本函数范围内它只在本函数范围内它只在本函数范围内有效,即:只有在本有效,即:只有在本有效,即:只有在本有效,即:只有在本函数内才能使用它们,函数内才能使用它们,函数内才能使用它们,函数内才能使用它们,

21、在此函数以外不能使在此函数以外不能使在此函数以外不能使在此函数以外不能使用这些变量。用这些变量。用这些变量。用这些变量。#include #include int max( int max( int x, int y int x, int y ); );int main(void) int main(void) int a, b, c;int a, b, c; scanf(“%d,%d”,&a,&b); scanf(“%d,%d”,&a,&b); c=max(a,b); c=max(a,b); printf(“max=%dn”,c); printf(“max=%dn”,c); return 0

22、; return 0; int max( int max( int x, int y int x, int y ) ) int z;int z; if(xy) z=x; if(xy) z=x; else z=y; else z=y; return(z); return(z); 几点说明:几点说明:几点说明:几点说明:(1) (1) 主函数主函数主函数主函数mainmain中定义的变量也只在主函数中有效。主函数也中定义的变量也只在主函数中有效。主函数也中定义的变量也只在主函数中有效。主函数也中定义的变量也只在主函数中有效。主函数也 不能使用其它函数中定义的变量。不能使用其它函数中定义的变量。不能

23、使用其它函数中定义的变量。不能使用其它函数中定义的变量。(2) (2) 不同函数中可以使用相同名字的变量,它们代表不同的对不同函数中可以使用相同名字的变量,它们代表不同的对不同函数中可以使用相同名字的变量,它们代表不同的对不同函数中可以使用相同名字的变量,它们代表不同的对 象,互不干扰。象,互不干扰。象,互不干扰。象,互不干扰。例如:例如:例如:例如:float f1(int a)float f1(int a) int b,c; int b,c; char f2(int a, int char f2(int a, int y)y) int b,c; int b,c; 2. 全局变量全局变量全局

24、变量全局变量全局变量全局变量:一个源文件可以包括一个或若干个函数。在函一个源文件可以包括一个或若干个函数。在函一个源文件可以包括一个或若干个函数。在函一个源文件可以包括一个或若干个函数。在函 数内部定义的变量是局部变量,在函数之外定数内部定义的变量是局部变量,在函数之外定数内部定义的变量是局部变量,在函数之外定数内部定义的变量是局部变量,在函数之外定 义的变量称为义的变量称为义的变量称为义的变量称为外部变量外部变量外部变量外部变量。也称。也称。也称。也称全局变量全局变量全局变量全局变量或或或或全程全程全程全程 变量变量变量变量。 全局变量可以为全局变量可以为全局变量可以为全局变量可以为本文件本

25、文件本文件本文件中的其它函数所共用,其有效中的其它函数所共用,其有效中的其它函数所共用,其有效中的其它函数所共用,其有效范围为从定义变量的位置开始到本源文件结束。范围为从定义变量的位置开始到本源文件结束。范围为从定义变量的位置开始到本源文件结束。范围为从定义变量的位置开始到本源文件结束。例如:例如:例如:例如:int p=1,q=5;int p=1,q=5;float f1(int a)float f1(int a) int b,c; int b,c; char c1,c2;char c1,c2;char f2(int x,int y)char f2(int x,int y) int i,j;

26、 int i,j; main()main() int m,n; int m,n; 全局变全局变全局变全局变量量量量c1,c2c1,c2的作用的作用的作用的作用范围范围范围范围全局变全局变全局变全局变量量量量p,qp,q的的的的作用范作用范作用范作用范围围围围例如:例如:例如:例如:#include #include int a, b;int a, b;void f1(void);void f1(void);int main(void)int main(void) a=2, b=4; a=2, b=4; f1( ); f1( ); printf(“a=%d, b=%dn”, a, b); pri

27、ntf(“a=%d, b=%dn”, a, b); return 0; return 0; void f1(void)void f1(void) int t1, t2; int t1, t2; t1=a*2; t1=a*2; t2=b*3; t2=b*3; b=100; b=100; printf(“t1=%d, t2=%dn”, t1, t2) printf(“t1=%d, t2=%dn”, t1, t2) 如果在同一个源文件中,全局变量与局部变量同名,则如果在同一个源文件中,全局变量与局部变量同名,则如果在同一个源文件中,全局变量与局部变量同名,则如果在同一个源文件中,全局变量与局部变量同

28、名,则在在在在 局部变量的作用范围内,全局变量被局部变量的作用范围内,全局变量被局部变量的作用范围内,全局变量被局部变量的作用范围内,全局变量被“ “屏蔽屏蔽屏蔽屏蔽” ”,即它不起作,即它不起作,即它不起作,即它不起作 用。用。用。用。例例例例 外部变量与局部变量同名。外部变量与局部变量同名。外部变量与局部变量同名。外部变量与局部变量同名。#include #include int a=3,b=5;int a=3,b=5;int max(int a,int b)int max(int a,int b) int c; int c; c=ab?a:b; c=ab?a:b; return(c);

29、return(c); int main(void)int main(void) int a=8; int a=8; printf(“max=%d”,max(a,b); printf(“max=%d”,max(a,b); return 0; return 0; 形参形参形参形参a a、b b的作的作的作的作用范围用范围用范围用范围全局变量全局变量全局变量全局变量a a、b b的作用范围的作用范围的作用范围的作用范围局部变量局部变量局部变量局部变量a a的作用的作用的作用的作用范围范围范围范围变量的存储类别变量的存储类别一、动态存储方式与静态存储方式一、动态存储方式与静态存储方式 从变量的作用域(

30、空间)角度分:从变量的作用域(空间)角度分:从变量的作用域(空间)角度分:从变量的作用域(空间)角度分:全局变量和局部变量全局变量和局部变量全局变量和局部变量全局变量和局部变量 从变量存在的时间(生存期)来分:从变量存在的时间(生存期)来分:从变量存在的时间(生存期)来分:从变量存在的时间(生存期)来分:静态存储方式和动态存储方式静态存储方式和动态存储方式静态存储方式和动态存储方式静态存储方式和动态存储方式 静态存储方式静态存储方式静态存储方式静态存储方式定义:在程序运行期间分配固定存储空间的方式。定义:在程序运行期间分配固定存储空间的方式。定义:在程序运行期间分配固定存储空间的方式。定义:在

31、程序运行期间分配固定存储空间的方式。 动态存储方式动态存储方式动态存储方式动态存储方式定义:在程序运行期间根据需要进行动态分配存储空定义:在程序运行期间根据需要进行动态分配存储空定义:在程序运行期间根据需要进行动态分配存储空定义:在程序运行期间根据需要进行动态分配存储空间的方式。即:在函数调用时开始分配动态存储空间,函数间的方式。即:在函数调用时开始分配动态存储空间,函数间的方式。即:在函数调用时开始分配动态存储空间,函数间的方式。即:在函数调用时开始分配动态存储空间,函数结束时释放这些空间。结束时释放这些空间。结束时释放这些空间。结束时释放这些空间。 静态存储方式的数据:静态存储方式的数据:

32、静态存储方式的数据:静态存储方式的数据:全局变量全局变量全局变量全局变量静态局部变量静态局部变量静态局部变量静态局部变量 特点:特点:特点:特点:在程序编译时分配内存单元,在程序编译时分配内存单元,在程序编译时分配内存单元,在程序编译时分配内存单元,在整个程序执行期间在整个程序执行期间在整个程序执行期间在整个程序执行期间占占占占据固定存储单元,直到程序执行完毕才释放。据固定存储单元,直到程序执行完毕才释放。据固定存储单元,直到程序执行完毕才释放。据固定存储单元,直到程序执行完毕才释放。 动态存储方式的数据:动态存储方式的数据:动态存储方式的数据:动态存储方式的数据: 自动变量自动变量自动变量自

33、动变量 函数的形式参数函数的形式参数函数的形式参数函数的形式参数 函数调用时的现场保护和返回地址等。函数调用时的现场保护和返回地址等。函数调用时的现场保护和返回地址等。函数调用时的现场保护和返回地址等。 特点:特点:特点:特点:函数函数函数函数调用时分配调用时分配调用时分配调用时分配动态存储空间,函数调用动态存储空间,函数调用动态存储空间,函数调用动态存储空间,函数调用结束时释放结束时释放结束时释放结束时释放这些空间。即:动态分配和释放。这些空间。即:动态分配和释放。这些空间。即:动态分配和释放。这些空间。即:动态分配和释放。二、二、 auto变量(用变量(用auto声明的局部变量)声明的局部

34、变量)自动变量:自动变量:自动变量:自动变量:自动变量用关键字自动变量用关键字自动变量用关键字自动变量用关键字autoauto作存储类别的声明。作存储类别的声明。作存储类别的声明。作存储类别的声明。特点:特点:特点:特点:在调用该函数时,系统给变量分配存储空间,函数调用结在调用该函数时,系统给变量分配存储空间,函数调用结在调用该函数时,系统给变量分配存储空间,函数调用结在调用该函数时,系统给变量分配存储空间,函数调用结束时自动释放这些空间。束时自动释放这些空间。束时自动释放这些空间。束时自动释放这些空间。默认的局部变量都是默认的局部变量都是默认的局部变量都是默认的局部变量都是autoauto类

35、型类型类型类型例如:例如:例如:例如:int f(int a)int f(int a) auto int b, c=3; auto int b, c=3; 说明:说明:说明:说明:关键字关键字关键字关键字“ “auto”auto”可以省略不写(隐含指定为自动变量)。可以省略不写(隐含指定为自动变量)。可以省略不写(隐含指定为自动变量)。可以省略不写(隐含指定为自动变量)。例如:例如:例如:例如:auto int b,c=3;auto int b,c=3;int b,c=3;int b,c=3;三、三、 用用static声明局部变量声明局部变量静态局部变量:静态局部变量:静态局部变量:静态局部变

36、量: 特点:函数中的局部变量的值在特点:函数中的局部变量的值在特点:函数中的局部变量的值在特点:函数中的局部变量的值在函数调用结束后不消失而函数调用结束后不消失而函数调用结束后不消失而函数调用结束后不消失而 保留原值保留原值保留原值保留原值,即其所占用的存储单元不释放,在下一,即其所占用的存储单元不释放,在下一,即其所占用的存储单元不释放,在下一,即其所占用的存储单元不释放,在下一 次调用该函数时,该变量已有值,就是上一次函数次调用该函数时,该变量已有值,就是上一次函数次调用该函数时,该变量已有值,就是上一次函数次调用该函数时,该变量已有值,就是上一次函数 调用结束时的值。调用结束时的值。调用

37、结束时的值。调用结束时的值。 声明声明声明声明:(用关键字:(用关键字:(用关键字:(用关键字staticstatic进行声明)进行声明)进行声明)进行声明) static static 类型标识符类型标识符类型标识符类型标识符 变量名变量名变量名变量名 例如:例如:例如:例如: static float a;static float a;例例例例 考察静态局部变量的值。考察静态局部变量的值。考察静态局部变量的值。考察静态局部变量的值。#include #include int f(int a)int f(int a) int b = 0; int b = 0; static int c =

38、3; static int c = 3; b = b + 1; b = b + 1; c = c + 1; c = c + 1; return (a + b + c); return (a + b + c); int main(void)int main(void) int am = 2, i; int am = 2, i; for(i=0; i2; i+) for(i=0; i2; i+) printf(“%d”, f(am); printf(“%d”, f(am); return 0; return 0; 运行结果:?运行结果:?运行结果:?运行结果:?i=0i=0函数调用开始函数调用开始

39、函数调用开始函数调用开始 函数调用结束函数调用结束函数调用结束函数调用结束2 2 a a0 0 b b3 3 c c4 4 c c1 1 b b2 2 a a5 5 c c1 1 b b2 2 a a2 2 a a0 0 b b4 4 c ci=1i=1函数调用开始函数调用开始函数调用开始函数调用开始 函数调用结束函数调用结束函数调用结束函数调用结束关于静态局部变量的说明:关于静态局部变量的说明:关于静态局部变量的说明:关于静态局部变量的说明: 如在定义静态局部变量时不赋初值,编译时如在定义静态局部变量时不赋初值,编译时如在定义静态局部变量时不赋初值,编译时如在定义静态局部变量时不赋初值,编译

40、时自动赋初值自动赋初值自动赋初值自动赋初值0 0 (对数值型数据)或空字符(对字符变量)(对数值型数据)或空字符(对字符变量)(对数值型数据)或空字符(对字符变量)(对数值型数据)或空字符(对字符变量)。而对自动变。而对自动变。而对自动变。而对自动变 量来说,如果不赋初值,它的值是一个不确定的值。量来说,如果不赋初值,它的值是一个不确定的值。量来说,如果不赋初值,它的值是一个不确定的值。量来说,如果不赋初值,它的值是一个不确定的值。 静态局部变量仍属于局部变量,其它函数不能引用它。静态局部变量仍属于局部变量,其它函数不能引用它。静态局部变量仍属于局部变量,其它函数不能引用它。静态局部变量仍属于

41、局部变量,其它函数不能引用它。例如:例如:例如:例如:对静态局部变量:对静态局部变量:对静态局部变量:对静态局部变量:static int a; (a=0)static int a; (a=0)static float b; (b=0.0)static float b; (b=0.0)static char c; (c=0)static char c; (c=0)对自动变量:对自动变量:对自动变量:对自动变量:int a; int a; (a a的值不确定)的值不确定)的值不确定)的值不确定)float b; float b; (b b的值不确定)的值不确定)的值不确定)的值不确定)char

42、c; char c; (c c的值不确定)的值不确定)的值不确定)的值不确定)递归算法递归算法一、递归求一、递归求n!递归算法的两个必要条件:递归算法的两个必要条件:递归算法的两个必要条件:递归算法的两个必要条件:(1 1)n n的求解必然和前面的求解必然和前面n-1n-1的求解,甚至的求解,甚至n-2n-2的求解有联系,即是的求解有联系,即是和前一(或前几)层之间存在递归规律和前一(或前几)层之间存在递归规律(2 2)递归到前面的某一层一定有确定的返回值或结束继续递归)递归到前面的某一层一定有确定的返回值或结束继续递归递归的实现递归的实现递归的实现递归的实现栈(先进后出)栈(先进后出)栈(先进后出)栈(先进后出)递归算法递归算法二、递归的实际应用举例二、递归的实际应用举例汉诺塔游戏汉诺塔游戏

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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