1、二级 C 语言笔试-404 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:64.00)1.对序线性表(23,29,34,55,60,70,78)用二分法查找值为 60 的元素时,需要比较次数为( )。 A) 1 B) 2 C) 3 D) 4(分数:2.00)A.B.C.D.2.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除 B) 需要连续的存储空间C) 可随机访问 D) 需另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D.3.按照“先进先出”组织数据的数据结构是( )。A) 队列 B) 栈 C) 双向链表 D) 二
2、叉树(分数:2.00)A.B.C.D.4.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是( )。A) e3,e1,e4,e2 B) e2,e4,e3,e1 C) e3,e4,e1,e2 D) 任意顺序(分数:1.00)A.B.C.D.5.以下不属于面向对象的基本特点的是( )。A) 分类性 B) 多态性 C) 继承性 D) 封装性(分数:1.00)A.B.C.D.6.算法分析的目的是( )。A找出数据结构的合理性 B找出算法中输入和输出之间的关系C分析算法的易懂性和可靠性 D分析算法的效率以求改进(分数:1.00)A.B.C.D.7.在面向对象方法中,( )描述的是具有相似属性与操
3、作的一组对象。A) 属性 B) 事件 C) 方法 D) 类(分数:2.00)A.B.C.D.8.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。A) DB 包括 DBS 和 DBMS B) DBMS 包括 DB 和 DBSC) DBS 包括 DB 和 DBMS D) 没有任何关系(分数:2.00)A.B.C.D.9.以下关于函数的叙述中正确的是_。A) 每个函数都可以被其他函数调用(包括 main 函数)B) 每个函数都可以被单独编译C) 每个函数都可以单独运行D) 在一个函数内部可以定义另一个函数(分数:2.00)A.B.C.D.10.设变量已正确定义并赋值,
4、以下正确的表达式是_。A) x=y*5=x+z B) int(15.8%5)C) x=y+z+5,+y D) x=25%5.0(分数:1.00)A.B.C.D.11.下列选项中不合法的+六进制数是( )。A) Oxff B) OXll C) Oxlg D) OXabc(分数:2.00)A.B.C.D.12.若有定义:int a=4, b=5;float x=3.4,y=2.1;,则下列表达式的值为( )。(float) (a+b)/2+(int)x%(int)yA) 5.5 B) 55C) 5.500000 D) 55.00000(分数:2.00)A.B.C.D.13.若 a、b、c、d 都是
5、血型变量且都已经正确赋初值,则下列不正确的赋值语句是( )。A) a+d; B) a+; C) a=b=c=d=100; D) a=(b=3)+(d=5);(分数:2.00)A.B.C.D.14.设 a、b、C、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=ab)w+;dow-;printf(“*“);while(w!=0);(分数:1.00)A.B.C.D.17.下列程序的输出结果是( )。int f1(int x,int y)return xy?x:y;int f2(int x,int y)return xy?y:x;main()i
6、nt a=4,b=3,e=5,d=2,e,f,g;e=f2(f1(a,b),f1(e,d);f=f1(f2(a,b),f2(e,d);g=a+b+c+d-e-f;printf(“%d,%d,%d/n“,e,f,g);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:2.00)A.B.C.D.18.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while(ch=getehar()!=/N)putchar(ch);D)
7、while(ch=getchar()!=/n,)putchar(ch);(分数:2.00)A.B.C.D.19.以下程序段的输出结果是 _。main()char s110,s210,s310;scanf(“%s“,s1);gets(s2);gets(s3);puts(s1);puts(s2);puts(s3);输入数据如下: (此处CR代表回车符)aaaCRbbbCRA) aaabbbB) aaabbbC) aaa/0bbb/0D) aaabbb(分数:2.00)A.B.C.D.20.有以下程序#includestdio.hmain()int a=1,2,3,4),y,*p=.a3;-p;y=
8、*p;printf(“y=%d/n“,y);程序的运行结果是( )。Ay=0 By=1 Cy=2 Dy=3(分数:1.00)A.B.C.D.21.下面程序main()int x=100,a=10,b=20,okl=5,ok2=0;if(aB) if(b!=15)if(!ik1) x=1; else if(ok2)x=10;x=-1;printf(“%d/n“,x);的输出是_。A) -1 B) 0 C) 1 D) 不确定的值(分数:2.00)A.B.C.D.22.以下正确的函数头定义形式是A) double fun(int x,int y) B) double fun(int x;int y)
9、C) double fun(int x,int y);D) double fun(int x,y);(分数:2.00)A.B.C.D.23.若执行下述程序时,若从键盘输入 6 和 8,结果为( )。 main() int a,b,s; scanf(“%d%dt“,for(i=0;i4;i+)for(j=0;j3;j+)fof(k=j+1;k4;k+)if(ajiaki)t=aji;aki;aki=t;/*按列排序*/for(i=0;i4;i+)printf(“%d,aii);程序运行后的输出结果是(分数:2.00)A.B.C.D.25.下列程序的运行结果为( )。#includestdiohv
10、oid abc(char*str)int a,b,i,j;for(i=j=0;stri!=/0;i+)if(stri!=a)strj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str%s“,str);A) str=bcdef B) str=abcdefC) str=a D) str=ab(分数:1.00)A.B.C.D.26.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是( )。A) ,那么,其中 static 的作用应该是_。A) 将变量存储在静态存储区B) 使
11、变量 X 可以由系统自动初始化C) 使 x 只能在本文件内引用D) 使 x 的值可以永久保留(分数:2.00)A.B.C.D.29.若有以下说明和语句:int c4 5 ,( * p) 5;p=e;能够正确引用 c 数组元素的是( )。A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p0+2)(分数:1.00)A.B.C.D.30.下列程序的运行结果为( )。 群 includestdio.h void abc(char*str) int a,b,i,j; for(i=0;stri!=/0;i+) if(stri!=:a) strj+=stri; strj=/0; void
12、 main() char str=“abcdef“; abc(str); printf(“str=%s“,str); (分数:2.00)A.B.C.D.31.以下语句或语句组中,能正确进行字符串赋值的是_。A) char*sp;*sp=“right!“;B) char s10;s=“right!“;C) char s10;*s=“right!“;D) char*sp=“right!“;(分数:2.00)A.B.C.D.32.下面程序的输出结果是#includestdioh#includestringhmain()char*p1=“abc“,*p2=“ABC“,str50=“xyz“;strcp
13、y(str+2,streat(p1,p2);printf(“%s/n“,str);A) xyzabcABC B) zabcABC C) xyabcABC D) yzabcABC(分数:1.00)A.B.C.D.33.有以下程序:#include stdio, h#include string, hstruet STUint nam;float TotalSeore;void f( strnct STU p)struct STU s2 = 20044,550 ,20045,537 ;p.num = s 1. num; p.TotalScore = s 1. TotalScore;main( )s
14、truct STU s2 = 20041,703 ,20042,580;f(s0 );printf( “%d %3. Of/n“ ,s0.num,s0.TotalSeore); 程序运行后的输出结果是( )。A) 20045 537 B) 20044 550 C) 20042 580 D) 20041 703(分数:1.00)A.B.C.D.34.下列判断正确的是( )。A) char a“ABCD“;等价于 char*a;*a“ABCD“;B) char str10ABCD“;等价于 char str10;str“ABCD“;C) char*s“ABCD“;等价于 char s;*s“ABC
15、D“;D) char c5“ABCD“,d5“ABCD“;等价于 char c5d5“ABCD“;(分数:2.00)A.B.C.D.35.设有以下定义和语句int a32=(1,2,3,4,5),*p3;P0=a1;则*(p0+1)所代表的数组元素是_。A) a01 B) a10 C) a11 D) a12(分数:1.00)A.B.C.D.36.下列叙述中不正确的是( )。A) 在 C 语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B) 在 C 的函数中,最好使用全局变量C) 外部变量可以在函数之间传递数据D) 自动变量实质上是一个函数内部的局部变量(分数:2.00)A.B
16、.C.D.37.有以下程序:#include stdio.hfun( char p 10)int n=0,i;for(i=0;i7;i +)if(pi0 =T) n+;return n;main( )char sir 10 = “Mon“ ,“Tue“ ,“Wed“ ,“Thu“ ,“Fri“ ,“Sat“ ,“Sun“ ;prlnff(“ % d/n“ ,fun(str) );程序执行后的输出结果是( )。A) 1 B) 2 C) 3 D) 0(分数:1.00)A.B.C.D.38.有以下程序:#include stdiohfun(int x,int y,int z)z=x*y;main()
17、int a=4,b=2,c=6;fun(a,b,c);printf(“%d“,c);程序运行后的输出结果是( )。A) 16 B) 6 C) 8 D) 12(分数:1.00)A.B.C.D.39.有以下程序:#include stdio.hmain ( )int i;for(i =0;i 3 ;i + )switch (i)case 0: printf(“ % d“ ,i);case 2: printf(“ % d“ , i);default: printf( “% d“ , i);程序运行后的输出结果是( )。A) 022111 B) 021021 C) 000122 D) 012(分数:1
18、.00)A.B.C.D.40.读程序:#include stdio.hf(int b,int n)int i,r;r=1;for(i=0;i=n;i+) r=r*bi;return r;main()int x,a=2,3,4,5,6,7,8,9;x=f(a,3);printf(“%d/n“,x);上面程序的输出结果是( )。A) 720 B) 120 C) 24 D) 6(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:34.00)41.若按功能划分,软件测试的方法通常分为白盒测试方法和U /U测试方法。(分数:2.00)填空项 1:_42.某二叉树中度为 2 的结点有 18
19、个,则该二叉树中有U /U个叶子结点。(分数:2.00)填空项 1:_43.数据结构包括数据的逻辑结构、数据的U /U以及对数据的操作运算。(分数:2.00)填空项 1:_44.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_45.数据库设计分为以下六个设计阶段:需求分析阶段、U /U、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(分数:2.00)填空项 1:_46.若整型变量 a 和 b 中的值分别为 7 和 9,要求按以下格式输出 a 和 b 的值:a=7b=9请完成输出语句:printf(“_“,a,b);(分数:2.00
20、)填空项 1:_47.以下程序运行后的输出结果是_。main()int i=10,j=0;doj=j+i;i-;while(i2);printf(“%d/n“,j);(分数:4.00)填空项 1:_48.在 C 语言中,当表达式值为 0 时表示逻辑值“假”,当表达式值为 (8) 时表示逻辑值“真”。(分数:2.00)填空项 1:_49.有以下函数void prt(char ch, int n)int i;for(i=1; i=n; i+)printf(i%6!=0? “%c“: “%c/n“, ch);执行调用语句 prt(*, 24) ;后,函数共输出了_行*号。(分数:2.00)填空项 1
21、:_以下 isprime 函数的功能是:判断形参 a 是否为素数,是素数,函数返回 1,否则返回 0。请填空。int isprime(int a)int i;for(i=2;i=a/2;i+)if(a%i=0)U /U;U /U;(分数:4.00)填空项 1:_填空项 1:_50.下列的 for 语句的循环次数为_。for(x=1,y=0;(y!=19) x+);(分数:2.00)填空项 1:_51.下列程序的运行结果是_。main()int s=0,i=1;while(s= 10)s=s+i*i;i+;printf(“%d“,-i);(分数:2.00)填空项 1:_52.以下程序的输出结果是
22、 1。int fun(int*x,int n)if(n=0)return x0;else return x0+fun(x+1,n-1);main2int a=1,2,3,4,5,6,7;printf(“%d/n“,fun(a,3);(分数:2.00)填空项 1:_53.设有下列程序:#includestdio.h#includestring.hmain()int i;char s10,t10;gets(t);for(i=0;i2;i+)gets(s);if(strcmp(t,s)0)strcpy(t,s);printf(“%s/n“,t);程序运行后,从键盘上输入(CR代表回车符):DEFCR
23、BADEPCRQTHRGCR,则程序的输出结果是_。(分数:2.00)填空项 1:_54.有以下程序#include stdio.htypedef structint num;double s;REC;void funl(REC x) xnum=23;xs=88.5;main()REC a=16,900);funl(a);printf(”%d/n“,anum);程序运行后的输出结果是_。(分数:2.00)填空项 1:_二级 C 语言笔试-404 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:64.00)1.对序线性表(23,29,34,55,60,70,78
24、)用二分法查找值为 60 的元素时,需要比较次数为( )。 A) 1 B) 2 C) 3 D) 4(分数:2.00)A.B.C. D.解析:解析 根据二分法查找法需要两次:首先将 60 与表中间的元素 55 进行比较,由于 60 大于55,所以在线性表的后半部分查找。第二次比较的元素是后半部分的中间元素,将 60 与表中间的元素70 进行比较,由于 60 小于 70,所以在线性表的前半部分查找。第三次比较的元素是前半部分的中间元素,即 60,这时两者相等。即查找成功。2.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除 B) 需要连续的存储空间C) 可随机访问 D) 需
25、另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D. 解析:解析 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此,不需要另外开辟空间来保存元素之间的关系。3.按照“先进先出”组织数据的数据结构是( )。A) 队列 B) 栈 C) 双向链表 D) 二叉树(分数:2.00)A. B.C.D.解析:解析 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫“队尾”,删除元素的一端叫“队头”,先插入的元素先被删除,是按“先进先出”的原则组织
26、数据的。4.如果进栈序列为 e1,e2,e3,e4,则可能的出栈序列是( )。A) e3,e1,e4,e2 B) e2,e4,e3,e1 C) e3,e4,e1,e2 D) 任意顺序(分数:1.00)A.B. C.D.解析:解析 由栈“后进先出”的特点可知:A) 中 e1 不可能比 e2 先出;C) 中 e3 不可能比 e4 先出,且 e1 不可能比 e2 先出;D) 中栈是先进后出的,所以不可能是任意顺序;B) 中出栈过程如图所示:5.以下不属于面向对象的基本特点的是( )。A) 分类性 B) 多态性 C) 继承性 D) 封装性(分数:1.00)A. B.C.D.解析:解析 封装性、继承性、
27、多态性是面向对象的三大特点。6.算法分析的目的是( )。A找出数据结构的合理性 B找出算法中输入和输出之间的关系C分析算法的易懂性和可靠性 D分析算法的效率以求改进(分数:1.00)A.B.C.D. 解析:解析 算法分析是指对一个算法的运行时间和占用空间做定量的分析,计算相应的数量级,并用时间复杂和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。7.在面向对象方法中,( )描述的是具有相似属性与操作的一组对象。A) 属性 B) 事件 C) 方法 D) 类(分数:2.00)A.B.C.D. 解析:解析 类(class)描述的是具有相似属性与操作的一组对象
28、,而一个具体对象则是其对应类的一个实例。8.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。A) DB 包括 DBS 和 DBMS B) DBMS 包括 DB 和 DBSC) DBS 包括 DB 和 DBMS D) 没有任何关系(分数:2.00)A.B.C. D.解析:解析 数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台 5 个部分组成,可见 DB 和 DBMS 都是 DBS 的组成部分。9.以下关于函数的叙述中正确的是_。A) 每个函数都可以被其他函数调用(包括 main 函数)B) 每个函数都可以被单独编
29、译C) 每个函数都可以单独运行D) 在一个函数内部可以定义另一个函数(分数:2.00)A.B. C.D.解析:解析 C 语言中,除了主函数外,用户定义的函数或库函数都可以互相进行调用,甚至可以自己调用自己。所以选项 A 错误。每个函数可以单独被编译成二进制代码,但不是所有的函数都可以单独运行,程序的运行需要从主函数 main 开始,缺少 main 函数,则无法运行。所以选项 C 错误。C 语言规定,不能在一个函数内部再定义函数,所以选项 D 错误。10.设变量已正确定义并赋值,以下正确的表达式是_。A) x=y*5=x+z B) int(15.8%5)C) x=y+z+5,+y D) x=25
30、%5.0(分数:1.00)A.B.C. D.解析:解析 赋值运算符的左边必须是一个代表某一存储单元的变量名,而 A 选项中的“y*5=x+z”部分是非法赋值。求余运算符的对象只能是整型,故选项 B 和选项 D 是错误的。选项 C 为逗号表达式。11.下列选项中不合法的+六进制数是( )。A) Oxff B) OXll C) Oxlg D) OXabc(分数:2.00)A.B.C. D.解析:解析 +六进制是以“0x”或“0X”开头的字符串,字符串中只能含有 09 这 10 个数字和a、b、c、d、 s、f 这 6 个字母。12.若有定义:int a=4, b=5;float x=3.4,y=2
31、.1;,则下列表达式的值为( )。(float) (a+b)/2+(int)x%(int)yA) 5.5 B) 55C) 5.500000 D) 55.00000(分数:2.00)A.B.C. D.解析:解析在计算(float)(a+b)/2 时,由于通过强制类型转换将(a+b)转换成了 float 型,所以应先将2 转换成 float 型,再进行计算,得 4.500000。在计算(int)x%(int)y 时,先将 x 和 y 通过强制类型转换成 int 型,再进行求余运算,得 1。又因为 4.500000 是 float 型,所以将 1 和它相加时,先将 1 换成 float 型,再计算,
32、得到 5.500000。知识扩展类型转换的一般规则是:低级类型服从高级类型,并进行相应的转换。数据类型的级别由低到高的排序表示为:char intunsignedlongfloatdouble。13.若 a、b、c、d 都是血型变量且都已经正确赋初值,则下列不正确的赋值语句是( )。A) a+d; B) a+; C) a=b=c=d=100; D) a=(b=3)+(d=5);(分数:2.00)A. B.C.D.解析:解析 C 语言规定,赋值号的右边可以是一个赋值表达式,因此选项 C)、选项 D)正确;在选项 B)中,a+是一个自加 1 的表达式,a 被重新赋值,因此它是一个合法的赋值表达式;
33、在选项 A)中,a+d 是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。14.设 a、b、C、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=ab)w+;dow-;printf(“*“);while(w!=0);(分数:1.00)A.B.C. D.解析:解析 当循环结束时,w 的值应为-1,而其他选项中 w 的值为 0,故选择 C 选项。17.下列程序的输出结果是( )。int f1(int x,int y)return xy?x:y;int f2(int x,int y)return xy?y:
34、x;main()int a=4,b=3,e=5,d=2,e,f,g;e=f2(f1(a,b),f1(e,d);f=f1(f2(a,b),f2(e,d);g=a+b+c+d-e-f;printf(“%d,%d,%d/n“,e,f,g);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:2.00)A. B.C.D.解析:解析 根据函数 int f1(int x,int y)return xy?x:y;)和 int f2(int x,int y)return xy?y:x;的定义可知,如果 xy 成立,则函数 f1 返回 x 的值,函数 f2 返回 y 的值。所以 f1(
35、a,b)=4,f1(c,d)=5,f2(a,b)=3,f2(c,d)=2 故 e=f2(4,5)=4,f=f1(3,2)=3,g=4+3+5+2-4-3=7。18.若变量已正确定义,下列正确的程序段是( )。A) while(ch=getchar()=/N)putchar(ch);B) while(ch=getchar()=/n)putchar(ch);C) while(ch=getehar()!=/N)putchar(ch);D) while(ch=getchar()!=/n,)putchar(ch);(分数:2.00)A.B.C.D. 解析:解析 本题考查两个知识点:C 语言用/n这个字符
36、常量表示换行;getchar 函数的作用是从终端输入一个字符,当遇到换行时结束输入。19.以下程序段的输出结果是 _。main()char s110,s210,s310;scanf(“%s“,s1);gets(s2);gets(s3);puts(s1);puts(s2);puts(s3);输入数据如下: (此处CR代表回车符)aaaCRbbbCRA) aaabbbB) aaabbbC) aaa/0bbb/0D) aaabbb(分数:2.00)A.B. C.D.解析:评析 scanf 是标准输入函数,在输入字符串 aaa 时,实际的内容为“aaa/0”,“/0”是由系统自动加入的;gets 的功
37、能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以“/0”代替换行符。20.有以下程序#includestdio.hmain()int a=1,2,3,4),y,*p=.a3;-p;y=*p;printf(“y=%d/n“,y);程序的运行结果是( )。Ay=0 By=1 Cy=2 Dy=3(分数:1.00)A.B.C.D. 解析:解析 本题中首先定义了一个一维数组和指针,接着将数组第 4 个元素的地址赋予*p,接着使指针 p 指向了数组的第三个元素,并将数组第三个元素的值 3 赋予 y。21.下面程序main()int x=100,a=10,b=20,okl=5,ok2=0;if(
38、aB) if(b!=15)if(!ik1) x=1; else if(ok2)x=10;x=-1;printf(“%d/n“,x);的输出是_。A) -1 B) 0 C) 1 D) 不确定的值(分数:2.00)A. B.C.D.解析:评析 第判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断如此循环,在打印输出语句的前行,程序绐变量 x 赋了值,为-1,所以,无论前期如何变化,最后的 x 值依然为-122.以下正确的函数头定义形式是A) double fun(int x,int y) B) double fun(int x;int y)C) double fun(int x,int
39、 y);D) double fun(int x,y);(分数:2.00)A. B.C.D.解析:解析 形式参数之间是以逗号“,”隔开,且每个变量均需说明其数据类型,圆括号后面不能有分号。只有选项 A 符合要求。23.若执行下述程序时,若从键盘输入 6 和 8,结果为( )。 main() int a,b,s; scanf(“%d%dt“,for(i=0;i4;i+)for(j=0;j3;j+)fof(k=j+1;k4;k+)if(ajiaki)t=aji;aki;aki=t;/*按列排序*/for(i=0;i4;i+)printf(“%d,aii);程序运行后的输出结果是(分数:2.00)A.
40、 B.C.D.解析:解析 奉题利用多重 for 循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。25.下列程序的运行结果为( )。#includestdiohvoid abc(char*str)int a,b,i,j;for(i=j=0;stri!=/0;i+)if(stri!=a)strj+=stri;strj=/0;void main()char str=“abcdef“;abc(str);printf(“str%s“,str);A) str=bcdef B) str=abcdefC
41、) str=a D) str=ab(分数:1.00)A. B.C.D.解析:解析 本题考查函数调用时的参数传递。通过函数 abc 的执行,将字符串中的字母 a 去掉,保留剩下的。由于是通过指针调用,所以改变字符串的结果。26.变量 m 的值为 8,m 的地址为 1010,若欲使 p 为指向 m 的指针变量,则下列赋值正确的是( )。A) ,那么,其中 static 的作用应该是_。A) 将变量存储在静态存储区B) 使变量 X 可以由系统自动初始化C) 使 x 只能在本文件内引用D) 使 x 的值可以永久保留(分数:2.00)A.B.C. D.解析:评析 事实上,无论有无 Static 修饰,外
42、部变量都具有 A、B 和 C 三种特性。作为种修饰,static 仅是限制此类型外部变量的引用范围 C 只能在定义它的文件范围内使用。29.若有以下说明和语句:int c4 5 ,( * p) 5;p=e;能够正确引用 c 数组元素的是( )。A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p0+2)(分数:1.00)A.B.C.D. 解析:解析 (*p)5中 p 是一个行指针,指向一个包含 5 个元素的一维数组,p 的值是该一维数组的首地址。当用行指针访问二维数组时,行指针每增加 1,表示指针指向二维数组的下一行,此题中的 p+i 将指向数组的第 i 行。选项 A)的意思
43、是指向数组 c 的第 1 行,不是引用 c 数组的元素;选项 B)中 p+3 是指向数组元素的第 3 行,。(P+3)是指第 3 行第 0 个元素的地址;选项 C)可由对选项 A)、选项 B)的解释知,它指的是第 1 行第 3 列元素的地址;选项 D)中 p0 +2 是指第 0 行第 2 列元素的地址,再加个*就表示第0 行第 2 列的元素,即 c02。30.下列程序的运行结果为( )。 群 includestdio.h void abc(char*str) int a,b,i,j; for(i=0;stri!=/0;i+) if(stri!=:a) strj+=stri; strj=/0;
44、void main() char str=“abcdef“; abc(str); printf(“str=%s“,str); (分数:2.00)A. B.C.D.解析:解析 本题考查函数调用是的参数传递。通过函数 abc 的执行,将字符串中的字母 a 去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。31.以下语句或语句组中,能正确进行字符串赋值的是_。A) char*sp;*sp=“right!“;B) char s10;s=“right!“;C) char s10;*s=“right!“;D) char*sp=“right!“;(分数:2.00)A.B.C.D. 解析:解析 本题
45、的考点是 C 语言的数组和指针。C 的数组名是一个特殊类型的指针,固定指向数组第一个元素的位置,运行过程中不能再改变其指向。因此选项 B、C 都是错误的。指针可以指向任何单元,但选项 A 是错误的,因为赋值语句“*sp=“right!“;”是错误的,正确写法是“sp=“right!“;”。而对于选项 D,由于“char * sp=“right!“;”是定义指针同时赋初值,因此是正确的。32.下面程序的输出结果是#includestdioh#includestringhmain()char*p1=“abc“,*p2=“ABC“,str50=“xyz“;strcpy(str+2,streat(p1
46、,p2);printf(“%s/n“,str);A) xyzabcABC B) zabcABC C) xyabcABC D) yzabcABC(分数:1.00)A.B.C. D.解析:解析 本题考查的重点是拷贝字符串使用 strcpy()函数,该函数的调用方式是:strcpy(字符数组,字符串),其中“字符串”可以是字符串常量,也可以是字符数组。函数的功能是:将“字符串”完整地复制到“字符数组”中,字符数组中原有的内容被覆盖。使用该函数时注意:字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志“/0”一起复制;不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用 strcpy()函数处理。另外,本题还考查连接字符串的 strcat()函数,其调用方式是:strcat(字符数组,字符串)。功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。使用该函数时注意:由于没有边界检查,编程者