1、计算机二级(C)53 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:60,分数:60.00)1.有以下程序: void f(int v , int w) int t; t=v;v=w;w=t; main( ) int x=1,y=3,z=2; if(xy) f(x,y); else if(yz) f(y,z); else f(x,z); printf(“%d,%d,%d/n”,x,y,z); 执行后输出结果是( )。 (分数:1.00)A.1,2,3B.3,1,2C.1,3,2D.2,3,12.有以下程序: main( )
2、unsigned int a; int b=-1; a=b; printf(“%u“,a); 程序运行后的输出结果是( )。 (分数:1.00)A.-1B.65535C.32767D.-327683.有以下程序: main( ) int s=0,a=1,n; scanf(“%d“, do s+=1; a=a-2; while(a!=n); printf(“%d/n“,s); 若要使程序的输出值为 2,则应该从键盘给 n 输入的值是( )。 (分数:1.00)A.-1B.-3C.-5D.04.设变量 X 和 Y 均已正确定义并赋值。以下 if 语句中,在编译时将产生错误信息的是【 】。(分数:1
3、.00)A.if(X+);B.if(Xyi3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:1.00)A.4B.3C.2D.19.有以下程序: struct STU char num10; float score3; main( ) struct STU s3=“20021“,90,95,85, “20022“,95,80,75, “20023“,100,95,90 ,*p=s; int i; float sum=0; for(i=0;i3;i+) sum=sum+p-scorei; printf(“%6.2f/n“,sum); 程序运行
4、后的输出结果是( )。(分数:1.00)A.260B.270C.280D.28510.设有如下关系表 (分数:1.00)A.T=RSB.T=RSC.T=RSD.T=R/S11.设有以下语句 int a=1,b=2,C; C=a(b0)y=1; else if(x= =0)y=0; else y=-1;B.y=0; if(x0)y=1; else if(xC.y = 0; if (x = 0) if (x0) y = 1; else y = -1;D.if ( x = 0) if ( x0)y = 1; else y = 0; else y = -1;30.下列叙述中正确的是( )。(分数:1.
5、00)A.C 语言中既有逻辑类型也有集合类型B.C 语言中没有逻辑类型但有集合类型C.C 语言中有逻辑类型但没有集合类型D.C 语言中既没有逻辑类型也没有集合类型31.两个或两个以上模块之间关联的紧密程度称为【 】。(分数:1.00)A.耦合度B.内聚度C.复杂度D.数据传输特性32.有以下程序: #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:1.00)A.28B.22C.16D.433.若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。(
6、分数:1.00)A.int *i=NULL; scanf(“%d“,i);B.float *f=NULL; *f=10.5;C.char t=m, *c= *c=D.long *L; L=/0;34.算法具有五个特性,以下选项中不属于算法特性的是【 】。(分数:1.00)A.有穷性B.简洁性C.可行性D.确定性35.对存储器按字节进行编址,若某存储器芯片共有 10 根地址线,则该存储器芯片的存储容量为( )。(分数:1.00)A.1KBB.2KBC.4KBD.8KB36.若有以下说明和定义 union dt int a;char b;double c;data; 以下叙述中错误的是【 】。(分
7、数:1.00)A.data 的每个成员起始地址都相同B.变量 data 所占的内存字节数与成员 c 所占字节数相等C.程序段 data.a=5;printf(“%f/n“,data.c);输出结果为 5.000000D.D37.有以下程序: main() int a,b,d=25; a=d/10%9; b=a printf(“%d,%d/n“,a,b); 程序运行后的输出结果是【 】。(分数:1.00)A.6,1B.2,1C.6,0D.2,038.有以下程序: main( ) int f1 (int x, int y) return xy?x:y; int f2 (int x, int y)
8、return xy?y:x; main( ) int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e; printf(“%d,%d,%d/n“,d,f,e); 执行后输出的结果是( )。 (分数:1.00)A.3,4,5B.5,3,4C.5,4,3D.3,5,439.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是( )。(分数:1.00)A.for(i=1,p=1;i0 | Eb) return(a); else return(b); main( ) int x=3,
9、 y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(“%d/n“, r); 程序运行后的输出结果是( )。 (分数:1.00)A.3B.6C.8D.1245.1MB 等于( )。(分数:1.00)A.1000 字节B.1024 字节C.10001000 字节D.10241024 字节46.有以下程序段 int a10=1,2,3,4,5,6,7,8,9,10,*p= b=p5; b 中的值是( )。 (分数:1.00)A.5B.6C.8D.947.在 Windows 环境下,单击当前应用程序窗口中的“关闭”按钮,其功能是( )。(分数:1.00)A.将当前应用
10、程序转为后台运行B.退出 Windows 后再关机C.退出 Windows 后重新启动计算机D.终止当前应用程序的运行48.有以下程序: int a=3; main( ) int s=0; int a=5;s+=a+; s+=a+; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:1.00)A.8B.10C.7D.1149.有以下程序 int a=4; int f(int n) int t=0;static int a=5; if(n2)int a=6;t+=a+; elseint a=7;t+=a+; return t+a+; main() int S=a,i=0
11、; for(;iA.24B.28C.32D.3650.有以下程序段: int n,t=1,S=0; scanf(“%d“, for(i=1;iyi3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:1.00)A.4B.3 C.2D.1解析:第一次调用 f( )函数,返回值为 1,第二次调用 f( )函数,牵涉到函数的递归调用,返回值为 2。9.有以下程序: struct STU char num10; float score3; main( ) struct STU s3=“20021“,90,95,85, “20022“,95,80,75
12、, “20023“,100,95,90 ,*p=s; int i; float sum=0; for(i=0;i3;i+) sum=sum+p-scorei; printf(“%6.2f/n“,sum); 程序运行后的输出结果是( )。(分数:1.00)A.260B.270 C.280D.285解析:给结构体数组赋韧值时,由于数组中的每个元素都是一个结构体,因此要将其成员的值依次放在一对 花括号中,以便区分各元素。s0=“20021“,90,95,85 ,s1= “20022,95,80,75 ,s2:“20023“, 100,95,90 。10.设有如下关系表 (分数:1.00)A.T=RS
13、B.T=RS C.T=RSD.T=R/S解析:从图中可以看出,关系 T 是关系 R 和关系 S 的简单合并,而合并的符号为 u,所以答案为 T=RUS。 11.设有以下语句 int a=1,b=2,C; C=a(b0)y=1; else if(x= =0)y=0; else y=-1;B.y=0; if(x0)y=1; else if(xC.y = 0; if (x = 0) if (x0) y = 1; else y = -1; D.if ( x = 0) if ( x0)y = 1; else y = 0; else y = -1;解析:30.下列叙述中正确的是( )。(分数:1.00)A
14、.C 语言中既有逻辑类型也有集合类型B.C 语言中没有逻辑类型但有集合类型C.C 语言中有逻辑类型但没有集合类型D.C 语言中既没有逻辑类型也没有集合类型 解析:31.两个或两个以上模块之间关联的紧密程度称为【 】。(分数:1.00)A.耦合度 B.内聚度C.复杂度D.数据传输特性解析:模块的独立程度可以由两个定性标准度量:内聚性和耦合性。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地弱,而要求模块的内聚程度尽可能的高。32.有以下程序: #define f(x) x*x main( ) int i; i=
15、f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (分数:1.00)A.28 B.22C.16D.4解析:33.若程序中已包含头文件 stdio.h,以下选项中,正确运用指针变量的程序段是( )。(分数:1.00)A.int *i=NULL; scanf(“%d“,i);B.float *f=NULL; *f=10.5;C.char t=m, *c= *c=D.long *L; L=/0; 解析:34.算法具有五个特性,以下选项中不属于算法特性的是【 】。(分数:1.00)A.有穷性B.简洁性 C.可行性D.确定性解析:有穷性、确定性、有零个或多个输入
16、、有一个或多个输出、有效性是算法的基本特性。 35.对存储器按字节进行编址,若某存储器芯片共有 10 根地址线,则该存储器芯片的存储容量为( )。(分数:1.00)A.1KB B.2KBC.4KBD.8KB解析:36.若有以下说明和定义 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 是表示共用体的关
17、键字,成员 a,b,c 共占用同一个内存空间, data 的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量 data 所占的内存字节数与成员 c 所占字节数相等:执行“data.a=5;printf(“%f/n“,data.c);“printf 函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数故 C 是错误的。 37.有以下程序: main() int a,b,d=25; a=d/10%9; b=a printf(“%d,%d/n“,a,b); 程序运行后的输出结果是【 】。(分数:1.00)A.6,1B.2,1 C.6,0D
18、.2,0解析:本题中“a=d/10%9;“的值为 25/10%9=2;“b=a int f2 (int x, int y) return xy?y:x; main( ) int a=4,b=3,c=5,d,e,f; d=f1(a,b); d=f1(d,c); e=f2(a,b); e=f2(e,c); f=a+b+c-d-e; printf(“%d,%d,%d/n“,d,f,e); 执行后输出的结果是( )。 (分数:1.00)A.3,4,5B.5,3,4C.5,4,3 D.3,5,4解析:39.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是( )。(分数:1.00)
19、A.for(i=1,p=1;i0 | Eb) 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 解析:45.1MB 等于( )。(分数:1.00)A.1000 字节B.1024 字节C.10001000 字节D.10241024 字节 解析:46.有以下程序段 int a10=1,2,3,4,5,6,7,8,9,10,*p= b=p5; b 中的值是( )。 (分数:1.0
20、0)A.5B.6C.8D.9 解析:47.在 Windows 环境下,单击当前应用程序窗口中的“关闭”按钮,其功能是( )。(分数:1.00)A.将当前应用程序转为后台运行B.退出 Windows 后再关机C.退出 Windows 后重新启动计算机D.终止当前应用程序的运行 解析:48.有以下程序: int a=3; main( ) int s=0; int a=5;s+=a+; s+=a+; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:1.00)A.8 B.10C.7D.11解析:本题考点是全局变量的作用范围。49.有以下程序 int a=4; int f(i
21、nt n) int t=0;static int a=5; if(n2)int a=6;t+=a+; elseint a=7;t+=a+; return t+a+; main() int S=a,i=0; for(;iA.24B.28 C.32D.36解析:本题考查的是变量的作用域问题。程序中定义了多个变量 a,全局变量、静态变量和局部变量分别在自己的作用域中参与运算。在 main()函数中首先执行“s+=f(0);“语句,而 f(0)返回值为 12,所以第一次循环结束 s 的值等于 4+12=16;第二次开始时,当执行 f(1)时,在 f(1)中执行“if(n2)int a=6;t+=a+;
22、“和“return t+a+;“这两条语句,所以 f(1)的返回值等于 12。再在主函数中执行“s+=f(1);“语句,也就是 16+12=28。50.有以下程序段: int n,t=1,S=0; scanf(“%d“, for(i=1;i1000/10*10=1000,1000/f(N)1000/(10*10)=10。66.以下程序运行后的输出结果是 1。 main2 char c; int n=100; float f=10; double x; x=f*=n/=(c=50); printf(“%d %f/n“,n,x); (分数:2.00)填空项 1:_ (正确答案:2)填空项 1:_
23、(正确答案:20.000000)解析:由于赋值运算符按照“自右而左“的结合顺序,题中赋值表达式“x=f*=n/=(c=50)“的求解步骤如下:首先,进行“n/=(c=50)“的运算,相当于 n=n/c=100/50=2;其次,进行“f*=n“的运算,相当于“f=f*n“,故f=20.000000;最后,得出 x 的值为 20.000000。 67.以下程序的输出结果是 1。 #include main2 prinff(“dn“,strlen(“IBMn0121“); (分数:2.00)填空项 1:_ (正确答案:9)解析:本题的字符串中共有 9 个字符,它们分别是I,B,M,n,0,1,2,1
24、,其中“n“表示换行,“表示反斜杠字符“。所以本题的最后输出结果为 9。68.以下程序运行后的输出结果是 1。 int f(int a,int n) if(n=1 return f(a,n-1)+an-1); else return 0; main2 int aa5=(1,2,3,4,5),s; s=f(aa,5); printf(“%d/n“,s); (分数:2.00)填空项 1:_ (正确答案:15)解析:本题通过递归调用实现了数组 aa 各元素之和,即 a4+a3+a2+a1+a0=15。 69.计算机软件分为系统软件和应用软件,操作系统属于 1。(分数:2.00)填空项 1:_ (正确
25、答案:系统软件)解析:计算机软件可分为系统软件和应用软件,操作系统属于系统软件。70.在数据库系统中,实现各种数据管理功能的核心软件称为 1。(分数:2.00)填空项 1:_ (正确答案:数据库管理系统(DBMS))解析:数据库管理系统(Database Management System)简称 DBMS,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。它是数据库系统的核心软件。71.以下程序的输出结果是 1。 int fun(int *x,int n) if(n=0) return x0; else return x0+fun(x+1,n-1); main2 int a=1,2,
26、3,4,5,6,7;printf(“dn“,fun(a,3); (分数:2.00)填空项 1:_ (正确答案:10)解析:本题考查的是函数的递归调用。在调用一个函数的过程中又直接或间接的调用该函数本身。第一次调用时,指针 x 指向的是 a0,n 的值为 3,每调用一次 n 自减 1,x 加 1,指向数组 a 中的下一个元素,当 n为 0 时函数开始返回,最后的返回值等于 a0+a1+a2+a3=10。72.以下程序的功能是将字符串 s 中的数字字符放入 d 数组中,最后输出 d 中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include
27、 stdio.h #include ctype.h main( ) char s80, d80; int i,j; gets(s); for(i=j=0;si!=/0;i+) if( 1) dj=si; j+; dj=/0; puts(d); (分数:2.00)填空项 1:_ (正确答案:si=0 struct node *next; *p; 以下语句调用 malloc 函数,使指针 p 指向一个具有 struct node 类型的动态存储空间。请填空。 p = (struct node *)malloc( 1); (分数:2.00)填空项 1:_ (正确答案:sizeof(struct no
28、de))解析:76.执行以下程序后,输出#号的个数是 1。 #include stdio.h main( ) int i,j; for(i=1; i5; i+) for(j=2; j=i; j+) putchar(#); (分数:2.00)填空项 1:_ (正确答案:6)解析:77.一个关系表的行称为 1。(分数:2.00)填空项 1:_ (正确答案:元组)解析:在关系中,水平方向的行称为元组,垂直方向的列称为属性,每一列有一个属性名。78.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:二叉树的性质 3:在任意
29、一棵二叉树中,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。本题中度为 2 的结点数为 18,故叶子结点数为 18+1=19 个。 79.若有语句 int i=-19,j=i%4; printf(“%d/n“,j); 则输出的结果是 1。 (分数:2.00)填空项 1:_ (正确答案:-3)解析:80.算法复杂度主要包括时间复杂度和 1 复杂度。(分数:2.00)填空项 1:_ (正确答案:空间)解析:程序在计算机上运行时所耗费的时间由下列因素所决定:程序运行时所需输入的数据总量,对源程序进行编译所需时间,计算机执行每条指令所需时间,程序中的指令重复执行的次数。前一条取决于实现算法的计算机欺、硬件系统,习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称作算法的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。