1、国家计算机二级(C)86 及答案解析(总分:3480.00,做题时间:120 分钟)一、选择题(1-10 题每题 2分,11-50 题(总题数:50,分数:3000.00)1.以下合法的字符型常量是【 】。(分数:60.00)A.x13B.081C.65D.“n“2.一个算法应该具有“确定性”等 5个特性,下面对另外 4个特性的描述中错误的是( )。(分数:60.00)A.有零个或多个输入B.有零个或多个输出C.有穷性D.可行性3.设有定义:intk=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是【 】。(分数:60.00)A.k+B.k+=lC.+kD.k+l4.设有以下定义和语
2、句 char str20=“Program“,*p; p=str; 则以下叙述中正确的是【 】。 (分数:60.00)A.*p与 str0的值相等B.str与 p的类型完全相同C.str数组长度和 p所指向的字符串长度相等D.数组 str中存放的内容和指针变量 p中存放的内容相同5.以下对结构体类型变量 td的定义中,错误的是【 】。(分数:60.00)A.virtual void vf()0;B.void vf(int)0;C.virtual int vf(int);D.virtual void vf(int) 6.在 C语言中,函数返回值的类型最终取决于【 】。(分数:60.00)A.函数
3、定义时在函数首部所说明的函数类型B.return语句中表达式值的类型C.调用函数时主调函数所传递的实参类型D.函数定义时形参的类型7.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(分数:60.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参8.有以下程序: main( ) int x=3, y=2, z=1; printf(“%d/n“,x/y 程序运行后的输出结果是( )。 (分数:60.00)A.3B.2C.1D.09.有下列程序段: char ch;int k; ch=a;k=12;
4、 printf(“%c,%d,“,ch,ch,k); printf(“k=%d/n“,k); 已知字符 a的 ASCII十进制代码为 97,则执行上述程序段后输出结果是( )。 (分数:60.00)A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=1210.有以下程序: #include stdio.h main() char c1=1,c2=2; c1=getchar();c2=getchar();putchar(c1);putchar(c2); 当运行时输入 a回车后,以下叙述正确的是【 】。 (分
5、数:60.00)A.变量 c1被赋予字符 a,c2被赋予回车符B.程序将等待用户输入第 2个字符C.变量 c1被赋予字符 a,c2中仍是原有字符 2D.变量 c1被赋予字符 a,c2中将无确定值11.若有以下定义和语句 union data int i; char C; float f;X; int Y; 则以下语句正确的是【 】。 (分数:60.00)A.x=10.5;B.x.C=101:C.Y=x;D.printf(“dn“,x);12.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为【 】。(分数:60.00)A.n+lB.n-1C.2nD.n213.若有以下说明和语句,in
6、t c45,(*p)5;p=c; 能正确引用 c数组元素的是( )。 (分数:60.00)A.p+1B.*(p+3)C.*(p+1)+3D.*(p0+2)14.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为【 】。(分数:60.00)A.log2nB.n/2C.nD.n+115.有以下程序: struct STU char name10;int num;float TotalScore; void f(struct STU *p) struct STU s2=“SunDan“,20044,550,“Penghua“,20045,537,*q=s; +p;+q; *p=*q;
7、main() struct STU s3=“YangSan“,20041,703,“LiSiGuo“,20042,580; f(s); printf(“%s%d%3.0f/n“,s1.name,s1.num,s1.TotalScore); 程序运行后的输出结果是【 】。 (分数:60.00)A.SunDan 20044 550B.Penghua 20045 537C.LiSiGuo 20042 580D.SunDan 20041 70316.用 8位无符号二进制数能表示的最大十进制数为( )。(分数:60.00)A.127B.128C.255D.25617.在长度为 64的有序线性表中进行顺序
8、查找,最坏情况下需要比较的次数为【 】。(分数:60.00)A.63B.64C.6D.718.对下列二叉树进行前序遍历的结果为【 】。 (分数:60.00)A.DYBEAFCZXB.YDEBFZXCAC.ABCDEFXYZD.ABCDEFXYZ19.若有以下说明和定义 typedefint * INTEGER; INTEGER p,* q; 以下叙述正确的是( )。 (分数:60.00)A.p是 int型变量B.p是基类型为 int的指针变量C.q是基类型为 int的指针变量D.程序中可用 INTEGER代替 int类型名20.有以下程序 main( ) int x8=8,7,6,5,0,0,
9、*s; s=x+3; printf(“%d/n“,s2); 执行后输出结果是( )。 (分数:60.00)A.随机值B.0C.5D.621.有以下程序 main( ) char k; int I; for(i=1;i3;i+) scanf(“%c”, switch(k) case 0: printf(“another/n”); case 1: printf(“number/n”); 程序运行时,从键盘输入:01,程序执行后的输出结果是( )。 (分数:60.00)A.another numberB.another number anotherC.another number numberD.n
10、umber number22.有以下程序 void fun2(char a,char b)printf(“cc“,a,b); char a=A,b=B; void fun1() a=C; b=D; main() fun1(); printf(“cc“,a,b); fur2(E,F); 程序的运行结果是【 】。 (分数:60.00)A.C D E FB.A B E FC.A B C DD.C D A B23.有三个关系 R、S 和 T如下: (分数:60.00)A.并B.自然连接C.笛卡尔积D.交24.有以下程序: float f1(float n) return n*n; float f2(f
11、loat n) return 2*n; main() float(*p1)(float),(*p2)(float),(*t)(float),y1,y2; p1:f1; p2=f2; y1=p2(p1(2.0); t=p1; p1=p2; p2=t; y2=p2(p1(2.0); printf(“%3.0f,%3.0f/n“,y1,y2); 程序运行后的输出结果是【 】。 (分数:60.00)A.8, 16B.8, 8C.16, 16D.4, 825.若以下选项中的变量已正确定义,则正确的赋值语句是( )。(分数:60.00)A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+
12、2=3;26.若有以下程序: main( ) int k=2,i=2,m; m=(k+=i*=k);printf(“%d,%d/n“,m,i); 执行后的输出结果是( )。 (分数:60.00)A.8,6B.8,3C.6,4D.7,427.设 a和 b均为 double型变量,且 a=5.5,b=2.5,则表达式(int)a+b/b 的值是( )。(分数:60.00)A.6.500000B.6C.5.500000D.6.00000028.有以下程序: void swapl(int c0,int c1) int t; t=c00; c00=c10;c10=t; void swap2(int *c
13、0,iht *c1) int t; t=*c0; *c0=*c1; *c1=t; main() int a2=3,5,b2=3,5; swapl(a,a+1); swap2(,则以下选项中各程序段执行后,x 的值不为 3的是( )。(分数:60.00)A.if (ca) x=1; else if (ba) x=2; else x=3;B.if (a3) x=3; else if (ba) x=2; else x=1;C.if (aD.if (ab) x=b; if (bc) x=c; if (ca) x=a;30.以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串
14、的首地址 #include stdio.h #include string.h char *scmp(char *s1, char *s2) if(strcmp(s1,s2)A.abcdB.abbaC.abcD.abca31.要求以下程序的功能是计算:s=1+1/2+1/3+1/10 main( ) int n; float s; s=1.0; for(n=10;n1;n-) s=s+1/n; printf(“%6.4f/n“,s); 程序运行后输出结果错误,导致错误结果的程序行是( )。 (分数:60.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n;D.print
15、f(“%6.4f/n“,s);32.下列带有通配符的文件名中,能表示文件“ABC.TXT”的是( )。(分数:60.00)A.*BC.?B.A?.*C.?BC.*D.?.?33.以下选项中可作为 C语言合法常量的是【 】。(分数:60.00)A.-80B.-080C.-8e1.0D.-80.0e34.有以下程序 int *f(int *x,int *y) if(*x*y) return x; else return y; main( ) int a=7,b=8,*p,*q,*r; p= q= r=f(p,q); printf(“%d,%d,%d/n“,*p,*q,*r); 执行后输出结果是(
16、)。 (分数:60.00)A.7,8,8B.7,8,7C.8,7,7D.8,7,835.以下叙述中错误的是【 】。(分数:60.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界“的出错信息D.可以通过赋初值的方式确定数组元素的个数36.已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量/101是( )。(分数:60.00)A.字符 AB.字符 aC.字符 eD.非法的常量37.下
17、列叙述中错误的是( )。(分数:60.00)A.在程序中凡是以“#”开始的语句行都是预处理命令行B.预处理命令行的最后不能以分号表示结束C.#define MAX是合法的宏定义命令行D.C程序对预处理命令行的处理是在程序执行的过程中进行的38.有以下程序: main( ) int m=3,n=4,x; x=-m+; x=x+8/+n; printf(“%d/n“,x); 程序运行后的输出结果是( )。 (分数:60.00)A.3B.5C.-1D.-239.有以下程序: #includestring.h main( ) char *p=“abcde/0ghjik/0“; printf(“%d/n
18、“,strlen(p) ); 程序运行后的输出结果是( )。 (分数:60.00)A.12B.15C.6D.540.有以下程序 void f(int*q) int i=0; for(;iA.2,2,3,4,5,B.6,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,41.目前,计算机病毒扩散最快的途径是( )。(分数:60.00)A.通过软件复制B.通过网络传播C.通过磁盘拷贝D.运行游戏软件42.有以下程序 main() int i; for(i=1;i1;n-) s=s+1/n; printf(“%6.4f/n“,s); 程序运行后输出结果错误,导致错误结果的程序行是( )
19、。 (分数:60.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n; D.printf(“%6.4f/n“,s);解析:32.下列带有通配符的文件名中,能表示文件“ABC.TXT”的是( )。(分数:60.00)A.*BC.?B.A?.*C.?BC.* D.?.?解析:33.以下选项中可作为 C语言合法常量的是【 】。(分数:60.00)A.-80 B.-080C.-8e1.0D.-80.0e解析:C 语言的常量分为整型常量、实型常量和字符型常量。选项 A属于实型常量中的十进制小数形式的表示法,是合法的。 34.有以下程序 int *f(int *x,int *y)
20、if(*x*y) return x; else return y; main( ) int a=7,b=8,*p,*q,*r; p= q= r=f(p,q); printf(“%d,%d,%d/n“,*p,*q,*r); 执行后输出结果是( )。 (分数:60.00)A.7,8,8B.7,8,7 C.8,7,7D.8,7,8解析:35.以下叙述中错误的是【 】。(分数:60.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界“的出错信息
21、 D.可以通过赋初值的方式确定数组元素的个数解析:在 C语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出“下标越界“的错误提示。 36.已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量/101是( )。(分数:60.00)A.字符 A B.字符 aC.字符 eD.非法的常量解析:字符,/101,所对应的八进制数为 101,转换成十进制数为 65。37.下列叙述中错误的是( )。(分数:60.00)A.在程序中凡是以“#”开始的语句行都是预处理命令行B.预处理命令行的最后不能以分号表示结束C.#define MAX是合法
22、的宏定义命令行 D.C程序对预处理命令行的处理是在程序执行的过程中进行的解析:预处理命令行是以“#”开始的语句,预处理命令行的最后不能以分号表示结束,预处理命令行。其中宏定义的字符替换的定义格式为:#define 标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。38.有以下程序: main( ) int m=3,n=4,x; x=-m+; x=x+8/+n; printf(“%d/n“,x); 程序运行后的输出结果是( )。 (分数:60.00)A.3B.5C.-1D.-2 解析:39.有以下程序: #includestring.h main( ) c
23、har *p=“abcde/0ghjik/0“; printf(“%d/n“,strlen(p) ); 程序运行后的输出结果是( )。 (分数:60.00)A.12B.15C.6D.5 解析:字符/0为字符串结束标识位。40.有以下程序 void f(int*q) int i=0; for(;iA.2,2,3,4,5,B.6,2,3,4,5, C.1,2,3,4,5,D.2,3,4,5,6,解析:调用函数 f()时,将数组 a的地址传递给了指针 q,此时 q指向的就是数组 a的第一个元素 a0。在5次循环过程中,q 始终指向 a0,因此 a0的值增加了 5。最后的输出结果为“6,2,3,4,5“。41.目前,计算机病毒扩散最快的途径是( )。(分数:60.00)A.通过软件复制B.通过网络传播 C.通过磁盘拷贝D.运行游戏软件解析:42.有以下程序 main() int i; for(i=1;imax 或 arow)col=max 或 max=arow)col 或 max)解析:第一个 for循环用于实现对矩阵的按行扫描,第二个 for循环用于实现对矩阵的按列扫描,且第 一个 if语句用于找出各行中的最大值并用 max保存,第二个 if语句用于找出这些最大值中的 最小值,并用 min保存。