1、全国计算机等级考试等级考试真题库之选择题(18)1.下列叙述中对的的是A) 算法的效率只与问题的规模有关,而与数据的存储结构无关B) 算法的时间复杂度是指执行算法所需要的计算工作量C) 数据的逻辑结构与存储结构是一一相应的D) 算法的时间复杂度与空间复杂度一定相关 参考答案:B【解析】算法的效率与问题的规模和数据的存储结构都有关,A错误。算法的时间复杂度,是指执行算法所需要的计算工作量,B对的。由于数据元素在计算机存储空间中的位置关系也许与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一相应的,C错误。算法的时间复杂度和空间复杂度没有直接的联系,D错误。2.下列叙述中对的的是A) 线性表链式
2、存储结构的存储空间一般要少于顺序存储结构B) 线性表链式存储结构与顺序存储结构的存储空间都是连续的C) 线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D) 以上说法均错误 参考答案:C【解析】线性表的顺序存储结构具有如下两个基本特性:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此C对的。3.某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)A) 3B) 6C)
3、 8D) 12 参考答案:D【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,n0=1,则n2=0,总节点数为12=n0+n1+n2=1+n1+0,则度为1的节点数n1=11,故深度为12,选D。4.对长度为n的线性表作快速排序,在最坏情况下,比较次数为A) nB) n-1C) n(n-1)D) n(n-1)/2 参考答案:D【解析】快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+1=n(n-1)/2,选D。5.结构化程序设计中,下面对goto语句使用描述对的的是A) 严禁使用goto语句B) 使用goto语句程序
4、效率高C) 应避免滥用goto语句D) 以上说法均错误 参考答案:C【解析】结构化程序设计中,要注意尽量避免goto语句的使用,故选C。6.下面不属于软件测试实行环节的是A) 集成测试B) 回归测试C) 确认测试D) 单元测试 参考答案:B【解析】软件测试重要涉及单元测试、集成测试、确认测试和系统测试。7.下面不属于软件需求分析阶段重要工作的是A) 需求变更申请B) 需求分析C) 需求评审D) 需求获取 参考答案:A【解析】需求分析阶段的工作可概括为个方面:需求获取。需求分析。编写需求规格说明书。需求审评。8.一般情况下,当对关系R和S进行自然连接时,规定R和S具有一个或者多个共有的A) 记录
5、B) 行C) 属性D) 元组 参考答案:C【解析】自然连接是一种特殊的等值连接,它满足下面的条件:两关系间有公共域;通过公共域的等值进行连接,选C。9.A) 选择B) 差C) 交D) 并 参考答案:B【解析】关系T是关系R的一部分,并且是关系R去掉R和S相同的元素,符合差操作。10.有表达公司和职工及工作的三张表,职工可在多家公司兼职。其中公司C(公司号,公司名,地址,注册资本,法人代表,员工数),职工S(职工号,姓名,性别,年龄,学历),工作W(公司号,职工号,工资),则表W的键(码)为A) 公司号,职工号B) 职工号,工资C) 职工号D) 公司号,职工号,工资 参考答案:A【解析】由于职工
6、可以再多加公司兼职,表W的键(码)应为公司关系和职工关系的主码,即公司号和职工号。11.以下叙述中对的的是A) 每个后缀为.C的C语言源程序都可以单独进行编译B) 每个后缀为.C的C语言源程序都应当包含一个main函数C) 在C语言程序中,main函数必须放在其他函数的最前面D) 在C语言程序中,只有main函数才可单独进行编译 参考答案:A【解析】一个普通的C函数可以单独作为一个C的程序文献存在被包含到其他程序中,每个后缀为.C的C语言源程序都可以单独进行编译,所以BD错误main函数可以放在程序的开始,中间,最后,所以C错误12.C语言中的标记符分为关键字、预定义标记符和用户标记符,以下叙
7、述对的的是A) 关键字可用作用户标记符,但失去原有含义B) 预定义标记符可用作用户标记符,但失去原有含义C) 在标记符中大写字母和小写字母被认为是相同的字符D) 用户标记符可以由字母和数字任意顺序组成 参考答案:B【解析】关键字不可用作C语言的标记符,所以A错误在标记符中大写字母与小写字母作为不同字符解决,所以C错误标记符由下划线字母数字组成,且必须以下划线和字母开始,所以D错误13.以下选项中合法的常量是A) 9 9 9B) 2.7eC) 0XabD) 123E 0.2 参考答案:C【解析】A选项中具有非法的空格,所以错误C语言中十六进制常量以0x开头,所以C对的实型常量中e的前后必须均有数
8、据,且其后必须为整数,所以B和D错误14.C语言重要是借助以下哪种手段来实现程序模块化A) 定义函数B) 定义常量和外部变量C) 使用丰富的数据类型D) 使用三种基本结构语句 参考答案:A【解析】C语言程序的模块化通过函数来体现,所以选择A15.以下叙述中错误的是A) 数值型常量有正值和负值的区分B) 常量可以用一个符号名来代表C) 定义符号常量必须用类型名来设定常量的类型D) 常量是在程序运营过程中值不能被改变的量 参考答案:C【解析】数值型常量有整型常量,实型常量,不管是整型常量还是实型常量都有正值和负值之分,所以A对的在C语言的预编译解决中,可以用符号名代表一个常量,定义时不必指定常量类
9、型,所以C错误,B对的常量的定义就是常量是在程序运营过程中值不能被改变的量,所以D对的16.若有定义和语句: int a, b; scanf(%d,%d,&a,&b); 以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是A) 3,5,4B) 3,5C) 3,5,D) 3 ,5 参考答案:D【解析】scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配所以在3 和5之间必须输入逗号,不能有其他符号,才干保证a和b的对的赋值所以选择D17.C语言中char类型数据占字节数为A) 1B) 2C) 3D) 4 参考答案:A【解析】每个字符变量
10、被分派一个字节的内存空间。因此A选项对的。18.下列关系表达式中,结果为假的是A) 3 = 4B) (3 6D) (3 != 4) 2 参考答案:D【解析】B选项中,关系表达式(36即76,结果为真;A选项中,32即12,结果为假。因此D选项对的。19.若以下选项中的变量a, b, y均已对的定义并赋值,则语法对的的switch语句是A) switch( a*a+b*b ) default : break; case 3 : y=a+b; break; case 2 : y=a-b; break; B) switch( a+b ) case1 : case3 : y=a+b; break; c
11、ase0 : case4 : y=a-b; C) switch (a+9) case a : y=a-b; case b : y=a+b; D) switch a*b case 10 : y=a+b; default : y=a-b; 参考答案:A【解析】switch语句, 其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; B选项中,case1和case2有错误,; C选项中,case a和case b不对的,case后面应当跟常量表达式;D选项中,switch a*b
12、,有误。因此A选项对的。20.有以下程序 #include main() int a = -2, b = 0; while (a+ & +b) ; printf(%d,%dn, a, b ); 程序运营后输出结果是A) 0,2B) 0,3C) 1,3D) 1,2 参考答案:D【解析】本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。a+即a参与运算后,a的值再自增1。+b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项对的。21.设有定义: int x=0,
13、*p; 紧接着的赋值语句对的的是A) *p=NULL;B) p=NULL;C) p=x;D) *p=x; 参考答案:B【解析】题目中定义指针变量p,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。不允许把一个数赋予指针变量,被赋值的指针变量前不能再加*说明符,因此B选项对的。22.下列叙述中对的的是A) 空字符串不占用内存,其内存空间大小是0B) 两个连续的单引号()是合法的字符常量C) 可以对字符串进行关系运算D) 两个连续的双引号()是合法的字符串常量 参考答案:D【解析】字符串常量是由一对双引号括起的字符序列。A选项描述不对的。B选项描述的不够完善;字符常量占一个字节
14、的内存空间。D选项对的;字符常量是用单引号括起来的一个字符。C语言字符串比较不能直接用关系运算符进行对的比较。可以用字符串比较函数strcmp来实现,C选项是错误的;字符串常量占的内存字节数等于字符串中字节数加1。因此D选项对的。23.有以下程序 #include main() char a=H; a = ( a=A & a=A& a=Z)?(a+32):a;即将大写字母变为小写字母。因此B选项对的。24.有以下程序 #include int f( int x ); main() int a, b=0; for ( a=0; a3; a+=1 ) b += f(a); putchar(A+b)
15、; int f( int x ) return x*x+1; 程序运营后输出结果是A) ABEB) BCDC) BDID) BCF 参考答案:C【解析】在函数main()中,第一次执行for 循环时,b的值等于1,此时输出字母B;第二次执行for循环时,b的值等于3,此时输出字母D;第三次执行for循环时,b的值等于8,此时输出字母I。因此C选项对的。25.设有定义: int x23;则以下关于二维数组x的叙述错误的是A) 元素x0可看作是由3个整型元素组成的一维数组B) 数组x可以看作是由x0和x1两个元素组成的一维数组C) 可以用x0=0;的形式为数组所有元素赋初值0D) x0和x1是数组
16、名,分别代表一个地址常量 参考答案:C【解析】x0可看作是由3个整型元素组成的一维数组,不可以用语句x0=0;为数组所有元素赋初值0。因此C选项对的。26.设p是指针变量,语句p = NULL;等价于A) p = 0;B) p = ;C) p = ;D) p = 0; 参考答案:D【解析】p= NULL;等价p =0; 因此D选项对的。27.有以下程序 #include main() int a = 10,20,30,40 , *p=a, i ; for( i=0; i=3; i+ ) ai = *p; p+; printf(%dn, a2 ); 程序运营后的输出结果是A) 10B) 20C)
17、 30D) 40 参考答案:C【解析】由于指针变量p的初始值指向数组a,所以执行for 循环语句后,数组a 中的元素的值不变。因此C选项对的。28.有以下程序 #include #define N 3 void fun( int aN, int b ) int i, j; for( i=0; iN; i+ ) bi = ai0; for( j=1; jN; j+ ) if ( bi aij ) bi = aij; main() int xNN = 1, 2, 3, 4, 5, 6, 7, 8, 9, yN ,i; fun( x, y ); for ( i=0; iN; i+ ) printf(
18、 %d, yi ); printf( n ); 程序运营后的输出结果是A) 3,5,7B) 1,3,5,C) 2,4,8,D) 3,6,9, 参考答案:D【解析】函数fun()的作用是求出二维数组aN中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组xNN每一行的最大元素。因此D选项对的。29.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数) #include #include main() char a10 = abc, b10 = 012, c10 = xyz; strcpy( a+1, b+2 ); puts( str
19、cat( a, c+1 ) ); 程序运营后的输出结果是A) a12xyzB) bc2yzC) a2yzD) 12yz 参考答案:C【解析】本题考察字符串解决函数strcpy和strcat,执行完strcpy( a+1, b+2 );后,a变为a2,执行完strcat( a, c+1 )后,a变为a2yz,所以答案为C选项。30.以下选项中,没有编译错误的是A) char str3 = d, e, b, u, g, 0;B) char str15 = pass, str26; str2 = str1;C) char name10; name = china;D) char str4; str4
20、 = hello world; 参考答案:A【解析】B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。D选项定义str4时需要定义其长度。31.有以下程序#include main() char *s=12134; int k=0, a=0 ; while( s k +1 ) k+; if ( k % 2 =0 ) a = a + ( s k - 0 +1 ) ; continue; a = a + ( s k - 0 ); printf ( k=%d a=%dn, k, a );程序运营后的输出结果是A) k=5 a=15B)
21、k=4 a=12C) k=6 a=11D) k=3 a=14 参考答案:B【解析】当k=0时,执行while一次,得到k=1,a为2;当k=1时,执行while一次,得到k=2,a为4;当k=2时,执行while一次,得到k=3,a为7;当k=3时,执行while一次,得到k=4,a为12;所以答案为B选项。32.有以下程序#include main() char a510 = one, two, three, four, five ; int i, j; char t; for ( i=0; i2; i+ ) for ( j=i+1; ja j0 ) t=ai0; ai0=aj0; aj0=
22、t; puts(a1);程序运营后的输出结果是A) owoB) fwoC) twoD) fix 参考答案:B【解析】考察二维数组元素的引用。当i为0时,代码解决结果为第一个字符串的第一个字符与第四个字符串的第一个字符调换,当i为1时,代码解决结果为第而个字符串的第一个字符与第五个字符串的第一个字符调换,所以a1为fwo33.有以下程序 #include int a=1, b=2; void fun1( int a, int b ) printf( %d %d ,a, b ); void fun2() a=3; b=4; main() fun1(5,6); fun2( ); printf( %d
23、 %dn,a, b ); 程序运营后的输出结果是A) 5 6 1 2B) 3 4 5 6C) 1 2 5 6D) 5 6 3 4 参考答案:D【解析】fun1函数中的a、b为局部变量,fun2函数中的a、b为全局变量。执行fun1函数后输出5,6 执行完fun2后a变为3,b变为4,所以结果为3,4 D选项对的。34.有以下程序#include void func( int n ) static int num = 1; num += n; printf(%d , num);main() func(3); func(4); printf(n); 程序运营后的输出是A) 4 5B) 4 8C)
24、3 5D) 3 4 参考答案:B【解析】本题中num为静态局部变量,执行fun(3)后,输出4,执行fun(4)后输出8,所以选项B对的。35.有以下程序 #include #include void fun( int *p1, int *p2, int *s) s=( int*)calloc(1,sizeof(int); *s=*p1+*p2; free(s); main() int a2=1,2, b2=40,50,*q=a; fun(a,b,q); printf(%dn, *q); 程序运营后的输出结果是A) 42B) 41C) 1D) 0 参考答案:C【解析】本题考察把数组名作为函数参
25、数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C对的。36.有以下程序 #include struct STU char name9; char sex; int score2; ; void f( struct STU a ) struct STU b = Zhao, m, 85, 90; a1 = b; main() struct STU c2= Qian, f, 95, 92, Sun, m, 98, 99 ; f(c); printf( %s,%c,%d,%d, c0.name, c0.sex, c0.score0, c0.score1 ); prin
26、tf( %s,%c,%d,%dn, c1.name, c1.sex, c1.score0, c1.score1 ); 程序运营后输出结果是A) Qian,f,95,92,Sun,m,98,99B) Qian,f,95,92,Zhao,m,85,90C) Zhao,m,85,90,Sun,m,98,99D) Zhao,m,85,90,Qian,f,95,92 参考答案:B【解析】本题考察把数组名作为函数参数,执行f函数后,结构体数组c的第二个元素被改写,c1.name为Zhao,选项B对的。37.以下叙述中错误的是A) 用typedef可以说明一种新的类型名B) typedef的作用是用一个新的
27、标记符来代表已存在的类型名C) 可以用typedef说明的新类型名来定义变量D) typedef说明的新类型名必须使用大写字母,否则会出编译错误 参考答案:D【解析】本题考察typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。38.以下叙述中错误的是A) 只要类型相同,结构体变量之间可以整体赋值B) 函数的返回值类型不能是结构体类型,只能是简朴类型C) 可以通过指针变量来访问结构体变量的任何成员D) 函数可以返回指向结构体变量的指针 参考答案:B【解析】本题考察结构体相关知识,函数返回值可以是结构体,所以B选项错误。39.若有定义语句 i
28、nt b = 2;则表达式 ( b2 ) / ( 3 | b )的值是A) 0B) 2C) 4D) 8 参考答案:D【解析】本题考察位运算、/,以及逻辑运算符|。b2为8,3 3 | b为1,所以结果为8,所以D选项对的。40.有以下程序 #include main() FILE *fp; int i, a6 = 1,2,3,4,5,6; fp = fopen( d2.dat, w+ ); for (i=0; i6; i+) fprintf( fp, %dn, ai ); rewind( fp ); for ( i=0; i6; i+ ) fscanf( fp, %d, &a5-i ); fclose(fp); for ( i=0; i6; i+ ) printf( %d, ai ); 程序运营后输出结果是A) 1,2,3,4,5,6,B) 6,5,4,3,2,1,C) 4,5,6,1,2,3,D) 1,2,3,3,2,1, 参考答案:B【解析】本题考察文献操作函数,fprintf和rewind函数, rewind函数将文献内部的位置指针重新指向一个流(数据流/文献)的开头,程序一方面是将数组a的六个数写入d2文献中,然后又将a数组从后往前覆盖到d2中的内容,所以结果为6,5,4,3,2,1,选项B对的。