全国计算机二级C选择题题库第34套

更新时间:2023-12-16 07:42:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

全国计算机二级C选择题题库第34套

1、下列叙述中错误的是

A) 数据结构中的数据元素不能是另一数据结构 B) 数据结构中的数据元素可以是另一数据结构

C) 空数据结构可以是线性结构也可以是非线性结构 D) 非空数据结构可以没有根结点 参考答案:A

数据元素是一个含义很广泛的概念,它是数据的\基本单位\,在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。

满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。

空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构\图\就没有根结点。 故选A选项。

2、为了降低算法的空间复杂度,要求算法尽量采用原地工作(in place)。所谓原地工作是指

A) 执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化) B) 执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化 C) 执行算法时不使用额外空间 D) 执行算法时不使用任何存储空间 参考答案:A

算法的空间复杂度是指执行这个算法所需要的内存空间,包括输入数据所占的存储空间、程序本身所占的存储空间、算法执行过程中所需要的额外空间。

如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。 故选A选项

3、某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为 A) m-1 B) m C) 1 D) 0

参考答案:A

循环队列长度为m,由初始状态为front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。

从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m 。该题中m-1

4、某棵树只有度为3的结点和叶子结点,其中度为3的结点有8个,则该树中的叶子结点数为

A) 15 B) 16 C) 17

D) 不存在这样的树 参考答案:C

树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。

由于只有度为3的结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一部分结点度为3,一部分为叶子结点,其余的结点的度均为3,计算度为3的结点总数3-14-13-1

(3-1)/2<8<(3-1)/2可知,树共有4层,前两层有度为3的结点(3-1)/2=4个,第三层有3

3=9个结点,其中4个是度为3的结点,5个是叶子结点,所以该树中的叶子结点数为4×3+5=17。 故选C选项。

5、某二叉树共有530个结点,其中度为2的结点有250个,则度为1的结点数为 A) 29 B) 30 C) 249 D) 251

参考答案:A

在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点总是比度为2的结点多一个。

二叉树结点总数为530,度为2的结点有250个,则度为0的结点有251个,那么度为1的结点个数为530-250-251=29。故选A选项。

6、若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是 A) 前序序列 B) 中序序列 C) 后序序列

D) 以上说法均可以 参考答案:B

二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由于结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,那么只要遍历时访问根结点在访问左子树和右子树之间,遍历序列有序,即中序序列有序。故选B选项。

7、将C语言的整数设为整数类I,则下面属于类I实例的是 A) -103 B) 10E3

C) 10.3 D) \

参考答案:A

整数类实例包括:十进制常量用0~9表示,不能以0开头;八进制常量用0~7表示,必须用0开头;十六进制常量用0~9和A~F(a~f)表示,必须以0x或0X开头。

本题中B选项是科学计数法表示的浮点数实例,C选项是浮点数实例,D选项是字符串实例。故选A选项。

8、下列叙述中正确的是

A) 软件是程序、数据和文档 B) 软件是程序和数据

C) 软件是算法和数据结构 D) 软件是算法和程序 参考答案:A

计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项。

9、软件生命周期是指

A) 软件的定义和开发阶段

B) 软件的需求分析、设计与实现阶段 C) 软件的开发阶段

D) 软件产品从提出、实现、使用维护到停止使用退役的过程 参考答案:D

通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项。

10、下列叙述中正确的是

A) 数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能 B) 数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件 C) 数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少 D) 数据库系统独立性较差,而文件系统独立性较好 参考答案:A

数据管理技术的发展经历了3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。三者各自的特点如下表所示。 特点 管理者 人工管理阶段 人 文件系统阶段 文件系统 某个应用程序 共享性差,冗余度大 独立性差 记录内有结构,整体无结构 控制能力 由应用程序控制 由应用程序控制 由DBMS提供数据安全性、完整数据库系统阶段 数据库管理系统 现实世界 共享性大,冗余度小 具有高度的物理独立性和一定的逻辑独立性 整体结构化,用数据模型描述 面向对象 某个应用程序 共享程度 无共享,冗余度大 独立性 结构化 不独立,完全依赖于程序 无结构 性、并发控制和恢复 数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能。数据库系统和文件系统的区别不仅在于管理的文件类型与数据量的多少。数据库系统具有高度的物理独立性和一定的逻辑独立性,而文件系统独立性较好。故本题选A选项。

11、关于程序模块化,以下叙述错误的是 A) 程序模块化可以提高程序运行的效率 B) 程序模块化可以提高程序编制的效率 C) 程序模块化可以提高程序代码复用率 D) 程序模块化可以提高调试程序的效率 参考答案:A

模块化程序的优点:1、易于维护和复用,可以提高程序编制的效率,2、易于分工合作,3、易于模块化调试测试。模块化程序的副作用:1、可能会降低程序运行效率,2、设计的前期工作需要多花费时间。可知选项B,C,D正确。

12、以下是正确C语言标识符的 A) &3 B) #3 C) _3 D) -3

