全国计算机二级C选择题题库第35套.docx
- 文档编号:11574984
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:21
- 大小:108.70KB
全国计算机二级C选择题题库第35套.docx
《全国计算机二级C选择题题库第35套.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C选择题题库第35套.docx(21页珍藏版)》请在冰豆网上搜索。
全国计算机二级C选择题题库第35套
全国计算机二级C选择题题库第35套
1、下列叙述中正确的是
A)程序可以作为算法的一种表达方式
B)算法的有穷性是指算法的规模不能太大
C)算法的复杂度用于衡量算法的控制结构
D)算法的效率与数据的存储结构无关
参考答案:
A
算法的有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的。
B选项错误。
一个算法复杂度的高低体现在运行该算法所需要的计算机资源的多少。
C选项错误。
算法的效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,这就与算法本身设计的优劣以及具体的编程实现有关,数据的存储结构会极大的影响程序的执行时间。
D选项错误。
算法在实现时需要用具体的程序设计语言来实现,所以程序可以作为实现算法的一种表达方式。
故选A选项。
2、某循环队列的存储空间为Q(1:
m),初始状态为front=rear=m。
现经过一系列的入队操作和退队操作后,front=m-1,rear=m,则该循环队列中的元素个数为
A)m-1
B)1
C)m
D)0
参考答案:
B
循环队列长度为m,由初始状态为front=rear=m可知此时循环队列为空。
入队运算时,首先队尾指针(rear)进1(即rear+1),然后在rear指针指向的位置插入新元素。
特别的,当队尾指针rear=m+1时,置rear=1。
退队运算时,排头指针(front)进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。
从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为m-(m-1)=1。
故选择A选项。
3、能从任意一个结点开始没有重复地扫描到所有结点的数据结构是
A)循环链表
B)双向链表
C)二叉链表
D)有序链表
参考答案:
A
在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。
在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发没有重复地扫描到表中其他所有的结点。
双向链表与二叉链表都可以扫描到所有结点,但是会有重复。
有序链表如果是单链表的情况下,不能扫描到所有结点。
故A选项正确。
4、某棵树中共有25个结点,且只有度为3的结点和叶子结点,其中叶子结点有7个,则该树中度为3的结点数为
A)不存在这样的树
B)7
C)8
D)6
参考答案:
A
树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。
在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。
首先假设这样的树是存在的,由于只有度为3的结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一部分结点的度为3,一部分结点为叶子结点。
结点总数为25,叶子结点有7个,则度为3的结点有18个,由于(34-1-1)/2<18<(35-1-1)/2可知,树共有5层,前三层有度为3的结点(34-1-1)/2=13个,第四层有34-1=27个结点,其中5个是度为3的结点,22个是叶子结点,此时与题目给出的叶子结点有7个相矛盾,故不存在这样的树。
故选择A选项。
5、在最坏情况下,二分查找法的时间复杂度为
A)
B)
C)
D)
参考答案:
C
二分法查找也称拆半查找,能使用二分法查找的线性表必须满足两个条件,用顺序存储结构以及线性表有序。
利用二分法查找元素X的过程如下:
将X与线性表的中间项比较,如果X的值与中间项的值相等,则查找成功,结束查找;如果X小于中间项的值,则在线性表的前半部分以二分法继续查找;如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。
可以证明,对于长度为n的有序线性表,在最坏情况下,二分法查找需比较次,故时间复杂度为。
故选择A选项。
6、某二叉树共有730个结点,其中度为1的结点有30个,则叶子结点个数为
A)不存在这样的二叉树
B)351
C)1
D)350
参考答案:
A
在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。
对任何一棵二叉树,度为0的结点总是比度为2的结点多一个。
如果有一棵二叉树,结点总数为730,假设度为0的结点个数为n,则有n+30+n-1=730,n=350.5,由于结点个数必须是整数,所以不可能存在题目中这样的二叉树。
故选A选项。
7、软件开发中需求分析的主要任务是
A)定义和描述目标系统"做什么"
B)获取需求
C)给出软件解决方案
D)需求评审
参考答案:
A
需求分析阶段的工作可以分为4个方面:
需求获取、需求分析、编写需求规格说明书和需求评审。
需求分析的任务是发现需求、求精、建模和定义需求的过程,是描述"做什么"的软件开发阶段。
故选A选项。
8、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于系统软件的是
A)学生成绩管理系统
B)ERP系统
C)办公自动化系统
D)UNIX系统
参考答案:
D
系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件。
应用软件是为了应用于特定的领域而开发的软件。
选项A属于系统软件,选项B、C、D属于应用软件。
故选D选项。
9、医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,则实体医生和实体药之间的联系是
A)多对多
B)一对一
C)多对一
D)一对多
参考答案:
A
实体集之间通过联系来建立联接关系分为三类:
一对一联系(1:
1)、一对多联系(1:
m)、多对多联系(m:
n)。
由于医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,所以两者的联系属于多对多。
故选A选项。
10、学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2且成绩及格的学生学号的表达式为
A)
B)
C)
D)
参考答案:
A
表示针对属性进行的投影运算,表示针对元组进行的选择运算,''表示交运算,''表示并运算。
要求检索结果为关系模式中的学生学号S#,首先在几种属性中选择学生学号,其次要在其中选择满足条件的元组,条件是课号为2且成绩及格,即为"",故完整表达式为。
本题选A选项。
11、若想定义int型变量a,b,c,d并都赋值为1,以下写法中错误的是
A)inta=b=c=d=1;
B)inta=1,b=1,c=1,d=1;
C)inta,b,c,d;a=b=c=d=1;
D)inta,b,c,d=1;a=b=c=d;
参考答案:
A
C语言赋值运算符的结合方向是从右向左,使用的变量必须都是已经定义了的,inta=b=c=d=1;本条语句首先执行赋值运算d=1,由于b并未定义,故编译不通过,提示没有定义标识符b、c、d,故A项错误。
答案为A选项。
12、若有定义:
charc;doubled;程序运行时输入:
12<回车>,能把字符1输入给变量c、数值2输入给变量d的输入语句是
A)scanf("%d%lf",&c,&d);
B)scanf("%c%lf",&c,&d);
C)scanf("%c%f",&c,&d);
D)scanf("%d%f",&c,&d);
参考答案:
B
%lf是针对double的,如果仅用%f,输入的数据可能没有被完全接收,数据的精度可能不足,选项C,D错误。
%f主要针对float类型的变量的输入。
%d主要针对整型数据的输入,%c主要针对字符类型的数据的输入,选项A错误。
故答案为B选项。
13、输出语句:
printf("%d\n",11+011);的输出结果是
A)20
B)22
C)022
D)021
参考答案:
A
printf("%d\n",11+011)中,11为十进制,011为八进制形式,打印格式%d表示十进制格式输出,,因此,先将八进制数转化为十进制,011(8)=81*1+1*80=9,相当于printf("%d\n",11+9),故答案为20,A选项正确。
14、以下叙述正确的是
A)有些算法不能用三种基本结构来表达
B)C语言程序不编译也能直接运行
C)结构化程序的三种基本结构是循环结构、选择结构、顺序结构
D)如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序
参考答案:
C
算法的三种基本结构可以表达任何算法,只是不同的实现复杂度不相同。
因此选项A错误。
C语言是编译型语言,程序必须先编译、链接才能运行,因此选项B错误。
C语言是高级程序语言,计算机不能识别除了机器语言以外的任何语言,因此C程序代码转换为机器语言才能在计算机上运行。
因此选项D错误。
答案为C选项。
15、若有定义:
doublex;,则表达式:
x=0,x+10,x++的值是
A)11.0
B)10.0
C)0.0
D)1.0
参考答案:
C
C语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。
逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。
也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。
1、后置自增运算:
k++表示先运算,后自加。
2、前置自增运算:
++k表示先自加,后运算。
因此,表达式x=0,x+10,x++的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。
,故答案为C选项。
16、有以下程序
#include
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是
A)a=2,b=2
B)a=2,b=1
C)a=1,b=1
D)a=1,b=0
参考答案:
B
C语言还提供了一种用于多分支选择的switch语句,计算表达式的值。
并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。
如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
x=1;进入第一层switch,y=0;进入第二层switch,执行a++;break;后a=1;在进入case2,(这里case1:
没有break,)执行了a++,b++,由于存在break,则跳出switch,得到a=2,b=1,因此答案为B选项。
左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。
1、后置自增运算:
k++表示先运算,后自加。
2、前置自增运算:
++k表示先自加,后运算。
因此,表达式x=0,x+10,x++的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。
,故答案为C选项。
17、以下程序段中的变量已正确定义
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf("*");
该程序段的输出结果是
A)*
B)****
C)**
D)********
参考答案:
A
C语言约定分号为一条语句的结束。
因此for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);是完整的语句,对printf();没有任何影响,最后printf("*"),执行一次。
因此答案为A选项。
18、有以下程序
#include
main()
{charc;
for(;(c=getchar())!
='#';)
{if(c>='a'&&c<='z')c=c-'a'+'A';
putchar(++c);
}
}
执行时输入:
aBcDefG##<回车>,则输出结果是
A)AbCdEFg
B)ABCDEFG
C)BCDEFGH
D)bcdefgh
参考答案:
C
循环的作用是将输入的字符串转化为大写,getchar()每次读入一个字符,putchar()每次输出一个字符,当遇到#字符结束。
putchar(++c),表示将字符变量c加1后输出。
因此,输入aBcDefG##,得到的结果是BCDEFGH。
故答案为C选项。
19、有以下程序
#include
intf(intx);
main()
{intn=1,m;
m=f(f(f(n)));printf("%d\n",m);
}
intf(intx)
{returnx*2;}
程序运行后的输出结果是
A)4
B)2
C)8
D)1
参考答案:
C
在C语言中,需要在main函数后面定义函数,需要提前声明,否则调用报错,无法找到该函数。
m=f(f(f(n))),一共调用3次f()函数,f()函数是对n*2,因此,结果是n*2*2*2,得到结果为8。
故答案为C选项
20、关于地址和指针,以下叙述正确的是
A)可以通过强制类型转换让char型指针指向double型变量
B)函数指针p指向一个同类型的函数f时,必须写成:
p=&f;
C)指针p指向一个数组f时,必须写成:
p=&f;
D)一个指针变量p可以指向自身
参考答案:
A
函数指针p指向一个同类型的函数f时,可以写成:
p=f,而不能写成&f,选项B错误。
函数名代表函数的入口地址,指针p指向一个数组f时,可以写成:
p=f,也可写成&f,数组名f,可以代表数组的首地址,选项C错误。
指针变量指向的是地址,是个常量,不能将地址指向另一个地址,选项D错误。
char型根据转化原则可以转化为double类型,因此答案为A选项。
21、有以下程序
#include
#defineN4
intfun(inta[][N])
{inti,j,x=0;
for(i=0;i for(j=0;j if(i==j) x+=a[N-1-j][i]; returnx; } main() {intx[N][N]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,17}},y; y=fun(x); printf("%d\n",y); } 程序运行后的输出结果是 A)34 B)35 C)28 D)59 参考答案: A fun函数求矩阵反对角线的元素之和。 根据fun()函数,当数组的行列下标相等时,对该行反对角线上的元素求和。 故结果为4+7+11+13=34,答案为A选项。 22、有以下程序 #include #defineN3 voidfun(intx[][N],int*r1,int*r2) {inti,j; *r1=*r2=0; for(i=0;i {j=N-(i+1); if(x[*r1][*r2] } } main() {inta[N][N]={1,5,7,9,2,6,4,3,8},i,j; fun(a,&i,&j); printf("%d\n",a[i][j]); } 程序运行后的输出结果是 A)8 B)6 C)7 D)9 参考答案: C fun()获取矩阵正反对角线的元素的最大值,fun()中for(i=0;i {j=N-(i+1);//反对角线列位置 if(x[*r1][*r2] } 由数组元素可得,正反对角线的最大元素为7。 答案为C选项。 23、对于以下函数声明 voidfun(intarray[4],int*ptr); 以下叙述中正确的是 A)array,ptr都是指针变量 B)调用fun函数时,实参的值将逐一复制给array C)调用fun函数时,array按值传送,ptr按地址传送 D)array是数组,ptr是指针,它们的性质不同 参考答案: A voidfun(intarray[4],int*ptr);fun()函数,第一个参数虽然是数组类型,但是会退化为指针,并且形参数组的个数没有用。 第二个参数是指针,因此实际上二个形参都是指针。 两个形参都是指针,传递的都是地址,而不是值。 可知选项B、C、D错误。 答案为A选项。 24、设有定义: intx[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是 A)for(i=0;i<10;i++)scanf("%d",p+i); B)for(i=0;i<10;i++)scanf("%d",*p+i); C)for(i=0;i<10;i++)scanf("%d",*(p+i)); D)for(i=0;i<10;i++)scanf("%d",x[i]); 参考答案: A C语言声明scanf("<格式化字符串>",<地址表>);可知scanf()的第二个参数是地址,因此,从四个答案中可以判断,只有选项A是p[i]的地址,其他的均是变量本身。 故答案为A选项。 25、有以下程序 #include main() {chars[]="012xy\08s34f4w2"; inti,n=0; for(i=0;s[i]! =0;i++) if(s[i]>='0'&&s[i]<='9')n++; printf("%d\n",n); } 程序运行后的输出结果是 A)7 B)0 C)3 D)8 参考答案: C 题意统计字符s中阿拉伯数字的个数。 chars[]='012xy\08s34f4w2';元素是字符型。 '0'=48;而'\0'=0;因此可以计算出'\0'之前阿拉伯数字的个数,由字符串s可知,有3个阿拉伯数字。 答案为C选项。 26、有以下程序段 charstr[4][12]={"aaa","bbb","ccc","ddd"},*p[4]; inti; for(i=0;i<4;i++)p[i]=str[i]; 以下选项中不能正确引用字符串的是 A)*p[3] B)p[3] C)str[2] D)*p 参考答案: A *p[3]→p[3][0]是一个字符,不是字符串,选项A错误。 p[3]和str[2]和*p分别代表了ddd,ccc,aaa。 答案为A选项。 27、有以下程序 #include intmul(intval) {staticintinit=1; returninit*=val; } main() {inti; for(i=1;i<=5;i++) printf("%d,",mul(i)); } 程序运行后的输出结果是 A)1,2,6,24,120, B)1,2,3,4,5, C)1,1,1,1,1, D)1,2,4,6,8, 参考答案: A static静态变量只在声明时初始化一次。 mul()累乘,第一次init=1,init*=val, 第二次init=1,val=2,第三次init=2,val=3,第四次init=6,val=4,第五层init=24,val=5,因此结果为1,2,6,24,120。 故答案为A选项。 28、有以下程序 #include voidfun(intn) {staticintk=0; if(n<0){printf("-");n=-n;} k+=n%10;printf("%d,",k); if(n/10)fun(n/10); } main() {intx=-12; fun(x);printf("\n"); } 程序运行后的输出结果是 A)-2,3 B)-1,-2, C)-2,-3, D)-2,1 参考答案: A fun()函数使用了静态变量,静态变量只在声明时初始化一次。 首先实参的数值是-12,if判断后输出负号,并将n=12,计算k+=n%10→k+=2→2,因此输出2,,后将数值除以10,结果为1,递归调用fun()函数,第二次调用fun(),此时n=1,k=2,计算k+=n%10→k+=1→3,因此打印3,。 故最后打印结果为-2,3,。 故答案为A选项。 29、有以下程序 #include structS{intn;inta[20];}; voidf(structS*p) {inti,j,t; for(i=0;i for(j=i+1;j if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;} } main() {inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i } 程序运行后的输出结果是 A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)2,3,1,6,8,7,5,4,10,9, D)10,9,8,7,6,1,2,3,4,5, 参考答案: A 结构体s中n代表数组的实际长度,a是个定长数组。 函数f(),对结构体S内的a数组元素使用冒泡法进行递增排序。 因此最终数组的元素是一个递增序列。 故答案为A选项。 30、有以下程序 #include typedefstructstu{ charname[10]; chargender; intscore; }STU; voidf(STUa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机 二级 选择题 题库 35