1、二级 C 语言笔试选择题-2 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:55,分数:100.00)1.若有代数式 (分数:2.00)A.B.C.D.2.C 语言主要是借助以下哪种手段来实现程序模块化?_A定义函数 B定义常量和外部变量C使用丰富的数据类型 D使用三种基本结构语句(分数:2.00)A.B.C.D.3.若有以下函数首部int fun(double x10,int*n)则下面针对此函数的函数声明语句中正确的是_。Aint fun(double*,int*); Bint fun(double,int);Cint fun(double*x,int n);
2、Dint fun(double x,int*n);(分数:2.00)A.B.C.D.4.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。A函数的形参和实参分别占用不同的存储单元B形参只是形式上的存在,不占用具体存储单元C同名的实参和形参占同一存储单元D函数的实参和其对应的形参共占同一存储单元(分数:2.00)A.B.C.D.5.以下叙述中错误的是_。A函数形参的值也可以传回给对应的实参B函数调用可以作为一个独立的语句存在C若函数有返回值,必须通过 return 语句返回DC 程序必须由一个或一个以上的函数组成(分数:2.00)A.B.C.D.6.以下叙述中正确的是_。A实
3、用的 C 语言源程序总是由一个或多个函数组成B用户自己定义的函数只能调用库函数C不同函数的形式参数不能使用相同名称的标识符D在 C 语言的函数内部,可以定义局部嵌套函数(分数:2.00)A.B.C.D.7.有以下程序#includestdio.hint fun(int x,int y)if(x!=y)return(x+y)/2);else return(x);main()int a=4,b=5,c=6;printf(“%d/n“,fun(2*a,fun(b,c);程序运行后的输出结果是_。A6 B3 C8 D12(分数:2.00)A.B.C.D.8.有以下程序#includestdio.hdo
4、uble f(double x);main()double a=0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“%3.0f/n“,a);double f(double x)(return x*x+1;程序运行后的输出结果是_。A503 B401 C500 D1404(分数:2.00)A.B.C.D.9.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是_。Amain()x=fun(2,10);float fun(int a,int b)Bfloat fun(int a,int b)mai
5、n()x=fun(i,j);Cfloat fun(int,int);main()“x=fun(2,10);float fun(int a,int b)Dmain()float fun(int i,int j);x=fun(i,j);float fun(int a,int b)()(分数:2.00)A.B.C.D.10.有以下程序#includestdio.hintfun(int a,int b)return a+b;main()int x=6,y=7,z=8,r;r=fun(fun(x,y),z-);prinrt(“%d/n“,r);程序运行后的输出结果是_。A21 B15 C20 D31(分
6、数:2.00)A.B.C.D.11.有以下程序#includestdio.hint f(int x);main()int a,b=0;for(a=0;a3;a+=1)b+=f(a);putchar(A+b);int f(int x)( return x*x+1;程序运行后输出结果是_。ABDI BBCD CABE DBCF(分数:2.00)A.B.C.D.12.有以下程序#includestdio.hint add(int a,int b)return(a+h);main()int k,(*f)(),a=5,b=10;f=add;则以下函数调用语句错误的是_。Ak=*f(a,b); Bk=ad
7、d(a,b); Ck=(*f)(a,b); Dk=f(a,b);(分数:2.00)A.B.C.D.13.有以下程序#includestdio.hint f(int x);main()int n=1,m;m=f(f(f(n);printf(“%d/n“,m);int f(int x)return x*2;程序运行后的输出结果是_。A8 B2 C4 D1(分数:2.00)A.B.C.D.14.以下叙述中正确的是_。A函数既可以直接调用自己,也可以间接调用自己B任何情况下都不能用函数名作为实参C函数的递归调用不需要额外开销,所以效率很高D简单递归不需要明确的结束递归的条件(分数:2.00)A.B.C
8、.D.15.设有如下函数定义#includestdio.hint fun(int k)if(k1)return 0;else if(k=1)return 1;else return fun(k-1)+1;若执行调用语句:n=fun(3);,则函数 fun 总共被调用的次数是_。A3 B2 C4 D5(分数:2.00)A.B.C.D.16.有以下程序#includestdio.hint fun(int x)int p;if(x=0|x=1)return(3);p=x-fun(x-2);return p;main()prinrt(“%d/n“,fun(7);执行后的输出结果是_。A2 B3 C7
9、D0(分数:2.00)A.B.C.D.17.若有以下程序#includestdio.hint f(int a,int n)if(n1)int t;t=f(a,n-1);return tan-1?t:an-1;elsereturn a0;main()int a=8,2,9,1,3,6,4,7,5;printf(“%d/n“,f(a,9);则程序的输出结果是_。A9 B1 C8 D5(分数:2.00)A.B.C.D.18.有以下程序#includestdio.hvoid fun(int n,int*s)int f;if(n=1)*s=n+1;elsefun(n-1,f);*s=f;main()in
10、t x=0;fun(4,x);printf(“%d/n“,x);程序运行后的输出结果是_。A2 B1 C3 D4(分数:2.00)A.B.C.D.19.有以下程序#includestdio.hvoid fun(int a,int b)int t;t=a;a=b;b=t;main()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“%d,“,cfi);printf(“/n“);程序的运行结果是_。A1,2,3,4,5,6,7,8,9,0, B2,1,4,3,6,5,8,7,0,9,
11、C0,9,8,7,6,5,4,3,2,1, D0,1,2,3,4,5,6,7,8,9,(分数:2.00)A.B.C.D.20.有以下程序#includestdio.hvoid fun(int a,int n)int i,t;for(i=0;in/2;i+)(t=ai;ai=an-1-i;an-1-i=t;main()int k10=1,2,3,4,5,6,7,8,9,10,i;fun(k,5);for(i=2;i8;i+)printf(“%d“,ki);printf(“/n“);程序的运行结果是_。A321678 B876543 C1098765 D345678(分数:1.00)A.B.C.D
12、.21.有以下程序#includestdio.h#define N 4void fun(int aN,int b)int i;for(i=0;iN;i+)bi=aii-aiN-1-i;main()int xNN=1,2,3,4,5,6,7,8),(9,10,11,12,13,14,15,16,yN,i;fun(x,y);for(i=0;iN;i+)printf(“%d,“,yi);printf(“/n“);程序运行后的输出结果是_。A-3,1,1,3, B-12,-3,0,0, C0,1,2,3, D-3,-3,-3,-3,(分数:1.00)A.B.C.D.22.有以下程序#includest
13、dio.hvoid f(int*q)int i=0;for(;i5;i+)(*q)+;main()int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d,“,ai);程序运行后的输出结果是_。A6,2,3,4,5, B2,2,3,4,5, C1,2,3,4,5, D2,3,4,5,6,(分数:1.00)A.B.C.D.23.有以下程序#includestdio.hint fun(int(*s)4,int n,int k)int m,i;m=s0k;for(i=1;in;i+)if(sikm)m=sik;return m;main()int a44=1,
14、2,3,4,11,12,13,14,21,22,23,24,31,32,33,34);printf(“%d/n“,fun(a,4,0);程序的运行结果是_。A31 B34 C4 D32(分数:2.00)A.B.C.D.24.若有以下程序#includestdio.h#define N 4void fun(int aN,int b,int flag)int i,j;for(i=0;iN;i+)bi=ai0;for(j=1;jN;j+)if(flag?(biaij):(biaij)bi=aij;main()int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
15、,yN,i;fun(x,y,1);for(i=0;iN;i+)printf(“%d,yj);fun(x,y,0);for(i=0;iN;i+)printf(“%d,“,yi);printf(“/n“);则程序的输出结果是_。A1,5,9,13,4,8,12,16, B4,8,12,16,1,5,9,13,C1,2,3,4,13,14,15,16, D13,14,15,16,1,2,3,4,(分数:2.00)A.B.C.D.25.若有以下程序#includestdio.hvoid fun(int a,int n)intt,i,j;for(i=1;in;i+=2)for(j=i+2;jn;j+=2
16、)if(aiaj)t=ai;ai=aj;aj=t;main()int c10=10,9,8,7,6,5,4,3,2,1,i;fun(c,10);for(i=0;i10;i+)printf(“%d,“,ci);printf(“n“);则程序的输出结果是_。A10,1,8,3,6,5,4,7,2,9, B10,9,8,7,6,5,4,3,2,1,C2,9,4,7,6,5,8,3,10,1, D1,10,3,8,5,6,7,4,9,2,(分数:1.00)A.B.C.D.26.有以下程序#includestdio.hint f(int n)int t=0,a=5;if(n/2)int a=6;t+=a
17、+;elseint a=7;t+=a+;return t+a+;main()int s=0,i=0;for(;i2;i+)s+=fi);printf(“%d/n“,s);程序运行后的输出结果是_。A24 B28 C32 D36(分数:1.00)A.B.C.D.27.以下叙述中正确的是_。A只要是用户定义的标识符,都有一个有效的作用域B只有全局变量才有自己的作用域,函数中的局部变量没有作用域C只有在函数内部定义的变量才是局部变量D局部变量不能被说明为 static(分数:2.00)A.B.C.D.28.以下叙述中正确的是_。A全局变量的存储类别可以是静态类B对于变量而言,“定义”和“说明”这两个
18、词实际上是同一个意思C在复合语句中不能定义变量D函数的形式参数不属于局部变量(分数:2.00)A.B.C.D.29.在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是_。Aauto 和 register Bextern 和 register Cauto 和 static Dstatic 和 register(分数:2.00)A.B.C.D.30.以下选项中叙述错误的是_。AC 程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值B在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内CC 程序函数中定义的自动变量,系统不自动赋确定的初值DC 程序函数
19、的形参不可以说明为 static 型变量(分数:2.00)A.B.C.D.31.有以下程序#includestdio.hfun(int x,int y)static int m=0,i=2;i+=m+1;m=i+x+y;return m;main()int j=1,m=1,k;k=fun(j,m);printf(“%d,“,k);k=fun(j,m);printf(“%d/n“,k);执行后的输出结果是_。A5,11 B5,5 C11,11 D11,5(分数:1.00)A.B.C.D.32.有以下程序#includestdio.hint fun()static int x=1;x*=2;ret
20、urn x;main()int i,s=1;for(i=1;i=3;i+)s*=fun();printf(“%d/n“,s);程序运行后的输出结果是_。A30 B10 C0 D64(分数:1.00)A.B.C.D.33.有以下程序#includestdio.hint fun()static int x=1;x+=1;return x;main()int i,s=1;for(i=1;i=5;i+)s+=fun();printf(“%d/n“,s);程序运行后的输出结果是_。A21 B11 C6 D120(分数:2.00)A.B.C.D.34.有以下程序#includestdio.hint a=4
21、;int f(int n)int t=0;staticint a=5;if(n%2)int a=6;t+=a+;else(int a=7;t+=a+;returnt+a+:main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%d/n“,s);程序运行后的输出结果是_。A28 B24 C32 D36(分数:2.00)A.B.C.D.35.若有定义语句:double a,*p=a;以下叙述中错误的是_。A定义语句中的*号是一个间址运算符B定义语句中的*号是一个说明符C定义语句中的 p 只能存放 double 类型变量的地址D定义语句中*p=a 把变量 a 的地
22、址作为初值赋给指针变量 p(分数:2.00)A.B.C.D.36.若有定义语句:double x,y,*px,*py;执行px=x;py=y;正确的输入语句是_。Ascanf(“%lf%lf“,px,py); Bscanf(“%f%f“x,y);Cscanf(“%f%f“,x,y); Dscanf(“%lf%lf“,x,y);(分数:2.00)A.B.C.D.37.以下程序段完全正确的是_。Aint k,*p=k;scanf(“%d“,p); Bint *p;scanf(“%d“,p);Cint*p;scanf(“%d“,p); Dint k,*p;*p=k;scanf(“%nd“,p);(分
23、数:2.00)A.B.C.D.38.有以下程序#includestdio.hvoid fun(char*c,int d)*c=*c+1;d=d+1;printf(“%c,%c,“*c,d);main()char b=a,a=A;fun(b,a);printf(“%c,%c/n“,b,a);程序运行后的输出结果是_。Ab,B,b,A Bb,B,B,A Ca,B,B,a Da,B,a,B(分数:2.00)A.B.C.D.39.设有定义:int x=0,*p;紧接着的赋值语句正确的是_。Ap=NULL; B*p=NULL; Cp=x; D*p=x;(分数:2.00)A.B.C.D.40.设已有定义:
24、float x;则以下对指针变量 p 进行定义且赋初值的语句中正确的是_。Afloat*p=x; Bint*p=(float)x; Cfloat p=x; Dfloat*p=1024;(分数:2.00)A.B.C.D.41.若有以下程序#includestdio.hvoid sp(int*a)int b=2;a=b;*a=*a*2;printf(“%d,“,*a);main()int k=3,*p=k;sp(p);printf(“%d,%d/n“,k,*p);则程序的输出结果是_。A4,3,3 B4,3,4 C6,3,6 D6,6,6(分数:2.00)A.B.C.D.42.若有以下程序#inc
25、ludestdio.hint*f(int*s,int*t)int*k;if(*s*t)k=s;s=t;t=k;return s;main()int i=3,j=5,*p=i,*q=j,*r;r=f(p,q);printf(“%d,%d,%d,%d,%d/n“,i,j,*p,*q,*r);则程序的输出结果是_。A3,5,3,5,5 B3,5,5,3,5 C5,3,5,3,5 D5,3,3,5,5(分数:2.00)A.B.C.D.43.若有定义语句:int year=2009,*p=year;以下不能使变量 year 中的值增至 2010 的语句是_。A*p+; B(*p)+; C+(*p); D
26、*p+=1;(分数:2.00)A.B.C.D.44.以下叙述中正确的是_。A在对指针进行加、减算术运算时,数字 1 表示 1 个存储单元的长度B如果 p 是指针变量,则*p 表示变量 p 的地址值C如果 p 是指针变量,则p 是不合法的表达式D如果 P 是指针变量,则*p+1 和*(p+1)的效果是一样的(分数:2.00)A.B.C.D.45.以下叙述中正确的是_。A设有指针变量为 double *p,则 p+1 将指针 P 移动 8 个字节B函数的类型不能是指针类型C函数的形参类型不能是指针类型D基类型不同的指针变量可以相互混用(分数:2.00)A.B.C.D.46.有以下程序#includ
27、estdio.hmain()int m=1,n=2,*p=m,q=n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%din“,m,n,*p,*q);程序运行后的输出结果是_。A1,2,2,1 B1,2,1,2 C2,1,2,1 D2,1,1,2(分数:2.00)A.B.C.D.47.有以下程序#includestdio.hmain()int c6=10,20,30,40,50,60,*p,*s;p=c;s=c5;printf(“%d/n“,s-p);程序运行后的输出结果是_。A5 B50 C6 D60(分数:2.00)A.B.C.D.48.有以下程序#includestdi
28、o.hvoid fun(int x,int y,int*c,int*d)*c=x+y;*d=x-y;main()int a=4,b=3,e=0,d=0;fun(a,b,c,d);printf(“%d%d/n“,c,d);程序的输出结果是_。A7 1 B4 3 C3 4 D0 0(分数:2.00)A.B.C.D.49.有以下程序#includestdio.hvoid fun(int*p,int*q)int t;t=*p;*p=*q;*q=t;*q=*p;main()int a=0,b=9;fun(a,b);pfintf(“%d%d/n“,a,b);程序的输出结果是_。A9 9 B0 0 C9 0
29、 D0 9(分数:1.00)A.B.C.D.50.有以下程序#includestdio.hmain()int a=(2,4,6,8,10,x,*p,y=1;p=a1;for(x=0;x3;x+)y+=*(p+x);printf(“%d/n“,y);程序的输出结果是_。A19 B13 C11 D15(分数:2.00)A.B.C.D.51.若有以下定义int x10,*pt=x;则对 x 数组元素的正确引用是_。A*(x+3) B*x10 C*(pt+10) Dpt+3(分数:2.00)A.B.C.D.52.有以下程序#includestdio.hmain()int i,s=0,t=1,2,3,4
30、,5,6,7,8,9;for(i=0;i9;i+=2)s+=*(t+i);printf(“%d/n“,s);程序执行后的输出结果是_。A25 B20 C45 D36(分数:2.00)A.B.C.D.53.设有定义double a10,*s=a;以下能够代表数组元素 a3的是_。A*(s+3) B(*s)3 C*s3 D*s+3(分数:2.00)A.B.C.D.54.若有定义语句:int a23,*p3;则以下语句中正确的是_。Ap0=a12; Bp0=a; Cp=a; Dp1=a;(分数:1.00)A.B.C.D.55.若有定义:int w35;则以下不能正确表示该数组元素的表达式是_。A*(
31、w+1)4 B*(*w+3) C*(*(w+1) D*(w00+1)(分数:1.00)A.B.C.D.二级 C 语言笔试选择题-2 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:55,分数:100.00)1.若有代数式 (分数:2.00)A. B.C.D.解析:解析 B 选项中函数 pow(x,e)错误,应该直接使用 exp(x)函数。C 选项中函数 abs(nx+ex)错误,应该使用 fabs()返回浮点数的绝对值。D 选项中 pow(x,n)参数顺序错误。本题正确答案为 A。2.C 语言主要是借助以下哪种手段来实现程序模块化?_A定义函数 B定义常量和外部变量C使
32、用丰富的数据类型 D使用三种基本结构语句(分数:2.00)A. B.C.D.解析:解析 C 语言主要通过函数的功能来实现程序模块化,答案选择 A。3.若有以下函数首部int fun(double x10,int*n)则下面针对此函数的函数声明语句中正确的是_。Aint fun(double*,int*); Bint fun(double,int);Cint fun(double*x,int n); Dint fun(double x,int*n);(分数:2.00)A. B.C.D.解析:解析 本题考查的是函数的声明。函数声明的一般形式为:函数类型 函数名(参数类型 1 ,参数名 1 ,参数类
33、型 2,参数名 2);其中,参数名可以省略。本题中的 fun 函数有两个参数,一个类型是 double 型的一维数组,另一个是int 型的指针。而在 C 语言中,一维数组用作函数参数和该数组元素的指针类型是等价的。所以本题的正确答案是选项 A。4.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是_。A函数的形参和实参分别占用不同的存储单元B形参只是形式上的存在,不占用具体存储单元C同名的实参和形参占同一存储单元D函数的实参和其对应的形参共占同一存储单元(分数:2.00)A. B.C.D.解析:解析 本题考查的知识点是:函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为
34、“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C 语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。故本题应该选择 A。5.以下叙述中错误的是_。A函数形参的值也可以传回给对应的实参B函数调用可以作为一个独立的语句存在C若函数有返回值,必须通过 return 语句返回DC 程序必须由一个或一个以上的函数组成(分数:2.00)A. B.C.D.解析:解析 函数参数传递是个不可逆的过程,形参不会把值传回实参,所以 A 选
35、项错误。6.以下叙述中正确的是_。A实用的 C 语言源程序总是由一个或多个函数组成B用户自己定义的函数只能调用库函数C不同函数的形式参数不能使用相同名称的标识符D在 C 语言的函数内部,可以定义局部嵌套函数(分数:2.00)A. B.C.D.解析:解析 C 语言组成单位为函数,所以 A 选项正确。7.有以下程序#includestdio.hint fun(int x,int y)if(x!=y)return(x+y)/2);else return(x);main()int a=4,b=5,c=6;printf(“%d/n“,fun(2*a,fun(b,c);程序运行后的输出结果是_。A6 B3
36、 C8 D12(分数:2.00)A. B.C.D.解析:解析 本题中第一次调用为 fun(8,fun(5,6),因为 fun(5,6)返回值为 5,所以第二次调用为fun(8,5)=6,因此选择 A。8.有以下程序#includestdio.hdouble f(double x);main()double a=0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“%3.0f/n“,a);double f(double x)(return x*x+1;程序运行后的输出结果是_。A503 B401 C500 D1404(分数:2.00)A. B.C.D.
37、解析:解析 for 循环进入循环体的 i 分别为 0 10 20,调用 f 函数返回分别为 1 101 401,累加为503,所以选择 A。9.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,以下选项中错误的程序是_。Amain()x=fun(2,10);float fun(int a,int b)Bfloat fun(int a,int b)main()x=fun(i,j);Cfloat fun(int,int);main()“x=fun(2,10);float fun(int a,int b)Dmain()float fun(int i,int j);
38、x=fun(i,j);float fun(int a,int b)()(分数:2.00)A. B.C.D.解析:解析 在函数调用前,需要定义或有声明,A 选项错误。10.有以下程序#includestdio.hintfun(int a,int b)return a+b;main()int x=6,y=7,z=8,r;r=fun(fun(x,y),z-);prinrt(“%d/n“,r);程序运行后的输出结果是_。A21 B15 C20 D31(分数:2.00)A. B.C.D.解析:解析 fun(x,y)值为 13,z-表达式的值为 8,fun(13,8)的值为 21 答案选择 A。11.有以
39、下程序#includestdio.hint f(int x);main()int a,b=0;for(a=0;a3;a+=1)b+=f(a);putchar(A+b);int f(int x)( return x*x+1;程序运行后输出结果是_。ABDI BBCD CABE DBCF(分数:2.00)A. B.C.D.解析:解析 第一次循环,b 为 1,输出为 B,第二次循环 b 为 3,输出为 D,第三次循环 b 为 8,输出为I,所以选择 A。12.有以下程序#includestdio.hint add(int a,int b)return(a+h);main()int k,(*f)(),
40、a=5,b=10;f=add;则以下函数调用语句错误的是_。Ak=*f(a,b); Bk=add(a,b); Ck=(*f)(a,b); Dk=f(a,b);(分数:2.00)A. B.C.D.解析:解析 A 选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,因此不能将其赋值给整型变量 k。13.有以下程序#includestdio.hint f(int x);main()int n=1,m;m=f(f(f(n);printf(“%d/n“,m);int f(int x)return x*2;程序运行后的输出结果是_。A8 B2 C4 D1(分数:2.0
41、0)A. B.C.D.解析:解析 第一次调用 m=f(f(f(1),第二次为 m=f(f(2),第三次为 m=f(4),即返回值为 8,选项A 正确。14.以下叙述中正确的是_。A函数既可以直接调用自己,也可以间接调用自己B任何情况下都不能用函数名作为实参C函数的递归调用不需要额外开销,所以效率很高D简单递归不需要明确的结束递归的条件(分数:2.00)A. B.C.D.解析:解析 函数直接或间接调用自己,称为递归调用,所以选择 A。15.设有如下函数定义#includestdio.hint fun(int k)if(k1)return 0;else if(k=1)return 1;else r
42、eturn fun(k-1)+1;若执行调用语句:n=fun(3);,则函数 fun 总共被调用的次数是_。A3 B2 C4 D5(分数:2.00)A. B.C.D.解析:解析 首先 n=fun(3),3 被当作参数传递进去,进行了第一次调用,3 被当作参数传进去后,程序会执行语句 else return fun(k-1)+1,进行了第二次调用,而参数是 3-1 也就是 2。2 被当作参数传进去后,程序会执行语句 else return fun(k-1)+1,进行了第三次调用,而参数是 2-1 也就是 1。1 被当作参数传进去后,程序会执行语句 else if(k=1) return 1;不再
43、递归调用,因此最终结果为 3 次,选项A 正确。16.有以下程序#includestdio.hint fun(int x)int p;if(x=0|x=1)return(3);p=x-fun(x-2);return p;main()prinrt(“%d/n“,fun(7);执行后的输出结果是_。A2 B3 C7 D0(分数:2.00)A. B.C.D.解析:解析 本题考查的是递归算法的分析。一个直接或间接地调用自身的算法称为递归算法。在一个递归算法中,至少要包含一个初始值和一个递归关系。本题的 fun()函数在 x 等于 0 或 1 时返回 3,而在其余情况下返回 x-fun(x-2),所以本
44、题的递归算法可以这样表示:fun(x)=3(x=0 或 x=1)(初始值)fun(x)=x-fun(x-2)(x0 且 x1)(递归关系)在主函数中输出的结果是 fun(7),而 fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)。17.若有以下程序#includestdio.hint f(int a,int n)if(n1)int t;t=f(a,n-1);return tan-1?t:an-1;elsereturn a0;main()int a=8,2,9,1,3,6,4,7,5;printf(“%d/n“,f(a,9);则程序的输出结果是_。A9 B1
45、C8 D5(分数:2.00)A. B.C.D.解析:解析 f 函数为递归调用,返回的为数组 a 的最大值。所以选择 A。18.有以下程序#includestdio.hvoid fun(int n,int*s)int f;if(n=1)*s=n+1;elsefun(n-1,f);*s=f;main()int x=0;fun(4,x);printf(“%d/n“,x);程序运行后的输出结果是_。A2 B1 C3 D4(分数:2.00)A. B.C.D.解析:解析 fun 函数是递归函数,调用到 n 为 0 时*s=1+1 为 2,返回主函数,x 为 2。19.有以下程序#includestdio.hvoid fun(int a,int b)int t;t=a;a=b;b=t;main()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“%d,“,cfi);printf(“/n“);程序的运行结果是_。A1,2,3,4,5,6,7,8,9,0, B2,1,4,3,6,5,8,7,0,9,C0,9,8,7,6,5,4,3,2,1, D0,1,2,3,4,5,6,7,8,9,(分数:2.00)A. B.C.D.解析:解析 函数调用中发生的数据传递是单向的,即只能把实参的