全国计算机等级考试二级C语言真题库之选择题17.docx
- 文档编号:6193173
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:19
- 大小:41.27KB
全国计算机等级考试二级C语言真题库之选择题17.docx
《全国计算机等级考试二级C语言真题库之选择题17.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题库之选择题17.docx(19页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言真题库之选择题17
全国计算机等级考试等级考试真题库之选择题(17)
1.下列叙述中正确的是
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定小
C)一个算法的时间复杂度大,则其空间复杂度必定小
D)算法的时间复杂度与空间复杂度没有直接关系
参考答案:
D
【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。
2.下列叙述中正确的是
A)循环队列中的元素个数随队头指针与队尾指针的变化而动态变化
B)循环队列中的元素个数随队头指针的变化而动态变化
C)循环队列中的元素个数随队尾指针的变化而动态变化
D)以上说法都不对
参考答案:
A
【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。
所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。
3.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为
A)219
B)229
C)230
D)231
参考答案:
B
【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。
4.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为
A)9
B)10
C)45
D)90
参考答案:
C
【解析】冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。
5.构成计算机软件的是
A)源代码
B)程序和数据
C)程序和文档
D)程序、数据及相关文档
参考答案:
D
【解析】软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。
6.软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是
A)测试
B)设计
C)可行性研究
D)实现
参考答案:
C
【解析】开发阶段包括分析、设计和实施两类任务。
其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。
7.下面不能作为结构化方法软件需求分析工具的是
A)系统结构图
B)数据字典(DD)
C)数据流程图(DFD图)
D)判定表
参考答案:
A
【解析】结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。
8.在关系模型中,每一个二维表称为一个
A)关系
B)属性
C)元组
D)主码(键)
参考答案:
A
【解析】关系模型采用二维表来表示,即每个二维表称为一个关系。
9.若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是
A)一对一
B)一对多
C)多对一
D)多对多
参考答案:
B
【解析】A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。
10.
A)选择
B)投影
C)交
D)并
参考答案:
D
【解析】关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。
11.以下叙述中正确的是
A)C语言程序所调用的函数必须放在main函数的前面
B)C语言程序总是从最前面的函数开始执行
C)C语言程序中main函数必须放在程序的开始位置
D)C语言程序总是从main函数开始执行
参考答案:
D
【解析】C语言所调用的函数可以放在调用它的函数前,也可以放在调用它的函数后,所以A错误。C语言程序总是从main函数开始执行,所以B错误。main函数的位置可以放在开始,也可以放在中间,也可以放在最后,所以C错误。
12.C语言程序中,运算对象必须是整型数的运算符是
A)&&
B)/
C)%
D)*
参考答案:
C
【解析】%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。
13.有以下程序
#include
main()
{
intsum,pad,pAd;
sum=pad=5;
pAd=++sum,pAd++,++pad;
printf("%d\n",pad);
}
程序的输出结果是
A)5
B)6
C)7
D)8
参考答案:
B
【解析】C语言区分大小写,pad与pAd是两个不同的变量。首先将5赋值给两个变量,由于赋值运算符的优先级高于逗号运算符,所以计算pAd=++sum,此时pAd为6,sum也为6,然后计算pAd++,pAd的值变为7,++pad,pad的值变为6,所以选择B。
14.有以下程序
#include
main()
{
inta=3;
a+=a-=a*a;
printf("%d\n",a);
}
程序的输出结果是
A)0
B)9
C)3
D)-12
参考答案:
D
【解析】首先计算a*a结果为9,执行a=a-9,a的值为-6,然后执行a+=a,即a=a+a=-6+(-6),所以值为-12。
15.sizeof(double)是
A)一个整型表达式
B)一个双精度型表达式
C)一个不合法的表达式
D)一种函数调用
参考答案:
A
【解析】sizeof是C语言中的一个操作符(operator),不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数。所以选择A。
16.有以下程序
#include
main()
{
inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);
}
程序的输出结果是
A)a=2,b=5
B)a=%2,b=%5
C)a=%d,b=%d
D)a=%%d,b=%%d
参考答案:
C
【解析】C语言中用"%%"打印输出字符"%",所以%%d,输出为%d两个普通字符,而不是格式控制符"%d"的含义,所以打印结果为C。
17.若有定义语句:
chara='\82';
则变量a
A)说明不合法
B)包含1个字符
C)包含2个字符
D)包含3个字符
参考答案:
A
【解析】定义语句:
chara='\82';定义字符变量a,但是赋初值时却给赋值字符常量,因此A选项正确。
18.有以下程序
#include
main()
{
charc1='A',c2='Y';
printf("%d,%d\n",c1,c2);
}
程序的输出结果是
A)输出格式不合法,输出出错信息
B)65,89
C)65,90
D)A,Y
参考答案:
B
【解析】本题重点考察字符变量的相关知识。
分别给字符型变量a和b分别赋值为'A'和'Y',即A和Y的ASSCII码,因此输出结果为65,89,因此B选项正确。
19.若变量已正确定义
for(x=0,y=0;(y!
=99&&x<4);x++)
则以上for循环
A)执行3次
B)执行4次
C)执行无限次
D)执行次数不定
参考答案:
B
【解析】本题重点考察for语句的循环次数,for(x=0,y=0;(y!
=99&&x<4);x++),y!
=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。
20.对于while(!
E)s;,若要执行循环体s,则E的取值应为:
A)E等于1
B)E不等于0
C)E不等于1
D)E等于0
参考答案:
D
【解析】while语句的一般形式为:
while(表达式)语句;其中表达式是循环条件,语句为循环体。
while语句的语义是:
计算表达式的值,当值为真(非0)时,执行循环体语句。
该题中如要执行语句s,则!
E应为真,因此E应等于0,D选项正确。
21.有以下程序
#include
main()
{
intx;
for(x=3;x<6;x++)
printf((x%2)?
("*%d"):
("#%d"),x);
printf("\n");
}
程序的输出结果是
A)*3#4*5
B)#3*4#5
C)*3*4#5
D)*3#4#5
参考答案:
A
【解析】条件运算符组成条件表达式的一般形式为:
表达式1?
表达式2:
表达式3
其求值规则为:
如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。
本题中语句printf((x%2)?
("*%d"):
("#%d"),x);含义为变量x对2求余,如果结果为真,则按照"*%d"格式输出,否则按照#%d输出。
因此A选项正确。
22.有以下程序
#include
main()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1){b=b+3;continue;}
b=b-5;
}
printf("%d\n",a);
}
程序的输出结果是
A)10
B)9
C)8
D)7
参考答案:
B
【解析】首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%3==1条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%3==1也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。
此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。
此时a为8.综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。
所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8.因此B选项正确。
23.有以下程序
#include
voidfun(intx,inty,int*c,int*d)
{*c=x+y;*d=x-y;}
main()
{inta=4,b=3,c=0,d=0;
fun(a,b,&c,&d);
printf("%d%d\n",c,d);
}
程序的输出结果是
A)00
B)43
C)34
D)71
参考答案:
D
【解析】主函数中首先初始化整型变量a、b、c、d分别为4、3、0、0。
调用函数fun,将实参传递给形参。
在fun函数内,*c=7、*d=1。
返回主函数,最后输出7和1。
因此D选项正确。
24.有以下程序
#include
voidfun(int*p,int*q)
{intt;
t=*p;*p=*q;*q=t;
*q=*p;
}
main()
{inta=0,b=9;
fun(&a,&b);
printf("%d%d\n",a,b);
}
程序的输出结果是
A)90
B)00
C)99
D)09
参考答案:
C
【解析】主函数中定义整型变量a、b,分别赋值0和9。
将a和b的地址传递给指针变量p和q,函数fun中将a和b的值互换后,又将a的值赋给b。
返回主函数,最后输出9和9。
因此C选项正确。
25.有以下程序
#include
main()
{inta[]={2,4,6,8,10},x,*p,y=1;
p=&a[1];
for(x=0;x<3;x++)y+=*(p+x);
printf("%d\n",y);
}
程序的输出结果是
A)13
B)19
C)11
D)15
参考答案:
B
【解析】本题通过语句"p=&a[1]"将指针变量p指向了存储单元a[1],即使得p[0]的值为4,y的初始值为1,然后通过3次for循环,使得y的值分别加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以输出的y的值为19。
26.有以下程序
#include
main()
{
inti,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",x[i][2-i]);
printf("\n");
}
程序的输出结果是
A)150
B)357
C)147
D)369
参考答案:
B
程序首先初始化二维数组x[3][3],然后通过3次for循环,输出x[0][2]、x[1][1]和x[2][0]的值,即3、5、7。
因此B选项正确。
27.设有某函数的说明为
int*func(inta[10],intn);
则下列叙述中,正确的是
A)形参a对应的实参只能是数组名
B)说明中的a[10]写成a[]或*a效果完全一样
C)func的函数体中不能对a进行移动指针(如a++)的操作
D)只有指向10个整数内存单元的指针,才能作为实参传给a
参考答案:
B
本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:
类型名*函数名(参数列表)。
func函数被定义为指针型函数,它的形参inta[10]和intn,分别指一维数组a[0]和整型变量n。
28.有以下程序
#include
charfun(char*c)
{
if(*c<='Z'&&*c>='A')
*c-='A'-'a';
return*c;
}
main()
{
chars[81],*p=s;
gets(s);
while(*p)
{
*p=fun(p);
putchar(*p);
p++;
}
printf("\n");
}
若运行时从键盘上输入OPENTHEDOOR<回车>,程序的输出结果是
A)OPENTHEDOOR
B)oPENtHEdOOR
C)openthedoor
D)OpenTheDoor
参考答案:
C
【解析】字符串输入函数gets的功能是从标准输入设备键盘上输入一个字符串。
首先使指针变量p指向字符串的首字母,while循环语句中对字符串的每个字符进行fun函数操作。
fun函数的功能是,将字符串中的大写字母变小写字母。
将处理结果返回主函数,主函数通过putchar()字符输出函数进行输出。
因此C选项正确。
29.设有定义语句:
char*aa[2]={"abcd","ABCD"};
则以下叙述正确的是
A)aa[0]存放了字符串"abcd"的首地址
B)aa数组的两个元素只能存放含有4个字符的一维数组的首地址
C)aa数组的值分别是字符串"abcd"和"ABCD"
D)aa是指针变量,它指向含有两个元素的字符型数组
参考答案:
A
【解析】本题中定义了一个指针数组,数组中存放的是字符指针,aa数组的两个元素分别包含了5个字符,所以可以存放5个字符的一维数组的首地址,所以B选项错误。
aa数组的值是指向那两个字符串的字符指针,而不是那两个字符串,所以C选项错误。
aa本身是一个指向两个字符指针的指针,所以D选项错误。
30.有以下程序
#include
intfun(char*s)
{char*p=s;
while(*p!
=0)p++;
return(p-s);
}
main()
{printf("%d\n",fun("goodbey!
"));}
程序的输出结果是
A)0
B)6
C)7
D)8
参考答案:
C
解析】本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8.
31.有以下程序
#include
intfun(intn)
{inta;
if(n==1)return1;
a=n+fun(n-1);
return(a);
}
main()
{printf("%d\n",fun(5));}
程序的输出结果是
A)9
B)14
C)10
D)15
参考答案:
D
【解析】考查函数的递归调用,只需要一步一步递归调用fun函数即可,执行fun(5)=5+(4+(3+(2+fun
(1))))=15,所以答案为D选项。
32.有以下程序
#include
intd=1;
voidfun(intp)
{
intd=5;
d+=p++;
printf("%d",d);
}
main()
{
inta=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
程序的输出结果是
A)84
B)96
C)94
D)85
参考答案:
A
【解析】本题主要考查局部变量和全局变量的区别,题目中函数之外定义的d为全局变量,函数fun内定义的d为局部变量,所以执行fun函数后,打印出8,执行完d+=a++;后d变为4,所以答案为A。
33.有以下程序
#include
intfun(intA)
{
intb=0;
staticintc=3;
a=(c++,b++);
return(a);
}
main()
{
inta=2,i,k;
for(i=0;i<2;i++)
k=fun(a++);
printf("%d\n",k);
}
程序的输出结果是
A)4
B)0
C)1
D)2
参考答案:
B
【解析】题目中fun函数被执行了两次,两次执行后,都是返回了函数内部的b值,所以答案为0,即B选项正确。
34.有以下程序
#include
main()
{charc[2][5]={"6934","8254"},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)p[i]=c[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>0&&p[i][j]<='9';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
程序的输出结果是
A)693825
B)69825
C)63825
D)6385
参考答案:
D
【解析】本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。
35.有以下程序
#include
#defineSQR(X)X*X
main()
{
inta=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
程序的输出结果是
A)0
B)1
C)9
D)10
参考答案:
B
【解析】本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的结果为1,选项B正确。
36.有以下程序
#include
main()
{charx=2,y=2,z;
z=(y<<1)&(x>>1);
printf("%d\n",z);
}
程序的输出结果是
A)1
B)0
C)4
D)8
参考答案:
B
解析】本题考查位运算<<、&。
y<<1为4,x>>1为1,二者与一下为0,所以B选项正确。
37.有以下程序
#include
structS{inta;intb;};
main()
{structSa,*p=&a;
a.a=99;
printf("%d\n",__________);
}
程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是
A)a.a
B)*p.a
C)p->a
D)(*p).a
参考答案:
B
【解析】本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,*p为结构体变量,那么*p.a可以表示为结构体中成员a的数据。
38.有以下程序
#include
#include
voidfun(double*p1,double*p2,double*s)
{s=(double*)calloc(1,sizeof(double));
*s=*p1+*(p2+1);
}
main()
{doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2f\n",*s);
}
程序的输出结果是
A)21.10
B)11.10
C)12.10
D)1.10
参考答案:
D
【解析】本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1.10,选项D正确。
39.
A)p=p->next;s->next=p;p->next=s;
B)s->next='\0';p=p->next;p->next=s;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 题库 选择题 17