参考答案:C

C语言合法标识名的命名规则是:(1)标识符由字母、数字和下划线组成,(2)第一个字符不能是数字只能是字母或下划线。选项A的第一个字符为&,非法,选项B,第一个字符为#,非法,选项D,第一个字符为-,非法。 答案为选项C。

13、若有定义:int a,b,c; 以下程序段的输出结果是 a=11; b=3; c=0;

printf(\A) 2 B) 0 C) 3 D) 1

参考答案:A

C 语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。因此c的值为a%b即11%3=2,故答案为A选项。

14、以下选项中合法的C语言常量是 A) 'C-STR' B) 2014.1 C) \D) 2EK

参考答案:B

所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项A是字符串,但使用单引号,错误,选项C,D,为实型常量中指数形式,但指数形式e(E)之前必须是数字,之后必须为整数,错误。故答案为B选项。

15、设有定义:int x,y,z;,且各变量已赋正整数值,则以下能正确表示代数式\的C语言表达式是( )。 A) 1.0/x/y/z B) 1/x*y*z C) 1/(x*y*z)

D) 1/x/y/(double)z 参考答案:A 代数表达式1/

?x?y?z?是小数,转为c语言的表达式必须是小数A选项由于1.0为浮点数,计

算结果自动转换为浮点数,故A正确。选项B,C,D的表达式均为0,因此只有选项A正确。答案为A选项。

16、有以下程序

#include main()

{ char a,b,c,d;

scanf(\ c=getchar(); d=getchar();

printf(\ }

当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)

12 34 则输出结果是 A) 12

3 B) 12 C) 1234 D) 12

34 参考答案:A

}

main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; printf(\}

程序运行后的输出结果是 A) 9 B) -1 C) 10 D) 0

参考答案:A

while( p

29、有以下程序

#include main( )

{ char w[20], a[5][10]={\ int i;

for ( i=0; i<5; i++ ) w[i] = a[i][i]; w[5]= '\\0';

printf( \}

程序运行后的输出结果是 A) ejoty B) afkpu C) agmsy D) eimqu

参考答案:C 数组a是二维数组,数组w存放二维数组a行列值相同位置的元素,由a[5][10]可得w[0]~w[4]的元素分别是agmsy,因此打印结果为agmsy。故答案为C选项。

30、语句printf(\的输出结果是 A) 6 B) 7 C) 8 D) 9

参考答案:A

字符串\中共有13个字符,而strlen()函数从字符串第一个字符开始扫描,直到碰到第一个结束符'\\0'为止,然后返回计数器值(长度不包含\。故输出结果为6。答案为A选项。

31、有以下程序

#include #include

void fun( char *s, int m1, int m2 ) { char t, *p;

p=s + m1; s= s+m2; while( s

{ t=*s; *s=*p; *p=t; s++; p--; } }

main()

{ char ss[10]=\ int n=6;

fun( ss,0,n-1 ); fun( ss,9,n ); fun( ss,0,9 );

printf(\}

程序运行后的输出结果是 A) 012345 B) 876543210 C) 876543 D) 012345678 参考答案:A fun(*ss, m1, m2 )的作用是,如果m1>m2交换数组元素ss[m1],ss[m2]。因此,fun(ss,0,5)后ss的0,1,2,3,4,5,6,7,8,\\0。fun(ss,9,6) 后ss的0,1,2,3,4,5, \\0,8,7,6。fun(ss,0,9)后ss的0,1,2,3,4,5,\\0,8,7,6。因此打印结果012345。故答案为A选项。

32、有以下程序

#include int m=1,n=2;

void sub1(int m,int n) { m+=2; n++; } void sub2( )

{ m++; n+=2; } main( )

{ printf(\ sub1(4,5);

printf(\ sub2();

printf(\}

程序运行后的输出结果是

A) 1,2,1,2,2,4 B) 1,2,6,6,7,8 C) 1,2,2,4,2,4 D) 1,2,6,6,2,4 参考答案:A

全局变量与函数体内局部变量同名时,局部变量会覆盖全局变量,因此在sub1()函数内,全局变量m,n是不可见的,在sub1()对m,n操作的是局部变量,对全局变量不产生影响。但在sub2()函数内,由于没有和全局变量变量重名,因此在此函数内,m,n是可见的。因此,第一个printf()打印的是全局变量m,n,故打印的是1,2,第二个printf(),调用sub1(),没有修改全局变量m,n.故打印的是1,2,第三个printf(),之前调用了sub2(),修改了全局变量m,n。因此,打印的是2,4,故答案为A选项。

33、有以下程序

#include #include long fun( char s[] ) { long n; int sign;

for( ; isspace(*s); s++ ); sign=(*s=='-')? -1 : 1;

if(*s=='+' || *s=='-') s++; for( n=0 ; isdigit(*s); s++ ) n=10*n+(*s-'0'); return sign*n; }

main()

