1、计算机二级(C)55 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:60,分数:60.00)1.下列对于软件测试的描述中正确的是【 】。(分数:1.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误D.软件测试的目的是使程序符合结构化原则2.以下叙述中错误的是【 】。(分数:1.00)A.C 语言中对二进制文件的访问速度比文本文件快B.C 语言中,随机文件以二进制代码形式存储数据C.语句 FILE fp:定义了一个名为 fp 的文件指针D.C 语言中
2、的文本文件以 ASCII 码形式存储数据3.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为【 】。(分数:1.00)A.log2nB.n/2C.nD.n+14.若有定义:int *p3;,则以下叙述中正确的是( )。 (分数:1.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有三个指针B.定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int 的指针C.定义了一个名为*p 的整型数组,该数组含有三个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int 类型元素5.有以下程序 main() int Y=
3、10; while(Y-);printf(“Y=dn“,Y); 程序执行后的输出结果是【 】。 (分数:1.00)A.Y=0B.Y=-1C.Y=1D.while 构成无限循环6.以下程序中函数 scmp 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址 #include stdio.h #include string.h char *scmp(char *s1, char *s2) if(strcmp(s1,s2)A.abcdB.abbaC.abcD.abca7.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:1.00)A.if(ab) el
4、se k=0;B.if(ab)|(bc) k=1 else k=0;C.if(ab) k=1; else if(bc) k=1; else k=0;8.有以下程序: main( ) int x =1,3,5,7,2,4,6,0,i,j,k; for(i=0;i3;i+) for (j=2;j=i;j-) if(xj+1xj) k=xj;xj=xj+1;xj+1=k; for(i=0;i3;i+) for(j=4;j7-i;j+) if(xj+1xj) k=xj;xj=xj+1;xj+1=k; for (i=0;i3;i+) if(xjxj+1) k=xj;xj=xj+1;xj+1=k; for
5、 (i=0;i8;i+) printf(“%d“,xi); printf(“/n“); 程序运行后的输出结果是( )。 (分数:1.00)A.75310246B.01234567C.76310462D.135702469.若有以下说明和定义 union dt int a;char b;double c;data; 以下叙述中错误的是【 】。(分数:1.00)A.data 的每个成员起始地址都相同B.变量 data 所占的内存字节数与成员 c 所占字节数相等C.程序段 data.a=5;printf(“%f/n“,data.c);输出结果为 5.000000D.D10.用 C 语言编写的代码程序
6、( )。(分数:1.00)A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释才能执行11.与十进制数 200 等值的十六进制数为( )。(分数:1.00)A.A8B.A4C.C8D.C412.有以下程序 void change(int k)k0=k5; main() int x10=l,2,3,4,5,6,7,8,9,10,n=0; while(n0 | Esex);D.scanf(“d“,ps-age);27.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是【 】。(分数:1.00)A.#define N 10B.#define n 5int
7、aN; int a2*n;C.int a5+5;D.int n=10,an.28.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;bb) return(a); else return(b); main( ) int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%d/n“, r); 程序运行后的输出结果是( )。 (分数:1.00)A.3B.6C.8D.1231.有以下程序 main( ) int a=5,b=4,c=3,d=2; if(abc) printf(“%d/n
8、“,d); else if(c-1=d)=1) printf(“%d/n“,d+1); else printf(“%d/n“,d+2); 执行后输出的结果是( )。 (分数:1.00)A.2B.3C.4D.编译时有错,无结果32.下列关于 C 语言用户标识符的叙述中正确的是( )。(分数:1.00)A.用户标识符中可以出现下划线和中划线(减号)B.用户标识符中不可以出现中划线,但可以出现下划线C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头D.用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头33.设变量 X 和 Y 均已正确定义并赋值。以下 if 语句中,在编译时将
9、产生错误信息的是【 】。(分数:1.00)A.if(X+);B.if(Xy struct node *next; (48) CreatList(char *s) struct node *h,*p,*q); h=(struct node *)malloc(sizeof(struct node); p=q=h; while(*s!=/0) p=(struct node *)malloc(sizeof(struct node); p-data= (49) ; q-next=p; q= (50) ; s+; p-next=/0; return h; main( ) char str =“link l
10、ist“; struct node *head; head=CreatList(str); . (分数:1.00)A.char *B.struct nodeC.struct node*D.char48.下列对于线性链表的描述中正确的是【 】。(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的49.以下叙述中正确的是【 】。(分数:1.00)A.预处理命令行必须位于 C 源程序的起始位置B.在 C 语言中,预处理命
11、令行都以“#“开头C.每个 C 程序必须在开头包含预处理命令行#includeD.C 语言的预处理不能实现宏定义和条件编译的功能50.以下不合法的用户标识符是【 】。(分数:1.00)A.j2KEYB.DoubleC.4dD.851.以下不能定义为用户标识符的是【 】。(分数:1.00)A.MainB.0C.intD.sizeof52.设有定义:float a=2,b=4,h=3;,以下 C 语言表达式与代数式 1/2(a+b) 计算结果不相符的是( )。(分数:1.00)A.(a+b)*h/2B.(1/2)*(a+b)*hC.(a+b)*h*1/2D.h/2*(a+b)53.若有定义 int
12、 x=0,*p= 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。 (分数:1.00)A.double myadd(double a,b);B.double myadd(double,double);C.double myadd(double b,double a);D.double myadd(double x,double y);56.有以下程序 #include void f(char P10,int n)*字符串从小到大排序* char t10;int i,j; for(i=0;iO)strcpy(t,pi);strcpy(pi,pj);strc
13、py(pj,t); main() char p510=“abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“; f(P,5); printf(“dn“,strlen(p0); 程序运行后的输出结果是【 】。 (分数:1.00)A.2B.4C.6D.357.有以下程序 main( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7B.6C.8D.无确定值58.算法具有五个特性,以下选项中不属于算法特性的是【 】。(分数:1.00)A.有穷性B.简洁性C.可行性D.确定性59.数字字符 0 的 ASC值为 48,若有以下程序 main
14、() char a=1,b=2; printf(“%c“,b+); printf (“%d/n“,b-a); 程序运行后的输出结果是【 】。(分数:1.00)A.32B.502C.22D.2,5060.有以下程序 main() int x32=0,i; for(i=0;i,则输出结果为【 】。 (分数:1.00)A.2 0 0B.2 0 4C.2 4 0D.2 4 6二、填空题(每空 2 分,共 40 分)(总题数:20,分数:40.00)61.有以下程序 void f( int y,int *x) y=y+*x; *x=*x+y; main( ) int x=2,y=4; f(y, prin
15、tf(“%d %d/n”,x,y); 执行后输出的结果是 1。 (分数:2.00)填空项 1:_62.以下 isprime 函数的功能是判断形参 a 是否为素数,是素数,函数返回 1, 否则返回 0。请填空 Int isprime(Int a) int i; for(i=2;i=2)m=fun(t,n-1);return m; main2 int a=11,4,6,3,8,2,3,5,9,2; printf(“dn“,fun(a,10); (分数:2.00)填空项 1:_65.有以下程序: int sub(int n) return(n/10+n%10); main1 int x,y; sca
16、nf(“%d“, t=a; a=b; b=t; main2 intx=3,y=5,* p=x,* q=y; swap(p,q); prinff(“%d %d/n“, *p, *q); (分数:2.00)填空项 1:_74.以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb,b+ca。请填空。 main1 float a,b,C; scanf(“fff“, if (c=a+b) printf(“yes/n“); else printf(“no/n“)
17、; (分数:2.00)填空项 1:_77.以下程序的功能是调用函数 fun 计算:m=1-2+3-4+9-10,并输出结果。请填空。 int fun( int n) int m=0,f=1,i; for(i=1; i=n; i+) m+=i*f; f= 1; return m; main( ) printf(“m=%d/n“, 2); (分数:2.00)填空项 1:_78.以下 sstrcpy1 函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+= 2); mai
18、n( ) char str1100,str2 =”abcdefgh”; sstrcpy(str1,str2); printf(“%s/n”,str1); (分数:2.00)填空项 1:_79.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:2.00)填空项 1:_80.以下程序运行后的输出结果是 1。 main2 int x=0210; printf(“%X/n“,x); (分数:2.00)填空项 1:_计算机二级(C)55 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:60,分数:60.00)1.下
19、列对于软件测试的描述中正确的是【 】。(分数:1.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:关于软件测试的目的,Grenford J.Myers 在 The Art of Software Testing 一书中给出了深刻的阐述,整体来说,软件测试的目的就是尽可能多地发现程序中错误。 2.以下叙述中错误的是【 】。(分数:1.00)A.C 语言中对二进制文件的访问速度比文本文件快B.C 语言中,随机文件以二进制代码形式存储数据C.语句 FILE fp:定义了一个名
20、为 fp 的文件指针 D.C 语言中的文本文件以 ASCII 码形式存储数据解析:FILE 是由系统定义的一个结构体类型,并用该类型来定义若干个 FILE 类型的变量,以便存放若干个文件。所以用 FILE 定义的变量必须是数组或指针,所以选项 C 中的“FILE fp;“改为“FILE*fp;“就对了。 3.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为【 】。(分数:1.00)A.log2nB.n/2C.n D.n+1解析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,贝需要与线性表中所有的元素进行比较。对长度为 n 的线性表进行顺序查找
21、,在最坏隋况下需要比较 n 次。 4.若有定义:int *p3;,则以下叙述中正确的是( )。 (分数:1.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有三个指针B.定义了一个指针数组 p,该数组含有三个元素,每个元素都是基类型为 int 的指针 C.定义了一个名为*p 的整型数组,该数组含有三个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组应具有三个 int 类型元素解析:5.有以下程序 main() int Y=10; while(Y-);printf(“Y=dn“,Y); 程序执行后的输出结果是【 】。 (分数:1.00)A.Y=0B.Y=-
22、1 C.Y=1D.while 构成无限循环解析:while(y-)执行后,y 若大于 1,则循环,等 y=0 时,循环结束,并执行自减运算,得-1。6.以下程序中函数 scmp 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址 #include stdio.h #include string.h char *scmp(char *s1, char *s2) if(strcmp(s1,s2)A.abcdB.abba C.abcD.abca解析:7.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:1.00)A.if(ab) else k=0; B
23、.if(ab)|(bc) k=1 else k=0;C.if(ab) k=1; else if(bc) k=1; else k=0;解析:8.有以下程序: main( ) int x =1,3,5,7,2,4,6,0,i,j,k; for(i=0;i3;i+) for (j=2;j=i;j-) if(xj+1xj) k=xj;xj=xj+1;xj+1=k; for(i=0;i3;i+) for(j=4;j7-i;j+) if(xj+1xj) k=xj;xj=xj+1;xj+1=k; for (i=0;i3;i+) if(xjxj+1) k=xj;xj=xj+1;xj+1=k; for (i=0
24、;i8;i+) printf(“%d“,xi); printf(“/n“); 程序运行后的输出结果是( )。 (分数:1.00)A.75310246 B.01234567C.76310462D.13570246解析:9.若有以下说明和定义 union dt int a;char b;double c;data; 以下叙述中错误的是【 】。(分数:1.00)A.data 的每个成员起始地址都相同B.变量 data 所占的内存字节数与成员 c 所占字节数相等C.程序段 data.a=5;printf(“%f/n“,data.c);输出结果为 5.000000 D.D解析:union 是表示共用体的
25、关键字,成员 a,b,c 共占用同一个内存空间, data 的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量 data 所占的内存字节数与成员 c 所占字节数相等:执行“data.a=5;printf(“%f/n“,data.c);“printf 函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数故 C 是错误的。 10.用 C 语言编写的代码程序( )。(分数:1.00)A.可立即执行B.是一个源程序 C.经过编译即可执行D.经过编译解释才能执行解析:11.与十进制数 200 等值的十六进制数为( )。(分数:1.00)A.A
26、8B.A4C.C8 D.C4解析:12.有以下程序 void change(int k)k0=k5; main() int x10=l,2,3,4,5,6,7,8,9,10,n=0; while(n0 | Esex);D.scanf(“d“,ps-age); 解析:在 scanf 函数中,第二个参数应该表示为地址变量,而选项 D)只是一个具体的值,而并不是一个地址值。27.若要求定义具有 10 个 int 型元素的一维数组 a,则以下定义语句中错误的是【 】。(分数:1.00)A.#define N 10B.#define n 5int aN; int a2*n;C.int a5+5;D.in
27、t n=10,an. 解析:在选项 D)中,n 是一个整型的变量。C 语言规定,在一维数组的定义中,其下标只能是常量表达式,不能包含变量。28.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;bb) return(a); else return(b); main( ) int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%d/n“, r); 程序运行后的输出结果是( )。 (分数:1.00)A.3B.6C.8D.12 解析:31.有以下程序 main( ) int a=
28、5,b=4,c=3,d=2; if(abc) printf(“%d/n“,d); else if(c-1=d)=1) printf(“%d/n“,d+1); else printf(“%d/n“,d+2); 执行后输出的结果是( )。 (分数:1.00)A.2B.3 C.4D.编译时有错,无结果解析:32.下列关于 C 语言用户标识符的叙述中正确的是( )。(分数:1.00)A.用户标识符中可以出现下划线和中划线(减号)B.用户标识符中不可以出现中划线,但可以出现下划线 C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头D.用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的
29、开头解析:33.设变量 X 和 Y 均已正确定义并赋值。以下 if 语句中,在编译时将产生错误信息的是【 】。(分数:1.00)A.if(X+);B.if(Xy struct node *next; (48) CreatList(char *s) struct node *h,*p,*q); h=(struct node *)malloc(sizeof(struct node); p=q=h; while(*s!=/0) p=(struct node *)malloc(sizeof(struct node); p-data= (49) ; q-next=p; q= (50) ; s+; p-n
30、ext=/0; return h; main( ) char str =“link list“; struct node *head; head=CreatList(str); . (分数:1.00)A.char *B.struct nodeC.struct node* D.char解析:48.下列对于线性链表的描述中正确的是【 】。(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的 解析:在链式存储结构中,存储
31、数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来来确定的。 49.以下叙述中正确的是【 】。(分数:1.00)A.预处理命令行必须位于 C 源程序的起始位置B.在 C 语言中,预处理命令行都以“#“开头 C.每个 C 程序必须在开头包含预处理命令行#includeD.C 语言的预处理不能实现宏定义和条件编译的功能解析:预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。只是其中的一个文件,并非每次预处理命令都用此文件。50.以下不合法的用户标识符是【 】。(分
32、数:1.00)A.j2KEYB.DoubleC.4d D.8解析:C 语言规定,标志符由字母、数字或下划线组成,它的第一个字符必须是字母或下划线。51.以下不能定义为用户标识符的是【 】。(分数:1.00)A.MainB.0C.intD.sizeof 解析:C 语言规定标识符只能由字母;数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。注意:大写字母和小写字母被认为是两个不同的字符。A 中 Main 与主函数名 main 不同。 52.设有定义:float a=2,b=4,h=3;,以下 C 语言表达式与代数式 1/2(a+b) 计算结果不相符的是( )。(分数:1.00)A.(a+
33、b)*h/2B.(1/2)*(a+b)*hC.(a+b)*h*1/2D.h/2*(a+b) 解析:53.若有定义 int x=0,*p= 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。 (分数:1.00)A.double myadd(double a,b); B.double myadd(double,double);C.double myadd(double b,double a);D.double myadd(double x,double y);解析:56.有以下程序 #include void f(char P10,int n)*字符串从小到大
34、排序* char t10;int i,j; for(i=0;iO)strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t); main() char p510=“abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“; f(P,5); printf(“dn“,strlen(p0); 程序运行后的输出结果是【 】。 (分数:1.00)A.2B.4C.6 D.3解析:本题中函数 f()利用选择法对字符串数组 p 中的字符串按从小到大排序,字符串比较的方法是:依次对 S1 和 s2 所指字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符(
35、ASCII 码值)决定所在串的大小,因此最后在 p0中存储的是最小的字符串是“aabdfg“。最后用 strlen()函数求得该字符串的长度为 6。57.有以下程序 main( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7 B.6C.8D.无确定值解析:58.算法具有五个特性,以下选项中不属于算法特性的是【 】。(分数:1.00)A.有穷性B.简洁性 C.可行性D.确定性解析:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的基本特性。 59.数字字符 0 的 ASC值为 48,若有以下程序 main() char a=1
36、,b=2; printf(“%c“,b+); printf (“%d/n“,b-a); 程序运行后的输出结果是【 】。(分数:1.00)A.32B.502C.22 D.2,50解析:执行语句“printf(“%c,“,b+);“后,b 的值变成字符 3,执行“printf(“%d/n“,b-a);“,即3-1。 60.有以下程序 main() int x32=0,i; for(i=0;i,则输出结果为【 】。 (分数:1.00)A.2 0 0B.2 0 4 C.2 4 0D.2 4 6解析:语句 x32=0表示对二维数组的所有元素赋初值 0,而循环 for(i=0;i=2)m=fun(t,n-
37、1);return m; main2 int a=11,4,6,3,8,2,3,5,9,2; printf(“dn“,fun(a,10); (分数:2.00)填空项 1:_ (正确答案:11)解析:此题涉及函数的调用和 if 语句。程序先执行第二个 if 语句,然后在执行第一个 if 语句,最后用:return 返回数值。65.有以下程序: int sub(int n) return(n/10+n%10); main1 int x,y; scanf(“%d“, t=a; a=b; b=t; main2 intx=3,y=5,* p=x,* q=y; swap(p,q); prinff(“%d
38、%d/n“, *p, *q); (分数:2.00)填空项 1:_ (正确答案:3 5)解析:本题 swap-|_|-函数的功能是实现两个数的交换,但它为无返回值型。74.以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb,b+ca。请填空。 main1 float a,b,C; scanf(“fff“, if (c=a+b) printf(“yes/n“); else printf(“no/n“); (分数:2.00)填空项 1:_ (正确答案:y
39、es)解析:77.以下程序的功能是调用函数 fun 计算:m=1-2+3-4+9-10,并输出结果。请填空。 int fun( int n) int m=0,f=1,i; for(i=1; i=n; i+) m+=i*f; f= 1; return m; main( ) printf(“m=%d/n“, 2); (分数:2.00)填空项 1:_ (正确答案:-f)解析:78.以下 sstrcpy1 函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+= 2); ma
40、in( ) char str1100,str2 =”abcdefgh”; sstrcpy(str1,str2); printf(“%s/n”,str1); (分数:2.00)填空项 1:_ (正确答案:*t+)解析:79.某微型机的运算速度为 2MIPS,则该微型机每秒执行 1 条指令。(分数:2.00)填空项 1:_ (正确答案:2000000)解析:MIPS 的意思为每秒百万条指令(Million Instructions Per Second)。80.以下程序运行后的输出结果是 1。 main2 int x=0210; printf(“%X/n“,x); (分数:2.00)填空项 1:_ (正确答案:88)解析:由于八进制数以 0 开头,所以 0210 表示八进制数;“%X“的格式指以十六进制形式输出,输出十六进制的“a-f“时以大写字母输出。所以本题可以先将 0210 化为十进制,然后再化为十六进制。