1、国家计算机二级(C)69 及答案解析(总分:3480.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:3000.00)1.在长度为 n 的有序线性表中进行二分查找,最坏情况下需要比较的次数是(分数:60.00)A.O(n)B.O(n2)C.O(log2n)D.O(nlog2n)2.十六进制数 100 转换为十进制数为( )。(分数:60.00)A.256B.512C.1024D.643.下列叙述中正确的是【 】。(分数:60.00)A.软件测试的主要目的是发现程序中的错误B.软件测试的主要目的是确定程序中错误的位置C.为了提高软件测试的效
2、率,最好由程序编制者自己来完成软件测试的工作D.软件测试是证明软件没有错误4.在 Windows 环境下,单击当前窗口中的按钮“ (分数:60.00)A.将当前应用程序转为后台运行B.退出 Windows 后再关机C.终止当前应用程序的运行D.退出 Windows 后重新启动计算机5.执行以下程序段后,w 的值为 int w=A,x=14,y=15; w=(x| y)printf(“%d/n”,strlen(p4); 执行后输出结果是( )。 (分数:60.00)A.2B.3C.4D.521.设函数 fun 的定义形式为: void fun(char ch,float x) 则以下对函数 fu
3、n 的调用语句中,正确的是【 】。 (分数:60.00)A.fun(“abc“,3.0);B.t=fun(D,16.5);C.fun(65,2.8);D.fun(32,32);22.有以下程序: int f(int n) if(n =1)return 1; else return f(n-1)+1; main( ) int i,j=0; for(i=1;i3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:60.00)A.4B.3C.2D.123.有以下程序 void f(int b ) int i; for(i=2;iA.1,2,3,4,
4、5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10,C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,24.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是【 】。(分数:60.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMSD.没有任何关系25.有以下程序: #define P3 void F(int x)return(P*x*x); main() printf(“%d/n“,F(3+5); 程序运行后的输出结果是【 】。
5、(分数:60.00)A.192B.29C.25D.编译出错26.有以下程序 main( ) char *s =“one“,“two“,“three“,*p; p=s1; printf(“%c,%s/n“,*(p+1),s0); 执行后输出结果是( )。 (分数:60.00)A.n,twoB.t,oneC.w,oneD.o,two27.若有定义 int x=0,*p=则以下选项中正确的是 (分数:60.00)A.if(s1s2)S;B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcmp(s1,s2)0)S;32.以下叙述中正确的是【 】。(分数
6、:60.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间33.以下关于宏的叙述中正确的是(分数:60.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏替换没有数据类型限制D.宏调用比函数调用耗费时间34.有以下程序 int fun1(double a)return a*=a; int flun2(double X,double Y) double a=0,b=0; a=funl(X);b=funl(Y);return(int)(a+b); main() double W;w=f
7、un2(1.1,2.0); 程序执行后变量 W 中的值是【 】。 (分数:60.00)A.5.21B.5C.5D.035.在 Windows 环境下,粘贴按钮是( )。(分数:60.00)A.B.C.D.36.以下关于逻辑运算符两侧运算对象的叙述中正确的是【 】。(分数:60.00)A.只能是整数 0 或 1B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.可以是任意合法的表达式37.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;b-10printf(“%d/n”,strlen(p4); 执行后输出结果是
8、( )。 (分数:60.00)A.2 B.3C.4D.5解析:21.设函数 fun 的定义形式为: void fun(char ch,float x) 则以下对函数 fun 的调用语句中,正确的是【 】。 (分数:60.00)A.fun(“abc“,3.0);B.t=fun(D,16.5);C.fun(65,2.8);D.fun(32,32); 解析:对有参函数进行调用时,实参与形参的类型应相同或赋值兼容。由于整型数据与字符型数据可以通用,所以实参“32“与形参“ch“的类型是一致的:又因为整型变量给浮点型变量赋值是相兼容的,所以选项 D是正确的调用。 22.有以下程序: int f(int
9、n) if(n =1)return 1; else return f(n-1)+1; main( ) int i,j=0; for(i=1;i3;i+) j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是( )。 (分数:60.00)A.4B.3 C.2D.1解析:第一次调用 f( )函数,返回值为 1,第二次调用 f( )函数,牵涉到函数的递归调用,返回值为 2。23.有以下程序 void f(int b ) int i; for(i=2;iA.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10, C.1,2,3,4,10,1
10、2,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,解析:在 main()中,f(a)语句的作用是对数组 a10中从 a2到 a5的各个数字乘以 2,所以数组 a10中的数字就变成了1,2,6,8,10,12,7,8,9,10,最后在屏幕上输出。24.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是【 】。(分数:60.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMS D.没有任何关系解析:DB 即数据库(Database),是统一管理的相关数据的集合;DBMS 即数据库管理系
11、统(Database Management System),是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问 DB 的方法;DBS 即数据库系统(Database System)由如下 5 部分组成,数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一硬件平台(硬件)、系统平台之二软件平台(软件)。25.有以下程序: #define P3 void F(int x)return(P*x*x); main() printf(“%d/n“,F(3+5); 程序运行后的输出结果是【 】。(分数:60.00)A.192B.29C.25D.编译出错 解析:ret
12、urn 语句用于从被调函数带回一个函数值。void 关键字表示“无类型“,即不需要从被调函数中带回函数值,所以不需要 return 语句,故编译时出错。 26.有以下程序 main( ) char *s =“one“,“two“,“three“,*p; p=s1; printf(“%c,%s/n“,*(p+1),s0); 执行后输出结果是( )。 (分数:60.00)A.n,twoB.t,oneC.w,one D.o,two解析:27.若有定义 int x=0,*p=则以下选项中正确的是 (分数:60.00)A.if(s1s2)S;B.if(strcmp(s1,s2)S;C.if(strcmp
13、(s2,s1)0)S;D.if(strcmp(s1,s2)0)S; 解析:32.以下叙述中正确的是【 】。(分数:60.00)A.预处理命令行必须位于源文件的开头B.在源文件的一行上可以有多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间 解析:通常,预处理命令位于源文件的开头,也可以写在函数与函数之间;不能在一行上写多条预处理命令;宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。 33.以下关于宏的叙述中正确的是(分数:60.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏替换没有数据类型限制 D.宏调用比函数调用
14、耗费时间解析:宏名可以大写,也可以小写。其有效范围为定义命令之后到本源文件结束。宏的调用是字符的替换,没有数据类型限制。34.有以下程序 int fun1(double a)return a*=a; int flun2(double X,double Y) double a=0,b=0; a=funl(X);b=funl(Y);return(int)(a+b); main() double W;w=fun2(1.1,2.0); 程序执行后变量 W 中的值是【 】。 (分数:60.00)A.5.21B.5C.5 D.0解析:题中变量 w 的定义为 double 型,函数 fun2()的定义为 i
15、nt 型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。35.在 Windows 环境下,粘贴按钮是( )。(分数:60.00)A.B.C.D. 解析:选项 A)是打印,选项 B)是剪切,选项 C)是复制。36.以下关于逻辑运算符两侧运算对象的叙述中正确的是【 】。(分数:60.00)A.只能是整数 0 或 1B.只能是整数 0 或非 0 整数C.可以是结构体类型的数据D.可以是任意合法的表达式 解析:逻辑运算符两侧的运算对象可以是任意类型的数据。C 语言最终以非 0 或 O 来判定它 ffj 属于“真“(用 l 表示)或“假“(用 0 表示)。37.若有如下程序段,其中 s、a、
16、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;b=c;b+) s=s+1; 则与上述程序段功能等价的赋值语句是( )。 (分数:60.00)A.s=a+b;B.s=a+c; C.s=s+c;D.s=b+c;解析:38.已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ASCII 码是 97。以下不能将变量 C 中的大写字母转换为对应小写字母的语句是【 】。(分数:60.00)A.C=(C 一A)26+aB.C=C+32C.C=C-A+aD.C=(A+C)26-a 解析:C 语言中,字符数据参加运算时,实际上是其 ASCII 码参与计算
17、。大写字母的 ASCII 码比其对应的小写字母的 ASCII 码小 32。因此要将大写字母转化为小写字母只需将其加上 32 即可。所以选项 B)、C)都符合条件,因为变量 c 中存储的是大写字母,所以“C-A“的值一定小于 26,故选项 A)与选项 C)的含义相同。故本题答案为 D)。39.以下选项中可作为 C 语言合法常量的是【 】。(分数:60.00)A.-80 B.-080C.-8e1.0D.-80.0e解析:C 语言的常量分为整型常量、实型常量和字符型常量。选项 A 属于实型常量中的十进制小数形式的表示法,是合法的。 40.下列叙述中正确的是( )。(分数:60.00)A.计算机病毒只
18、感染可执行文件B.计算机病毒只感染文本文件C.计算机病毒只能通过软件复制的方式进行传播D.计算机病毒可以通过读写磁盘或网络等方式进行传播 解析:41.数据流图中带有箭头的线段表示的是(分数:60.00)A.控制流B.事件驱动C.模块调用D.数据流 解析:在数据流图中,矩形表示数据的外部实体,圆角的矩形表示变换数据的处理逻辑,双横线表示数据的存储,箭头表示数据流。42.以下叙述正确的是( )。(分数:60.00)A.C 语言比其他语言高级B.C 语言可以不用编译就能被计算机识别执行C.C 语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D.C 语言出现的最晚、具有其他语言的一切优点解析
19、:43.下列叙述中错误的是【 】。(分数:60.00)A.一个 C 语言程序只能实现一种算法 B.C 程序可以由多个程序文件组成C.C 程序可以由一个或多个函数组成D.一个 C 函数可以单独作为一个 C 程序文件存在解析:一个 C 程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个 C 语言程序可以实现多种算法。44.对存储器按字节进行编址,若某存储器芯片共有 10 根地址线,则该存储器芯片的存储容量为( )。(分数:60.00)A.1KB B.2KBC.4KBD.8KB解析:45.已有定义:int i,a10,*p;,则合法的赋值语句是( )。(分数:60.00)A.p=100;
20、B.p=a5;C.p=a2+2;D.p=a+2; 解析:46.有以下程序: main( ) int a=7,b=8,*p,*q,*r; p=q= r=p; p=q;q=r; printf(“%d,%d,%d,%d/n“,*p,*q,a,b); 程序运行后的输出结果是( )。 (分数:60.00)A.8,7,8,7B.7,8,7,8C.8,7,7,8 D.7,8,8,7解析:47.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )(分数:60.00)A.char s10=”abcdefg”;B.char t =”abcdefg”,*s=t;C.char s10;s=”abcdefg
21、”; D.char s10;strcpy(s,”abcdefg”);解析:48.有以下程序: main( ) char a,b,c,d; scanf(“%c,%c,%d,%d“, printf(“c,%c,%c,%c/n“,a,b,c,d); 若运行时从键盘上输入:6,5,65,66。则输出结果是( )。(分数:60.00)A.6,5,A,B B.6,5,65,66C.6,5,6,5D.6,5,6,6解析:49.若整型变量 a、b、c、d 中的值依次为 1、4、3、2。则条件表达式 ab?a:cd?c:d 的值是【 】。(分数:60.00)A.1 B.2C.3D.4解析:条件表达式的一般形式为
22、:表达式 1?表达式 2:表达式 3 本题先求的是 ab 的值,为真,所以整个表达式“ab?a:cd?c:d 的值为 a 的值 1。 50.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为【 】。(分数:60.00)A.n+l B.n-1C.2nD.n2解析:对于任何一棵二叉树 T,如果其终端结点(叶子)数为 n1,度为 2 的结点数为 n2,则 n1=n2+1。所以该二叉树的叶子结点数等于 n+1。二、填空题(每空 2 分,共 40 分)(总题数:12,分数:480.00)51.有以下程序 main( ) int t=1,i=5; for(;i=0;i-) t*=i; pri
23、ntf(“%d/n”,t); 执行后输出结果是 1。 (分数:40.00)填空项 1:_ (正确答案:0)解析:52.已有定义如下: struct node int data; struct node *next; *p; 以下语句调用 malloc 函数,使指针 p 指向一个具有 struct node 类型的动态存储空间。请填空。 p = (struct node *)malloc( 1); (分数:40.00)填空项 1:_ (正确答案:sizeof(struct node))解析:53. 1 的任务是诊断和改正程序中的错误。(分数:40.00)填空项 1:_ (正确答案:程序调试)解析
24、:在完成对程序的测试之后将进行程序调试。程序调试的任务是诊断和改正程序中的错误。54.测试用例包括输入值集和 1 值集。(分数:40.00)填空项 1:_ (正确答案:输出)解析:软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。55.有以下程序 void f( int y,int *x) y=y+*x; *x=*x+y; main( ) int x=2,y=4; f(y, printf(“%d
25、%d/n”,x,y); 执行后输出的结果是 1。 (分数:40.00)填空项 1:_ (正确答案:8 2)解析:56.执行以下程序后的输出结果是 1。 main2 int a=10; a=(3*5,a+4);printf(“a=dn“,a); (分数:40.00)填空项 1:_ (正确答案:a=14)解析:本题考查的是的表达式的优先级问题。先计算表达式 3*5=15,再计算 a+4=14,将数据 14 赋值给 a,根据 printf-|_|-函数内的输出格式控制串,最后的输出结果应为“a=14“。57.以下程序段的输出结果是 1。 int i=9; printf(“%o/n“,i); (分数:
26、40.00)填空项 1:_ (正确答案:11)解析:58.数据结构分为线性结构和非线性结构,带链的队列属于 1。(分数:40.00)填空项 1:_ (正确答案:线性结构)解析:与栈类似,队列也是线性表,可以采用链式存储结构。所以带链的队列属于线性结构。59.以下程序运行时,若从键盘输入:10 20 30回车,输出的结果是 1。 #includestdio.h main2 int i=0,j=0,k=0; scanf(“%d%*d%d“, printf(“%d%d%d/n“,i,j,k); (分数:40.00)填空项 1:_ (正确答案:10300)解析:在 scanf 格式控制符中,如果在%后
27、有一个“*“附加说明符,表示跳过它指定的列数。本题中“%d%*d“表示将 10 赋给 i,%*d 表示读入整数但不赋给任何变量,然后再读入整数 30 赋给变量 j,那么变量 k 并没有重新赋值,仍为初始值 0。所以输出的结果为 10300。 60.以下程序运行后的输出结果是 1。 main2 int a=1,b=2,c=3; if(c=a) ,printf(“%d/n“,c) ; else printf(“%d/n“,b) ; (分数:40.00)填空项 1:_ (正确答案:1)解析:此题需特别注意的是 if 的判断条件是“c=a“,而不是“c=a“,由于 a=1,故条件 c=1 为真:所以输出的c 的值为 1。 61.以下函数的功能是计算 (分数:40.00)填空项 1:_ (正确答案:/i 或*1.O/i 或 * l/i 或 * (1.O/i) 或 /(double)i)解析:62.诊断和改正程序中错误的工作通常称为 1。(分数:40.00)填空项 1:_ (正确答案:程序调试)解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要再开发阶段。