第十三章_对C语言的深入讨论.ppt
《第十三章_对C语言的深入讨论.ppt》由会员分享,可在线阅读,更多相关《第十三章_对C语言的深入讨论.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、函数的递归调用在函数调用过程中,函数直接或间接调用了自己,我们把这种调用称作函数的递归调用。函数直接调用了自己,称作直接调用;函数间接的调用了自己,称作间接调用。在这里只讨论简单的直接递归。使用递归调用的3个条件(1)可以把要解决的问题转化为一个新的问题,而这个新的问题的解决方法仍与原来的解法相同,只是处理的对象有规律地递增或递减。(2)可以应用这个转化过程使问题得到解决。(3)必须有一个明确的结束递归的条件。例13.3以下程序运行后的输出结果是_。fun(intx)if(x/20)fun(x/2);printf(“%d”,x);main()fun(6);(33)有以下程序#includein
2、tf(intt,intn);main()inta4=1,2,3,4,s;s=fa,4;printf(”%dn”,s);intf(intt,intn)if(n0)returntn-1+f(t,n-1);elsereturn0;程序运行后的输出结果是BA)4B)10C)14D)6(15)有以下程序#includefun(intx)if(x/20)fun(x/2);printf(“%d”,x);main()fun(6);printf(“n”);程序运行后的输出结果是【15】(32)设有如下函数定义intfun(intk)if(ky?x:y)max=MAX(10,5);宏展开后,赋值语句为:max=(
3、105?10:5);对带形参的宏定义,说明如下:(1)在替换带参数的宏名时,一对圆括号不能少,圆括号中实参的个数应该与形参的个数相同,如有多个参数,各参数用逗号隔开。(2)与不带参数的宏相同,同一个宏名不能重复定义,除非两个宏定义命令行完全一致。(3)在宏替换行的表达式中的形参和整个表达式应该用括号括起来。例13.7#defineMUL(a,b)(a)*(b)m=MUL(10-5,5+1)/2;结果输出m=_。答案:15(35)以下程序#include#defineSUB(a)(a)-(a)main()inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf(”%dn”,d);
4、程序运行后的结果是A)0B)-12C)-20D)10(35)有以下程序#include#defineS(x)4*(x)*x+1main()intk=5,j=2;printf(%dn,S(k+j);程序运行后的输出结果是A)197B)143C)33D)28(35)有以下程序#include#definef(x)x*x*xmain()inta=3,s,t;s=f(a+1);t=f(a+1);printf(“%d,%dn,s,t);程序运行后的输出结果是A)10,64B)10,10C)64,10D)64,64(36)有以下程序#include#definePT3.5;#defineS(x)PT*x*
5、x;mian()inta=1,b=2;printf(“%4.1fn”,S(a+b);程序运行后输出的结果是A)14.0B)31.5C)7.5D)程序有错无输出结果13.3标识符的作用域一.存储分类根据变量在内存的不同位置,可以将变量分为两类:自动类和静态类自动类和静态类。根据程序中变量定义的位置不同,又可以将变量分为局部变量和全局变量局部变量和全局变量。在函数外部定义的变量是全局变量。局部变量是内部变量,全局变量也称为外部变量。局部变量可以是自动类变量,也可以是静态类变量。全局变量只能是静态类变量。C语言提供了与此相关的4个关键字:auto(自动)register(寄存器)static(静态)
6、extern(外部)。如如:int sum;auto int a,b,c;register int i;static float x,y;二.局部变量局部变量有3种类型:auto、register和static。1.auto变量在定义变量时,如果没有指定相应的存储类型,则系统默认该存储类型为auto类型。当程序进入定义该变量的函数或复合语句时,系统为这些变量临时分配内存单元。当程序离开这个函数或复合语句时,系统将销毁这些内存单元,使其数据不再有效。例例13.9 以下程序的输出结果是以下程序的输出结果是_。main()int i=1,i_sum;float f,f_sum;int i;i=10;
7、printf(“(1)i=%dn”,i);printf(“(2)i=%dn”,i);答案答案(1)i=10 (2)i=12.register变量register变量(寄存器变量)与auto变量一样,是自动类变量,其作用域和生存期与auto变量完全一样。register变量与auto变量唯一的区别是auto变量在内存中分配存储空间,而register变量在CPU的寄存器中分配。寄存器运算速度非常的快,但寄存器数量有限,一般情况下,不建议编程人员使用寄存器变量。3.static变量在函数内部或复合函数语句中定义变量时,如果使用static来说明,就构成了静态局部变量。静态局部变量的作用域与auto
8、和register类型变量一样,但其生存期却完全不一样生存期却完全不一样。静态局部变量在内存的静态存储区占据着永久性的存储单元,即使离开定义该变量的函数(或复合语句),该存储单元也不会被销毁。当下次再进行定义该变量的函数(或复合语句)时,存储单元仍然保存着原来的值。例13.10以下程序运行后的输出结果是_。fun(inta)intb=0;staticintc=3;b+;c+;return(a+b+c);main()inti,a=5;for(i=0;i3;i+)printf(“%d%d”,i,fun(a);printf(“n”);答案:010111212全局变量外部变量定义:在函数外定义,可为本
9、文件所有函数共用有效范围:从定义变量的位置开始到本文件结束,以及有extern说明的其它文件外部变量可用存储类型:缺省 或 static在外部任意位置定义的变量,称为全局变量。全局变量都是静态变量,其作用域从定义的位置开始,到整个源文件结束为止。例13.11以下程序的运行结果是_。intsum;intfun1()sum+=20;inta;intfun2()a=20;sum+=a;main()sum=0;fun1();a=8;fun2();printf(“sum=%da=%d”,sum,a);答案:sum=40a=20(34)有以下程序#includeintfun()staticintx=1;x
10、*=2;returnx;main()intI,s=1;for(i=1;i=2;i+)s=fun();printf(”%dn”,s);程序运行后的输出结果是A)0B)1C)4D)8(34)设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是A)autoB)registerC)staticD)auto或register(34)有以下程序#includeintf(intn);main()inta=3,s;s=f(a);s=s+f(a);printf(“%dn”,s);intf(intn)staticinta=1;n+=a+;returnn;程序运行以后的输出结果是A)7B)8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十三 语言 深入 讨论
限制150内