语言第十一讲.pptx
《语言第十一讲.pptx》由会员分享,可在线阅读,更多相关《语言第十一讲.pptx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5.4.2 函数的递归调用(函数的递归调用(嵌套调用的特例)概念:函数直接或间接地自我调用称为递归函数。intfun1(intx)z=fun1(y);intfun1(intx)intfun2(intt)z=fun2(y);c=fun1(a);直接引用自身间接引用自身递归在没有控制条件的情况下是无穷的递归。#includevoidmain(void)printf(*n);main();只有通过控制条件,使递归调用终止,才能应用。#includevoidmain(void)charch;printf(*n);ch=getchar();if(ch!=9)main();第1页/共24页递归举例:求递归
2、举例:求 n!n!=1n=0或n=1n(n-1)!n1f(n)=1n=0或n=1nf(n-1)n1#includelonglfac(long);voidmain(void)longi,x;scanf(%ld,&i);x=lfac(i);printf(n%ld,x);longlfac(longn)if(n=0|n=1)return1;elsereturn(n*lfac(n-1);lfac(4)4*lfac(3)3*lfac(2)2*flac(1)2*13*2*14*3*2*1递推回归=n(n-1)(n-2)321=n(n-1)!第2页/共24页5.5 变量的作用域和存储类型变量的作用域和存储类型
3、变量生存期:变量占用内存单元(活着)的时间。内存中供用户使用的存储空间:程序区:存放程序代码。数据区:存放数据,分为动态存储区和静态存储区。5.5.1 变量的生存期和作用域C语言中,定义变量应包含三个内容:数据类型:变量占用内存空间的大小。如:int,float,char。作用域:变量在程序中的有效区域。存储类型:变量在内存中的存储方式。存储方式不同,变量占用内存时间不同。静态存储区:定义变量(程序编译)时就分配内存单元,直到程序结束。生存期为整个程序运行期。动态存储区:使用时才分配内存单元,使用完毕,立即释放。生存期为函数调用期。第3页/共24页变量的作用域:变量在程序中的可使用范围(有效性
4、)。1.局部变量定义在函数内部的变量。也称为内部变量。放在动态区中,只有调用它的函数才能使用它。调用时才分配内存单元,调用结束,内存即刻被释放,作用域:仅限于函数内部或复合语句内。生存期:函数调用期间。作用域可以是一个函数或一个复合语句,取决于定义变量的位置,可分为局部变量和全局变量。注意:不同的函数或复合语句中可以使用相同的变量名。因为它们作用域不同,所以它们互不干预。即:同名,不同作用域的变量是不同的变量。第4页/共24页例:(见p137 例5.13)#includevoidfunc();main()inty=10;printf(“1:y=%dn”,y);func();printf(“2:
5、y=%dn”,y);voidfunc()intx=5;intx=3;intx=1;printf(“x=%dn”,x);printf(“x=%dn”,x);printf(“x=%dn”,x);运行结果:1:y=10 x=1x=3x=52:y=10第5页/共24页2.全局变量全局变量 定义在函数之外的变量。也称为外部变量。放在静态区中。作用域:从定义直到文件结束。生存期:在程序的整个执行过程中。#includevoidadd(void);inta,b,c;voidmain(void)scanf(“%d,%d”,&a,&b);add();printf(“%d”,c);voidadd(void)c=a
6、+b;外部变量作用域注意:1.任何函数对外部变量的修改都会影响其他函数对它的引用。2.当函数中出现和全局变量同名的局部变量时,局部变量优先。第6页/共24页5.5.2 变量的存储类型变量的存储类型变量的存储类型有四种:自动类型auto寄存器类型register静态类型static外部类型extern完整的变量说明格式:存储类型数据类型变量名表;确定变量在内存中的表示方法。确定变量的生存期和作用域。该项省略表示auto存储类型。变量的作用域不同,本质上是变量的存储类型不同:静态存储:程序编译时就分配内存单元,直到程序结束。动态存储:使用时才分配内存单元,使用完毕,立即释放。动态存储方式静态存储方
7、式第7页/共24页1、自动类型自动类型 auto(C 默认的存储方式)定义在复合语句的开始处。块内生存块内有效。#includevoidmain(void)autointa,b;scanf(“%d,%d”,&a,&b);if(ba)intT;T=a;a=b;b=T;printf(“Max=%d”,a);ab的作用域T的作用域生存期:执行到复合语句时建立内存变量。执行出复合语句后变量消亡。T2、寄存器类型register作用域和生存期与auto相同,差别:如果CPU内部寄存器空闲,则使用寄存器作为变量的存储单元,以提高速度。主要用于循环变量。(见p140例5.16)第8页/共24页3、静态类型静
8、态类型 static(局部全局)(局部全局)作用域:在定义的复合语句内引用,出了复合语句不可见。生存期:从定义直到程序结束。执行出时,原值并不消失,下次调用时变量中仍保留上次调用结束时的值。voidrow(void);voidmain(void)intb;for(b=1;b=9;b+)row();voidrow(void)inta=1;intb;for(b=1;b=9;b+)printf(%3d,a*b);printf(n);a+;static说明a为静态局部变量生存期从第一次调用到程序结束。a的作用域静态局部变量特点:1.系统自动为静态局部变量赋初值0。2.作用域与局部变量相同。3.生存期与
9、局部变量不同。第9页/共24页 静态全局变量静态全局变量全局变量和静态全局变量都是静态存储方式,区别:1.全局变量的作用域为整个源程序,静态全局变量的作用域为定义该变量的源文件;2.若一个程序由多个“.c”文件组成,全局变量在各个源文件中都有效,静态全局变量则仅在定义它的源文件中有效。全局变量前加上存储类型说明static,即构成静态全局变量。statica=3;voidmain(void)注意static位置:静态局部变量改变了局部变量的存储方式(生存期),使其生存期与作用域不同。静态全局变量改变了全局变量的作用域,限制了全局变量的使用范围。第10页/共24页4、外部类型外部类型(全局变量全
10、局变量)extern文件a1.c文件b1.cintxx;externintxx;voidmain()fun()文件1定义的外部变量b1通过说明使用a1的外部变量如果只希望在本文件中使用,可以加static说明。static定义在所有函数(任何花括号)之外的全局变量。外部和全局是从不同角度对同一类变量的提法,外部是从生存期(时间)角度提出的;全局是从作用域(空间)角度提出的。主要用于在多个文件间传递数据。特点:1.系统自动为外部变量赋初值0。2.作用域从定义开始直到文件结束。3.外部变量可被不同的文件共享。格式:extern数据类型变量名;第11页/共24页外部变量的副作用外部变量的副作用#in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第十一
限制150内