全国计算机二级C选择题题库第36套.docx
《全国计算机二级C选择题题库第36套.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C选择题题库第36套.docx(24页珍藏版)》请在冰点文库上搜索。
全国计算机二级C选择题题库第36套
全国计算机二级C选择题题库第36套
1、下列叙述中正确的是
A)算法复杂度是指算法控制结构的复杂程度
B)算法复杂度是指设计算法的难度
C)算法的时间复杂度是指设计算法的工作量
D)算法的复杂度包括时间复杂度与空间复杂度
参考答案:
D
算法的复杂度是指运行该算法所需要的计算机资源的多少,所需的资源越多,该算法的复杂度越高;反之,所需资源越少,复杂度越低。
算法复杂度包括算法的时间复杂度和算法的空间复杂度,算法的时间复杂度是指执行算法所需要的计算工作量,算法空间复杂度指执行这个算法所需要的内存空间。
故选择D选项。
2、设循环队列的存储空间为Q(1:
50),初始状态为front=rear=50。
现经过一系列入队与退队操作后,front=rear=1,此后又正常地插入了两个元素。
最后该队列中的元素个数为
A)2
B)1
C)3
D)52
参考答案:
A
循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针指向排头元素的前一个位置。
循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。
入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。
特别的,当队尾指针rear=50+1时,置rear=1。
退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。
若经过运算,front=rear=1可知队列空或者队列满。
此后又正常地插入了两个元素说明插入前队列为空,则插入后队列元素个数为2。
故选A选项。
3、一棵完全二叉树共有360个结点,则在该二叉树中度为1的结点个数为
A)0
B)1
C)180
D)181
参考答案:
B
在二叉树中,一个结点所拥有的后件个数称为该结点的度。
完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
由定义可以知道,完全二叉树中度为1的结点个数为1或者0。
若结点总数为偶数,则有1个度为1的结点;若结点总数为奇数,没有度为1的结点。
由于题目中的完全二叉树共有360个结点,则度为1的结点个数为1。
故选择B选项。
4、设某二叉树的后序序列与中序序列均为ABCDEFGH,则该二叉树的前序序列为
A)HGFEDCBA
B)ABCDEFGH
C)EFGHABCD
D)DCBAHGFE
参考答案:
A
二叉树遍历可以分为3种:
前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。
二叉树的后序序列与中序序列相同,说明此树结点没有右子树,且最后一个节点H为根节点,而前序遍历中根节点应在最先被访问,即节点H在最先出现,由此推断前序遍历为HGFEDCBA,故A选项正确。
5、在排序过程中,每一次数据元素的移动会产生新的逆序的排序方法是
A)快速排序
B)简单插入排序
C)冒泡排序
D)以上说法均不正确
参考答案:
A
冒泡排序只交换相邻元素,但不是每次移动都产生新的逆序。
简单插入排序的元素移动不会产生新的逆序。
快速排序每一次交换移动都会产生新的逆序,因为当不会有新的逆序产生时,本轮比较结束。
故选择A选项。
6、下面对软件工程描述正确的是
A)软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法
B)软件工程的三要素是方法、工具和进程
C)软件工程是用于软件的定义、开发和维护的方法
D)软件工程是为了解决软件生产率问题
参考答案:
A
软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
C选项叙述不全面。
软件工程包含3个要素:
方法、工具和过程。
B选项错误。
软件工程的目标是:
在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品,追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
D选项错误。
软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。
故本题选A选项。
7、耦合性和内聚性是对模块独立性度量的两个标准。
下列叙述中正确的是
A)内聚性是指模块间互相连接的紧密程度
B)提高耦合性降低内聚性有利于提高模块的独立性
C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D)降低耦合性提高内聚性有利于提高模块的独立性
参考答案:
D
模块的独立程度可以由两个定性标准度量,一个是耦合性,用来衡量不同模块彼此间互相依赖(连接)的紧密程度。
另一个是内聚性,用来衡量一个模块内部各个元素彼此结合的紧密程度。
一般来说,要求模块之间的耦合尽可能弱,即模块尽可能独立,且要求模块的内聚程度尽可能高。
故选D选项。
8、下列关于数据库系统的叙述中正确的是
A)数据库系统中数据的一致性是指数据类型一致
B)数据库系统避免了一切冗余
C)数据库系统减少了数据冗余
D)数据库系统比文件系统能管理更多的数据
参考答案:
C
数据管理技术的发展经历了3个阶段:
人工管理阶段、文件系统阶段和数据库系统阶段。
数据库系统共享性大,冗余度小,但只是减少了冗余,并不是避免一切冗余。
数据的一致性是指在系统中同一数据在不同位置的出现应保持相同的值,而不是数据类型的一致。
数据库系统比文件系统有更强的管理控制能力,而不是管理更多的数据。
故本题选C选项。
9、一名演员可以出演多部电影,则实体演员和电影之间的联系是
A)多对多
B)一对一
C)多对一
D)一对多
参考答案:
A
实体集之间通过联系来建立联接关系分为三类:
一对一联系(1:
1)、一对多联系(1:
m)、多对多联系(m:
n)。
由于一名演员可以出演多部电影,而一部电影必定有多个演员参演,则实体演员和电影之间的联系属于多对多。
故选A选项。
10、
A)表S中所有学生都选修了的课程的课号
B)全部课程的课号
C)成绩不小于80的学生的学号
D)所选人数较多的课程的课号
参考答案:
A
表示针对属性进行的投影运算,"/"表示除运算,可以近似地看作笛卡尔积的逆运算。
表达式表示,首先在关系模式SC中选择属性"学号"与"课号",结果如下左图。
其次在这个关系模式中对关系模式S进行除运算,结果如下右图。
则关系式结果表示S中所有学生(S1、S2)都选修了的课程的课号(C1、C2)。
πS#,C#(SC)/S的运算结果
πS#,C#(SC)的运算结果
故本题选A选项。
11、有以下程序
#include
main()
{inta=2,b=3,c=4;
a*=16+(b++)-(++c);
printf("%d\n",a);
}
程序运行后的输出结果是
A)15
B)30
C)28
D)14
参考答案:
C
1、后置自增运算:
k++表示先运算,后自加。
2、前置自增运算:
++k表示先自加,后运算。
++单目运算符的优先级高于赋值运算符。
a*=16+(b++)-(++c);可转化为:
a=a*(16+b-(c+1));b=b+1;代入值计算可得值a=28。
答案为C选项。
12、以下叙述正确的是
A)通过分解成简单子任务,可以完成任何复杂任务
B)每个结构化程序都要包含全部三种基本结构
C)C语言程序的所有自定义函数只能写在同一个源文件中
D)C语言程序允许使用多个main函数,只要它们的函数体各不相同即可
参考答案:
A
算法的三种基本结构:
循环、顺序、条件。
有的简单的程序只包含其中的若干个,因此B选项错误,C语言程序的自定义函数可以放在多个.c文件中,只要包含其引用的头文件即可链接到,因此选项C错误。
C语言程序有且只有一个main函数,因此D选项错误。
故答案为A选项。
13、以下选项中,合法的C语言实数是
A)E4.8
B)4.3e0.2
C).4e0
D)0.29E
参考答案:
C
C语言"标准化指数形式":
其数值部分是一个小数,小数点前的数字是零,小数点后的第一位数字不是零。
一个实数可以有多种指数表示形式,但只有一种属于标准化指数形式。
在C语言中e后面的指数必须是整数。
因此只有C选项正确。
14、设a,b,c已定义为整型变量,以下选项中不正确的赋值表达式是
A)a=3=(b=2)=1;
B)a=(b=0)*c+1;
C)a=(b=0)*c+1;
D)a=10%(b=c=2.0);
参考答案:
A
根据()和=运算符的优先级,运算过程为b=2,b=1,之后3=1为非法赋值运算。
,,C语言规定常量只能做为右值,不能做左值,,因此选项A的表达式错误。
15、若变量已正确定义并赋初值,以下合法的赋值语句是
A)k=(m==n);
B)k=-m-n
C)k=int(m+n);
D)k=m*n=1;
参考答案:
A
m,n的变量类型未知,但题目中已定义和赋值。
选项B的-m-n对于整型与浮点数类型可以这样操作,但若变量为字符类型,则错误。
选项C,编译类型错误,强制转化使用错误。
选项D,m*n是常量,只能用作表达式的右值,不能作为左值。
故答案为A选项。
16、以下关于逻辑运算符两侧运算对象的叙述中正确的是
A)只能是整数0或1
B)只能是整数0或非0整数
C)可以是结构体类型的数据
D)可以是任意合法的表达式
参考答案:
D
与运算符(&&)和或运算符(||)均为双目运算符,具有左结合性。
非运算符(!
)为单目运算符,具有右结合性。
只要是合法的表达式,都可以作为逻辑运算表达的运算表达式。
因此可知选项A,B,C错误。
答案为D选项。
17、以下选项中错误的是
A)printf("%s\n",'s');
B)printf("%d%c\n",'s','s');
C)printf("%c\n",'s'-32);
D)printf("%c\n",65);
参考答案:
A
%d可以作为输出字符和整型类型的格式,%c作为输出字符类型的格式,%s作为输出字符串类型的格式,选项A,'s'是字符,不能用%s格式来输出。
故答案为A选项。
18、若有定义:
charch;当执行以下循环时从键盘输入abcde<回车>,将输出*的个数是
while((ch=getchar())=='e')printf("*");
A)4
B)0
C)5
D)1
参考答案:
B
while((ch=getchar())=='e'),输入abcde,接收到的第一个字符是a,while循环的条件为0,跳出循环结束。
因此printf没有执行过。
因此,没有打印任何字符出来。
故答案为B选项。
19、有以下程序
#include
main()
{intx=10,y=11,z=12;
if(yx=y;y=z;z=x;
printf("x=%dy=%dz=%d\n",x,y,z);
}
程序运行后的输出结果是
A)x=11y=12z=11
B)x=10y=10z=10
C)x=11y=11z=10
D)x=10y=10z=12
参考答案:
A
if条件为真,执行x=y;此时x=11;y=11;z=12
再执行y=z;z=x;此时y=12;z=11;
最后x=11;y=12;z=11;故答案为A选项。
20、对于if(表达式)语句,以下叙述正确的是
A)"表达式"不能是变量
B)"表达式"的值只能是整数值
C)"表达式"可以是常量
D)"表达式"中不可以出现字符型变量的比较
参考答案:
C
C语言没有规定if(表达式)中的"表达式"的形式,可以是任意合法表达式。
故答案为C选项。
21、有以下程序
#include
main()
{charch='1';
while(ch<'9')
{
printf("%d",ch-'0');
ch++;
}
}
程序运行后的输出结果是
A)12345678
B)01234567
C)0
D)1
参考答案:
A
将字符转为数字,并输出打印的格式为%d,while循环从1-8,因此打印的结果是12345678。
故答案为A选项。
22、以下与表达式(!
x==0)的逻辑值不等价的选项是
A)x==1
B)x
C)x!
=0
D)x>0||x<0
参考答案:
A
!
与==运算,!
的优先级高于==,即等价于(!
x)==0。
如果x
0,则表达式为真,否则表达式为假,因此可以验证选项,只有选项A不符合。
故答案为A选项。
23、以下叙述正确的是
A)表达式9-'0'的值是数值9
B)表达式'A'+32的值是字母A的ASCII码
C)表达式'a'-32的值是字母a的ASCII码
D)表达式9+'0'的值是字符9的ASCII码
参考答案:
D
表达式9-'0'的值是数值9-48=-39,故选项A错误,
表达式'A'+32的值是字母a的ASCII码,故选项B错误,
表达式'a'-32的值是字母A的ASCII码,故选项C错误。
故答案为D选项。
24、有以下程序
#include
intfun(intx,inty)
{if(x!
=y)return((x+y)/2);
elsereturn(x);
}
main()
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是
A)3
B)6
C)8
D)12
参考答案:
B
fun函数的功能是获取二个数的平均数,注意平均数是整型数,小数会被截断。
fun(2*4,fun(5,6))→fun(8,5)→6,因此答案为C选项。
25、有以下程序
#include
intf(intx,inty)
{return((y-x)*x);}
main()
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是
A)8
B)10
C)9
D)7
参考答案:
C
f(a,b)=f(3,4)=(4-3)*3=3;f(a,c)=f(3,5)=(5-3)*3=6;f(3,6)=(6-3)*3=9;
因此,d=f(f(a,b),f(a,c))=9,答案为C选项。
26、有以下程序
#include
voidfun(inta[],intn,intflag)
{inti=0,j,t;
for(i=0;ifor(j=i+1;jif(flag)
{if(a[i]{t=a[i];a[i]=a[j];a[j]=t;}
}
else
{if(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
}
main()
{intc[10]={7,9,10,8,3,5,1,6,2,4},i;
fun(c,4,1);
fun(c+4,6,0);
for(i=0;i<10;i++)printf("%d,",c[i]);
printf("\n");
}
程序运行后的输出结果是
A)7,8,9,10,6,5,4,3,2,1,
B)10,9,8,7,6,5,4,3,2,1,
C)10,9,8,7,1,2,3,4,5,6,
D)1,2,3,4,5,6,7,8,9,10,
参考答案:
C
fun()函数作用冒泡法排序,flag控制升序(0)或者降序
(1)。
n为参与排序的个数。
a为数组的起始地址。
因此,fun(a,4,1),数组的前四个降序排序,fun(a+4,6,0)从数组的第四项,后六个升序排序。
故结果为10,9,8,7,1,2,3,4,5,6。
答案为C选项。
27、有以下程序
#include
intm1(intx,inty)
{if(x<=y)return2*x+1;
elsereturny;
}
intm2(intx,inty)
{if(x<=y)return2*y+1;
elsereturnx;
}
main()
{inti,t1=10,t2=0;
for(i=1;i<=4;i++)
{t1=m1(i,t1);t2=m2(i,t2);}
printf("t1=%dt2=%d\n",t1,t2);
}
程序运行后的输出结果是
A)t1=9t2=4
B)t1=4t2=9
C)t1=9t2=9
D)t1=1t2=4
参考答案:
A
函数m1(x,y),若x28、有以下程序
#include
voidf1(char*a,charb){charc;c=*a;*a=b;b=c;}
voidf2(chara,charb){charc;c=a;a=b;b=c;}
voidf3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}
main()
{chart1,t2;
t1='A';t2='B';f3(&t1,&t2);putchar(t1);putchar(t2);
t1='A';t2='B';f2(t1,t2);putchar(t1);putchar(t2);
t1='A';t2='B';f1(&t1,t2);putchar(t1);putchar(t2);
printf("\n");
}
程序运行后的输出结果是
A)ABBABB
B)BAABBB
C)BABABA
D)BABAAB
参考答案:
B
f1(*a,b),*a地址传递,b值传递,将b值传给*a,则f1(&t1,t2)调用后输出t1、t2为BB。
f2(a,b)值传递,传入的只是a,b的拷贝,不实现交换,则f2(t1,t2)调用后输出t1、t2为AB。
f3(*a,*b)为地址传递,可以实现a,b值的交换,则f3(&t1,&t2)调用后输出t1、t2为BA。
因此结果为BAABBB。
故答案为B选项。
29、以下叙述正确的是
A)charc1,*c2,*c3[10];是合法的变量定义语句
B)数组说明符的一对方括号中不能使用表达式
C)数组元素下标可以是非整数
D)若有定义chararray[4];则语句printf("%c",array["3"]);是合法的
参考答案:
A
C语言规定定义数组时,数组的长度必须是整型常量,数组说明符的一对方括号中表达式只要是常量即合法,因此选项B错误。
C语言规定,数组元素下标必须是非负整数,因此选项C错误。
选项Dchararray[4]数组的长度为4,array["3"],其中"3"常量字符串,与C语言规定数组的下标必须是非负整数不符,故答案为A选项。
30、有以下程序
#include
main()
{inta[3][3]={{1,3,5,},
{7,9,11,},
{13,15,17}};
int(*p)[3]=a,i,j,n=0;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
n+=*(*(p+i)+j);
printf("%d\n",n);
}
程序运行后的输出结果是
A)54
B)60
C)36
D)48
参考答案:
D
for循环的作用是求数组各行前二列的数字之和。
*(*(p+i)+j)→p[i][j]
1+3+7+9+13+15=48,因此答案为D选项。
31、设有定义:
charp[]={'1','2','3'},*q=p;
以下不能计算出一个char型数据所占字节数的表达式是
A)sizeof(*q)
B)sizeof(char)
C)sizeof(p)
D)sizeof(p[0])
参考答案:
C
变量p,q均是指针,因此sizeof(p)=4,而*p,*q,p[0]的类型都是char,因此长度为1,故A、D选项均正确。
选项B,直接计算char的字节数也正确,故答案为C选项。
32、有以下程序
#include
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{intj=1,m=1,k;
k=fun(j,m);printf("%d,",k);
k=fun(j,m);printf("%d\n",k);
}
执行后的输出结果是
A)5,11
B)5,5
C)11,11
D)11,5
参考答案:
A
static静态变量只在声明时初始化一次。
因此m,n只是在第一个调用fun函数时初始化,第二次保持原来的只不变,不在进行初始化。
因此第一次,可计算i=3,m=3+1+1=5,故打印为5,第二次i=4+5,m=9+1+1=11,故打印11。
故答案为A选项。
33、有以下程序
#include
intf(intx[],intn)
{if(n>1)
returnx[n-1]+f(x,n-1)*10;
else
returnx[0];
}
main()
{intz[3]={1,2,3},y;
y=f(z,3);
printf("%d\n",y);
}
程序运行后的输出结果是
A)321
B)123
C)1
D)3
参考答案:
B
f函数的作用是将int型数组构造成一个整型数。
f函数采用递归的方式来实现,位数是递增的。
有题设可知结果为123,因此输出结果为B选项。
34、有以下程序
#include
#include
main()
{charss[10]="12345";