1、二级 C 语言笔试-93 及答案解析(总分:110.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列关于单目运算符、的叙述中正确的是 _。(分数:2.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D.它们的运算对象可以是 char 型变量、int 型变量和 float 型变量2.当把以下 4 个表达式用作 if 语句的控制表达式时,有一个选项与其他 3 个选项含义不同,这个选项是 _
2、。(分数:2.00)A.k%2B.k%2=1C.(k%2)!=0D.!k2=13.以下关于函数的叙述中正确的是 _。(分数:2.00)A.每个函数都可以被其他函数调用(包括 main 函数)B.每个函数都可以被单独编译C.每个函数都可以单独运行D.在一个函数内部可以定义另一个函数4.为了使模块尽可能独立,要求 _。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块问的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强5.下列对于线性链表的描述中正确的是 _。
3、(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且各前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的6.若变量已正确定义,要求程序段完成 5!的计算,不能完成此操作的程序段是 _。(分数:2.00)A.for (i=1,p=1; i=5; i+ +)p* = i;B.for (i=1;i=5; i+ +) p=1;p*=i;C.i=1;p= 1;while( i=5) p* =i;i+ +;D.i=1;p=1;do p*=i;i+ +; while (i=5)
4、;7.有以下程序:main( )char * p10=“abc“,“aabdfg“,“dcdbe“,“abbcf,“cd“;printf(“%d/n“,strlen(p4);执行后的输出结果是 _。(分数:2.00)A.2B.3C.4D.58.有以下程序:main()int c=35;printf(“%d/n“,e程序运行后的输出结果是 _。(分数:2.00)A.0B.70C.35D.19.下面程序的功能是输出以下形式的金字塔图案:* * * * * * * * * * * * *main()int i,j;for(i=1;i=4;i+;)for(j=1;j=4-i;j+)printf(“ “
5、);for(j=1; ;j=_;j+)printf(“*“);printf(“/n“);在下划线处应填入的是 _。(分数:2.00)A.iB.2*i-1C.2*i+1D.i+210.有以下程序:void fun(int*a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;fun(a,+i,-j);main()int a=1,2,3,4,5,6,i;fun(a,0,5);for(i=0;i6;i+)printf(“%d“,ai);执行后的输出结果是 _。(分数:2.00)A.6 5 4 3 2 1B.4 3 2 1 5 6C.4 5 6 1 2 3D.1 2 3
6、4 5 611.下列叙述中,正确的是 _。(分数:2.00)A.用 E-R 图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系B.用 E-R 图只能表示实体集之间一对一的联系C.用 E-R 图只能表示实体集之间一对多的联系D.用 E-R 图表示的概念数据模型只能转换为关系数据模型12.以下叙述中正确的是 _。(分数:2.00)A.C 语言的源程序不必通过编译就可以直接运行B.C 语言中的每条可执行语句最终都将被转换成二进制的机器指令C.C 源程序经编译形成的二进制代码可以直接运行D.C 语言中的函数不可以单独进行编译13.有以下程序:void f(int y,int *x)y=y+
7、*x; *x;=*x+y;main()int x=2,y=4;f(y,执行后的输出结果是 _。(分数:2.00)A.8 4B.8 8C.4 8D.4 214.以下程序运行后的输出结果是 _。main()int x=0210;printf(“%x/n“,x);(分数:2.00)A.88B.86C.77D.2115.设变量 a、b、c、d 和 y 都已正确并赋值。若有以下 if 语句:if(ab)if(c=d)y=0;else y=1;该语句所表示的含义是 _。(分数:2.00)A.B.C.D.16.有以下程序: void fun(char *a, char*b)a=b;(*(分数:2.00)A.
8、+;)*q=*(p+5);printf(“%d %d/n“, *p, *q);程序运行后的输出结果是 _。(分数:2.00)A.运行后报错B.6 6C.6 11D.5 1018.有以下程序main( )int i,s=0;for(i=1;il0;i+=2) s+=i+1printf(“%d/n“,s);程序执行后的输出结果是 _。(分数:2.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和19.有以下程序:int*f(int*x,int*y)if(*x*y)return x;elsereturn y;main()int a=
9、7,b=8,*P,*q,*r;P=printf( % d, % d/n“, strlen(s),sizeof(s);执行后的输出结果是 _。(分数:2.00)A.赋初值的字符串有错B.6,7C.5,6D.6,621.已知 i、j、k 为 iht 型变量,若从键盘输入:1,2,3回车,使 i 的值为 1、j 的值为 2、k 的值为3,以下选项中正确的输入语句是 _。(分数:2.00)A.scanf(“%d %d %d“,char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);printf(“%d %d %3.1f %3.1f/n“,a,c,f,x);程序
10、运行后的输出结果是 _。(分数:2.00)A.1 65 1 6.5B.1 65 1.5 6.5C.1 65 1.0 6.5D.2 65 1.5 6.523.以下选项中不属于 C 语言的类型的是 _。(分数:2.00)A.signed short intB.unsigned long intC.unsigned intD.long short24.有以下程序:main()int n=0,m=l,x=2;if(!n) x-=l:if(!m) x-=2;if(!x) x-=3;printf (“ %d/n“,x);执行后的输出结果是 _。(分数:2.00)A.2B.1C.3D.625.有定义语句:i
11、nt x,y;,若要通过 scanf(“%d,%d“,p2+函数的功能是 _。(分数:2.00)A.将 p1 所指字符串复制到 p2 所指内存空间B.将 p1 所指字符串的地址赋给指针 p2C.对 p1 和 p2 两个指针所指字符串进行比较D.检查 p1 和 p2 两个指针所指字符串中是否有/028.以下有 4 组用户标识符,其中合法的一组是 _。(分数:2.00)A.For -subCaseB.4dDOSizeC.f2_G3IFabcD.WORDvoiddefine29.有以下程序:void sort(int a,int n)int i,j,t;for(i=0;in-1;i+=2)for(j
12、=i+2; jn;j+=2)if(aiaj)t=ai;ai=aj;aj=t;main( )int aa10=(1,2,3,4,5,6,7,8,9,10),i;sort(aa,10);for(i=0;i10;i+) printf(“%d“,aai);printf(“/n“);其输出结果是 _。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2.,1,C.9,2,7,4,5,6,3,8,1,10,D.1,10,3,8,5,6,7,4,9,2,30.已定义以下函数:fun(int *p)return *p; 该函数的返回值是 _。(分数:2.00
13、)A.不确定的值B.形参 p 中存放的值C.形参 p 所指存储单元中的值D.形参 p 的地址值31.设有定义:int A,*pA=,以下 scanf 语句中能正确为变量 A 读入的数据是 _。(分数:2.00)A.scanf (“%d“,pA) ;B.sC.sD.s32.设有定义语句:int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x 数组 6 个元素中的值,不能完成此操作的语句是 _。(分数:2.00)A.for(i=0;i6;i+) printf(“%2d“,*(p+);B.for(i=0;i6;i+) printf(“%2d“,*(p+i);C.for(i=0;i6;i
14、+)printf(“%2d“,*p+);D.for(i=0;i6;i+)printf(“%2d“,(*p)+);33.下列函数定义中,会出现编译错误的是 _。(分数:2.00)A.max(int x,int y,int *z)*z=xy? x:y;B.int max(int x,y)int z;z=xy? x;y;return z;C.max(int x,int y)int z;z=xy? x:y; return(z);D.int max(int x,int y)return(xy?x:y);34.有以下程序:#includestring.hvoid f(char*s,char*t)char
15、k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10=“abcdefg“,*p;p=str+strlen(str)/2+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。(分数:2.00)A.abcdefB.gfedcbaC.gbcdefaD.abedcfg35.已有定义:int i,a10,*p;;,则合法的赋值语句是 _。(分数:2.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a+2;36.设有定义:int n=0,*p=,则以下选项中,正确的赋值语句是 _。(分数:2.0
16、0)A.p=1;B.*q=2C.q=pD.*p=537.有以下程序:main()char a,b,c,d;scanf(“%c,%c,%d,%d“,a,printf(“%c,%c,%c,%c/n“,a,b,c,d);若运行时从键盘上输入:6,5,65,66回车,则输出结果是 _。(分数:2.00)A.6,5,A,BB.6,5,65,66C.6,5,6,5D.6,5,6,638.以下程序运行后的输出结果是 _。main()int a,b,c;a=10;b=20;c=(a%b1)|(a/b1);printf(“%d %d %d/n“,a,b,c);(分数:2.00)A.10 20 0B.20 10
17、0C.10 10 0D.20 20 039.下列选项中正确的语句组是 _。(分数:2.00)A.char s8;s=“Beijing“;B.char *s;s=“Beijing“;C.char s8;s=“Beiiing“;D.char *s;s=“Beijing“;40.有以下程序:main()char str10=“China“,“Beijing“),*P=str;printf(“%s/n“,p+10);程序运行后的输出结果是 _。(分数:2.00)A.ChinaB.BeijingC.ngD.ing二、填空题(总题数:15,分数:30.00)41.有以下程序:main()int a=7,b
18、=8, *p, *q, *r;p= q= r=p; p=q; q=r;printf(“%d,%d,%d,%d/n“, *p,*q,a,b);程序运行后的输出结果是 【1】 。(分数:2.00)填空项 1:_42.有以下程序:# includestring.hmain(int argc,char *argv)int i,len=0;for(i=1;iargc;i+=2) len+= strlen(argvi);printf(“%d/n“,len);经编译连接后生成的可执行文件是 ex.exe,若运行时输入以下带参数的命令行:ex abcd efg h3 k44执行后的输出结果是 【2】 。(分数
19、:2.00)填空项 1:_43.有以下程序:main()int a33,*p,i;p=i9;i+)pi=i+1;printf(“%d/n“,a12);程序运行后的输出结果是 【3】 。(分数:2.00)填空项 1:_44.有以下程序:void f(int a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;f(a,i+1,j-1);main()int i,aa5=1,2,3,4,5;f(aa,0,4);for(i=0;i5;i+) printf(“%d,“,aai);printf(“/n“);执行后的输出结果是 【4】 。(分数:2.00)填空项 1:_45.目
20、前实际存在和使用的广域网基本上都是采用 _拓扑结构类型。有以下程序:# include string.hstruct STUint num;float TotalScore; ;void f(struct STU p)struct STU s2=20041,703,20045,537;p.num=s1.num;p.TotalScore=s1.TotalScore;main()struct STU s2=20041,703,20042,580;f(s0);printf(“%d %3.0f/n“,s0.num,s0,TotalScore);程序运行后的输出结果是 【5】 。(分数:2.00)填空项
21、 1:_46.若有以下程序:int f(int x,int y)return (y-x)*x;main()int a=3,b=4,c=5,d;d=f(f(3,4),f(3,5);printf(“%d/n“,d);执行后的输出结果是 【6】 。(分数:2.00)填空项 1:_47.有以下程序:void swap 1(int c)int t;t=c0;c0=c1;c1=t;void swap2(int c0,int c1)int t;t=c0;c0=c1;c1=t;main()int a2=3,5,b2=3,5;swaplA);swap2(b0,b1);printf(“%d,%d,%d,%d/n“
22、,a0,a1,b0,b1);其输出结果是 【7】 。(分数:2.00)填空项 1:_48.有以下程序;int a=2;int f(int *A) return(*A) +;main()int s=0;int a=5;s+=f(b=p5;b 中的值是 【9】 。(分数:2.00)填空项 1:_50.以下程序的运行结果是 【10】 。# includestring.hchar *ss(char *s)return s+strlen(s)/2;main()char *p,*str=“abcdefgh“;p=ss(str);printf(“%s/n“,p);(分数:2.00)填空项 1:_51.有如下
23、程序段:main(int argc,char *argv)int n,i=0;while(argv1i!=/0)n=fun();i+;printf(“%d/n“,n*argc);int fun()static int s=0;s+=1;return s;假设程序经编译、连接后生成可执行文件 exam,exe,若键入如下命令行:exam l23回车则运行结果为 【11】 。(分数:2.00)填空项 1:_52.以下程序运行后的输出结果是 【12】 。# define S(x) 4*x*x+1main()int i=6,j=8;printf(“%d/n“,S(i+j);(分数:2.00)填空项 1
24、:_53.以下程序运行后的输出结果是 【13】 。# includestring.hvoid fun(char *s,int p,int k)int i;for(i=p;ik-1;i+)si=si+2;main()char s=“abcdefg“;fun(s,3,strlen(s);puts(s);(分数:2.00)填空项 1:_54.若有以下程序:main()int a44=1,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,32,-33,0;int i,j,s=0;for(i=0;i4;i+)for(j=0;j4;j+)if (aij0)continue;if(
25、aij=0)break;s+=aij;printf(“%d/n“,s);执行后的输出结果是 【14】 。(分数:2.00)填空项 1:_55.若有以下程序:main()char a;a=H-A+0;printf(“%c/n“,a);执行后的输出结果是 【15】 。(分数:2.00)填空项 1:_二级 C 语言笔试-93 答案解析(总分:110.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列关于单目运算符、的叙述中正确的是 _。(分数:2.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 floa
26、t 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D.它们的运算对象可以是 char 型变量、int 型变量和 float 型变量 解析:解析 本题考查+与-运算符的问题。自增运算符+与自减运算符-的运算对象只能是变量,不能是表达式或常量,变量的数据类型可以是 int、char、float 和 double 型,其结果是将变量的值加 1 或减 1。2.当把以下 4 个表达式用作 if 语句的控制表达式时,有一个选项与其他 3 个选项含义不同,这个选项是 _。(分数:2.00)A.k%2B.k%2=1C.(k%2)!=0D.!k2=1 解析:
27、解析 A、B、C 作为 if 语句的条件时均表示 k 不能被 2 整除的情况时为真,但是 D 表示 k 为 0 时为真。3.以下关于函数的叙述中正确的是 _。(分数:2.00)A.每个函数都可以被其他函数调用(包括 main 函数)B.每个函数都可以被单独编译 C.每个函数都可以单独运行D.在一个函数内部可以定义另一个函数解析:解析 main 函数是不能被其他函数调用的,函数可以单独编译,但不能单独运行,C 语言中,一个函数内部是不能再定义另一函数的。4.为了使模块尽可能独立,要求 _。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模
28、块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块问的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析 为了使模块尽可能独立,模块分解时应满足信息隐蔽原则。尽量使模块的内聚度高,模块间的耦合度低。模块的大小适中(通常一个模块以 50100 个语句行最为适宜)。5.下列对于线性链表的描述中正确的是 _。(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且各前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 线性
29、链表属于链式存储结构,在链式存储结构中,存储空间可以不连续,各元素的存储顺序是任意的,元素之间的逻辑关系是由指针域来决定的。6.若变量已正确定义,要求程序段完成 5!的计算,不能完成此操作的程序段是 _。(分数:2.00)A.for (i=1,p=1; i=5; i+ +)p* = i;B.for (i=1;i=5; i+ +) p=1;p*=i; C.i=1;p= 1;while( i=5) p* =i;i+ +;D.i=1;p=1;do p*=i;i+ +; while (i=5);解析:解析 选项 B 中每次执行循环体都要执行 p=1,无法保存上次的运算结果,执行完 while 循环后p
30、=5。7.有以下程序:main( )char * p10=“abc“,“aabdfg“,“dcdbe“,“abbcf,“cd“;printf(“%d/n“,strlen(p4);执行后的输出结果是 _。(分数:2.00)A.2 B.3C.4D.5解析:解析 本题中 p4=“cd“,所以 strlen(p4)=2。8.有以下程序:main()int c=35;printf(“%d/n“,e程序运行后的输出结果是 _。(分数:2.00)A.0B.70C.35 D.1解析:解析 “i=4;i+;)for(j=1;j=4-i;j+)printf(“ “);for(j=1; ;j=_;j+)printf
31、(“*“);printf(“/n“);在下划线处应填入的是 _。(分数:2.00)A.iB.2*i-1 C.2*i+1D.i+2解析:解析 根据题意可知第二个 j 循环结束的条件是第 i 行打印出的“*“的个数。10.有以下程序:void fun(int*a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;fun(a,+i,-j);main()int a=1,2,3,4,5,6,i;fun(a,0,5);for(i=0;i6;i+)printf(“%d“,ai);执行后的输出结果是 _。(分数:2.00)A.6 5 4 3 2 1 B.4 3 2 1 5 6C.
32、4 5 6 1 2 3D.1 2 3 4 5 6解析:解析 本题考查指针变量作函数形参的问题。指针变量作函数的形参,实现的是地址传递,形参的改变可以影响实参。fun 由数的功能是将 a 所指数组中的内容逆置。在 main 函数中调用 fun 函数后,实参数组 s 中元素的值变为:a0=6、 a1=5、a2=4、a3=3、a4=2、a5=1。11.下列叙述中,正确的是 _。(分数:2.00)A.用 E-R 图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系 B.用 E-R 图只能表示实体集之间一对一的联系C.用 E-R 图只能表示实体集之间一对多的联系D.用 E-R 图表示的概念数据模
33、型只能转换为关系数据模型解析:解析 E-R 模型可以用一种非常直观的图的形式表示,这种图称为 E-R 图。用 E-R 图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系。12.以下叙述中正确的是 _。(分数:2.00)A.C 语言的源程序不必通过编译就可以直接运行B.C 语言中的每条可执行语句最终都将被转换成二进制的机器指令 C.C 源程序经编译形成的二进制代码可以直接运行D.C 语言中的函数不可以单独进行编译解析:解析 C 语言编写的程序必须经过编译、连接后才可以执行,选项 A 错误;C 语言编译后生成的二进制代码是目标文件,需进一步连接生成.exe 文件方可执行,选项 C 错误;
34、C 语言中函数可以单独编译。13.有以下程序:void f(int y,int *x)y=y+ *x; *x;=*x+y;main()int x=2,y=4;f(y,执行后的输出结果是 _。(分数:2.00)A.8 4 B.8 8C.4 8D.4 2解析:解析 函数的形参 Y 是简单变量,x 是地址变量,故 Y=4,x=2+4+2=814.以下程序运行后的输出结果是 _。main()int x=0210;printf(“%x/n“,x);(分数:2.00)A.88 B.86C.77D.21解析:解析 x 以 0 开头是以八进制的形式赋值的,输出时要输出其对应的十六进制。0210 对应的十六进制
35、是 88。15.设变量 a、b、c、d 和 y 都已正确并赋值。若有以下 if 语句:if(ab)if(c=d)y=0;else y=1;该语句所表示的含义是 _。(分数:2.00)A.B.C. D.解析:解析 if 语句中 else 是与其最接近的 if 相匹配,因此是 c=d 时 y=0,cd 时 y=1,它们都是在ab 的情况下的。16.有以下程序: void fun(char *a, char*b)a=b;(*(分数:2.00)A.+;)*q=*(p+5);printf(“%d %d/n“, *p, *q);程序运行后的输出结果是 _。(分数:2.00)A.运行后报错 B.6 6C.6
36、 11D.5 10解析:解析 指针 q 没有指向确定的存储单元,故不能赋值。18.有以下程序main( )int i,s=0;for(i=1;il0;i+=2) s+=i+1printf(“%d/n“,s);程序执行后的输出结果是 _。(分数:2.00)A.自然数 19 的累加和B.自然数 110 的累加和C.自然数 19 中奇数之和D.自然数 110 中偶数之和 解析:解析 本题中 s=(1+1)+(3+1)+(5+1)+(7+1)+(9+1)=2+4+6=8+10。19.有以下程序:int*f(int*x,int*y)if(*x*y)return x;elsereturn y;main()
37、int a=7,b=8,*P,*q,*r;P=printf( % d, % d/n“, strlen(s),sizeof(s);执行后的输出结果是 _。(分数:2.00)A.赋初值的字符串有错B.6,7C.5,6 D.6,6解析:解析 本题中定义字符数组 s 时没有指定数组长度,s 初始化后存放的内容为“/n123/0“,其中/n和/是转义字符,所以 strlen(s)=5,sizeof(s)=6。21.已知 i、j、k 为 iht 型变量,若从键盘输入:1,2,3回车,使 i 的值为 1、j 的值为 2、k 的值为3,以下选项中正确的输入语句是 _。(分数:2.00)A.scanf(“%d
38、%d %d“,char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);printf(“%d %d %3.1f %3.1f/n“,a,c,f,x);程序运行后的输出结果是 _。(分数:2.00)A.1 65 1 6.5B.1 65 1.5 6.5 C.1 65 1.0 6.5D.2 65 1.5 6.5解析:解析 本题中变量 a 是 int 型,c 是 char 型,f 是 float 型,x 是 double 型。根据变量的数据类型,执行语句 a=f/=c*=(x=6.5)时,首先执行 x.6.5 得 x=6.5;然后执行 c*=x 得 c=cx=10
39、6.5=65;执行 f/=c 得 f=f/c=100.0/65= 1.5385;最后执行 a=f 得 a=1。以“%3.1f”格式输出变量 f 和 x,小数点后面保留一位有效数字,故正确答案为 B。23.以下选项中不属于 C 语言的类型的是 _。(分数:2.00)A.signed short intB.unsigned long intC.unsigned intD.long short 解析:解析 本题考查 C 语言中整型变量的分类问题,选项 D 不是 C 语言合法的数据类型。24.有以下程序:main()int n=0,m=l,x=2;if(!n) x-=l:if(!m) x-=2;if(
40、!x) x-=3;printf (“ %d/n“,x);执行后的输出结果是 _。(分数:2.00)A.2B.1 C.3D.6解析:解析 因 n=0,故!n 为真,执行语句 x-=1 得 x=x-1=2-1=1;条件!m 和!x 不成立,所以 x1,正确答案为 1。25.有定义语句:int x,y;,若要通过 scanf(“%d,%d“,p2+函数的功能是 _。(分数:2.00)A.将 p1 所指字符串复制到 p2 所指内存空间 B.将 p1 所指字符串的地址赋给指针 p2C.对 p1 和 p2 两个指针所指字符串进行比较D.检查 p1 和 p2 两个指针所指字符串中是否有/0解析:解析 whi
41、le 循环语句的功能是将 p1 所指存储单元的内容赋值给 p2 所指的存储单元,然后p1+、p2+,分别指向下一个存储单元,直到 p1 指向符号串的结束字符/0为止。故函数的功能是将p1 所指字符串复制到 p2 所指内存空间。28.以下有 4 组用户标识符,其中合法的一组是 _。(分数:2.00)A.For -subCaseB.4dDOSizeC.f2_G3IFabc D.WORDvoiddefine解析:解析 选项 A 中有非法标识符-sub,选项 B 中有非法标识符 4d,选项 D 中有 C 语言保留字 void。29.有以下程序:void sort(int a,int n)int i,j
42、,t;for(i=0;in-1;i+=2)for(j=i+2; jn;j+=2)if(aiaj)t=ai;ai=aj;aj=t;main( )int aa10=(1,2,3,4,5,6,7,8,9,10),i;sort(aa,10);for(i=0;i10;i+) printf(“%d“,aai);printf(“/n“);其输出结果是 _。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2.,1,C.9,2,7,4,5,6,3,8,1,10, D.1,10,3,8,5,6,7,4,9,2,解析:解析 函数 sort 的功能是将 a0、a2
43、、a4、a6和 a8按照由大到小的次序排序,其他元素值不变。正确答案为 C。30.已定义以下函数:fun(int *p)return *p; 该函数的返回值是 _。(分数:2.00)A.不确定的值B.形参 p 中存放的值C.形参 p 所指存储单元中的值 D.形参 p 的地址值解析:解析 函数 fun 的形参是指针变量,*p 的含义是指针变量 p 所指存储单元的内容,因此正确答案为 C。31.设有定义:int A,*pA=,以下 scanf 语句中能正确为变量 A 读入的数据是 _。(分数:2.00)A.scanf (“%d“,pA) ; B.sC.sD.s解析:解析 选项 B 中不是变量 A
44、的地址,错误;选项 C 是指针 pA 的地址,错误;选项 D 中*pA 表示变量 A 的值,错误。32.设有定义语句:int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x 数组 6 个元素中的值,不能完成此操作的语句是 _。(分数:2.00)A.for(i=0;i6;i+) printf(“%2d“,*(p+);B.for(i=0;i6;i+) printf(“%2d“,*(p+i);C.for(i=0;i6;i+)printf(“%2d“,*p+);D.for(i=0;i6;i+)printf(“%2d“,(*p)+); 解析:解析 选项 D 中(*p)+的意思是将 p 所指
45、向的存储单元的值加 1,与题意不符,错误。33.下列函数定义中,会出现编译错误的是 _。(分数:2.00)A.max(int x,int y,int *z)*z=xy? x:y;B.int max(int x,y)int z;z=xy? x;y;return z;C.max(int x,int y)int z;z=xy? x:y; return(z);D.int max(int x,int y)return(xy?x:y);解析:解析 本题考查函数的定义。选项 B 中函数形参 y 没有说明数据类型。34.有以下程序:#includestring.hvoid f(char*s,char*t)ch
46、ar k;k=*s; *s=*t; *t=k;s+; t-;if(*s) f(s,t);main( )char str10=“abcdefg“,*p;p=str+strlen(str)/2+1;f(p,p-2);printf(%s/n“,str);程序运行后的输出结果是 _。(分数:2.00)A.abcdefB.gfedcba C.gbcdefaD.abedcfg解析:解析 p=str+strlen(str)/2+1=str+4,f(p,p-2)的功能是将 p4与 p2互换,p5与 p1互换,p6与 p0互换,最后的结果为 gfedcba。35.已有定义:int i,a10,*p;;,则合法的赋值语句是 _。(分数:2.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a+2; 解析:解析 因 p 是指针变量,故选项 D 正确。36.设有定义:i