{ char s[]=\ printf(\ }

程序运行后的输出结果是 A) -263 B) 2 C) 0 D) -26

参考答案:D

isspace(c)检查参数c是否为空格字符,也就是判断是否为空格('')、水平定位字符('\\t')、归位键('\\r')、换行('\\n')、垂直定位字符('\\v')或翻页('\\f')的情况。若参数c为空格字符,则返回TRUE,否则返回NULL(0)。Isdigit(c)函数检查参数c是否为阿拉伯数字0到9。返回值若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。fun()函数的第一个for循环判断字符串是否负号。第二个for循环获取符号后面的数字字符,并将它们转化为整数。遇到了非数字的字符跳出,最后返回数组的结果。因此,可知首先获取负号,紧接着获取数值26,遇到了字符a,跳出返回-26,因此打印的结果是-26。故答案为D选项。

34、设有定义:

struct complex

{ int real,unreal;} data1={1,8},data2; 则以下赋值语句中错误的是 A) data2=(2,6); B) data2=data1;

C) data2.real=data1.real; D) data2.real=data1.unreal; 参考答案:A

结构体变量建议在定义的时候进行初始化。结构体常见的几种初始化方法如下: (1)struct a a1 = { .b = 1, .c = 2 };

(2)struct a a1 = { b:1, c:2 };

(3)struct a a1 = { 1, 2};

计算机内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。因此,可以判断选项A错误。

35、有以下程序

#include #define S(x) x*x/x main( )

{ int k = 6, j = 3;

printf(\}

程序运行后的输出结果是 A) 11,11 B) 29,29 C) 26,29 D) 121,121 参考答案:B

#define命令是C语言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标识符。S(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可得

29,S(j+k+2)=j+k+2*k+j+2/j+k+2,计算可得29。因此输出为29,29。答案为B选项。

36、若有定义

typedef int *T[10]; T a;

则以下选项与上述定义中a的类型完全相同的是

A) int *a[10]; B) int (*a)[10]; C) int a[10];

D) int (*a[10])(); 参考答案:A

C语言允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取\别名\。类型定义符typedef即可用来完成此功能,可以完全代替原来的类型说明符。因此,变量a的类型为int *a[10]。typedef int *T[10],由于[]运算符优先级高于*,可以看成typedef int[10] *T,替换T可得int[10] *a=>int *a[10],因此,答案为A选项。

37、有以下程序

#include main( )

{ FILE *fp;

int i, a[6]={1,2,3,4,5,6},k; fp = fopen( \ for ( i=0; i<6; i++ )

fprintf(fp, \ rewind(fp);

for ( i=0; i<6; i++ ) { fscanf(fp, \ printf(\ }

fclose(fp); }

程序运行后的输出结果是 A) 6,5,4,3,2,1, B) 1,2,3,4,5,6, C) 1,1,1,1,1,1 D) 6,6,6,6,6,6, 参考答案:A

fopen( \打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。rewind(fp);使文件fp的位置指针指向文件开始。fprintf(fp,\a[5-i]);将a[i]输出到fp指向的文件中。fscanf(fp, \&k);将fp读入到变量k中,第一个for循环将数组中元素倒着输入到fp指向的文件中,rewind()则指向文件开始,因此打印是数组a的倒叙。故打印为6,5,4,3,2,1。答案为A选项。

38、有以下程序

#include #include

void fun( double *p1, double *p2, double *s ) { s=( double* )calloc( 1,sizeof(double) ); *s = *p1 + *p2; }

main()

{ double a[2]={1.1,2.2 }, b[2]={ 10.0,20.0 }, *q=NULL; fun( a,b,q );

printf(\}

程序运行后的结果是 A) 有运行错误 B) 输出11.10 C) 输出12.10 D) 输出21.10 参考答案:A

calloc(n,sizeof(type))在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针,如果分配不成功,返回NULL。s在函数fun()申请了内存空间,但是在调用fun()函数后会释放掉,因此,最后q指向NULL,因此运行是打印出错。答案为A选项。

39、若文件指针fp已正确指向文件,ch为字符型变量,以下不能把字符输出到文件中的语句是

A) fget( fp,ch ); B) fputc(ch,fp);

C) fprintf( fp, \

D) fwrite( &ch,sizeof(ch),1,fp); 参考答案:A

fgetc()从文件读入一个字符到指定变量。fputc()将指定字符写入fp文件中,

fprintf(),fwrite()均是写入文件操作函数。因此选项B,C,D错误。答案为A选项。

40、有以下程序

#include struct ball {

char color[10]; int dim; };

main( ) {

struct ball list[2] = {{\ printf(\}

程序运行后的输出结果是 A) yellow:3 B) yellow:2 C) white:2 D) white:3 参考答案:B

结构体定义时初始化,list[0]={\(list+1)->color=list[1].color=\因此,打印的结果是yellow:2。故答案为B选项。

本文来源:https://www.bwwdw.com/article/umh5.html

Top