二级C语言 4套 选择题的副本Word文件下载.docx
- 文档编号:354486
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:27
- 大小:55.85KB
二级C语言 4套 选择题的副本Word文件下载.docx
《二级C语言 4套 选择题的副本Word文件下载.docx》由会员分享,可在线阅读,更多相关《二级C语言 4套 选择题的副本Word文件下载.docx(27页珍藏版)》请在冰点文库上搜索。
C)
D)
【解析】当有序线性表为顺序存储时才能用二分法查找。
可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较
次,而顺序查找需要比较n次。
(6)在最坏情况下
A)快速排序的时间复杂度比冒泡排序的时间复杂度要小
B)快速排序的时间复杂度比希尔排序的时间复杂度要小
C)希尔排序的时间复杂度比直接插入排序的时间复杂度要小
D)快速排序的时间复杂度与希尔排序的时间复杂度是一样的
【解析】对长度为n的线性表排序,下表为常用排序方法时间复杂度:
方法
平均时间
最坏情况时间
冒泡排序
O(n2)
直接插入排序
简单选择排序
快速排序
O(nlog2n)
堆排序
上表中未包括希尔排序,因为希尔排序的时间效率与所取的增量序列有关,如果增量序列为:
d1=n/2,di+1=di/2,在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。
快速排序与冒泡排序的时间复杂度均为O(n2),A选项错误。
快速排序比希尔排序的时间复杂度要大(O(n2)>
O(n1.5)),B选项错误。
希尔排序的时间复杂度比直接插入排序的时间复杂度要小(O(n1.5)<
O(n2)),C选项正确。
快速排序比希尔排序的时间复杂度大(O(n2)>
O(n1.5)),D选项错误。
(7)软件设计中模块划分应遵循的准则是( )。
A)低内聚低耦合
B)高内聚低耦合
C)低内聚高耦合
D)高内聚高耦合
B
【解析】软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。
模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。
模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。
(8)下面属于白盒测试方法的是
A)等价类划分法
B)逻辑覆盖
C)边界值分析法
D)错误推测法
【解析】白盒测试法主要有逻辑覆盖、基本路径测试等。
逻辑覆盖测试包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断-条件覆盖,选择B。
其余为黑盒测试法。
(9)有三个关系表R、S和T如下,其中三个关系对应的关键字分别为A,B和复合关键字(A,B)。
表T的记录项(b,q,4)违反了
A)实体完整性约束
B)参照完整性约束
C)用户定义的完整性约束
D)关系完整性约束
【解析】关系模型中可以有3类完整性约束:
实体完整性约束、参照完整性约束和用户定义的完整性约束。
实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。
T中主键不为空,A选项错误。
参照完整性约束是指,若属性(或属性组)A是关系M的外键,它与关系M的主码相对应,则对于关系M中的每个元组在A上的值必须为:
要么取空值;
要么等于关系M中某个元组的主码值。
属性B为关系S的外键,它与关系S的主键相对应,则T中元组在B上应该为空或者与S中主键值相等,题目中不相等,违反参照完整性约束,B选项正确。
此题关系中无语义要求,C选项错误。
(10)学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2且成绩及格的学生学号的表达式为
A)
B)
A
表示针对属性进行的投影运算,表示针对元组进行的选择运算,‘’表示交运算,‘’表示并运算。
要求检索结果为关系模式中的学生学号S#,首先在几种属性中选择学生学号,其次要在其中选择满足条件的元组,条件是课号为2且成绩及格,即为“”,故完整表达式为。
本题选A选项。
(11)以下叙述正确的是()。
A)计算机只接收由0和1代码组成的二进制指令或数据
B)计算机只接收由0和1代码组成的十进制指令或数据
C)计算机可直接接收并运行C源程序
D)计算机可直接接收并运行任意高级语言编写的源程序
【解析】计算机认识自己的母语--机器语言,即0和1代码组成的二进制指令或数据,故A选项正确,B选项错误。
C语言是一种高级语言,计算机不能直接运行C源程序和高级语言编写的源程序,C和D选项错误。
(12)在源程序的开始处加上
#include<
stdio.h>
进行文件引用的原因,以下叙述正确的是()。
A)stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf等函数
B)将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行
C)将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接
D)将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接
【解析】stdio.h文件中包含标准输入输出函数的函数说明,预处理指令#include<
是使程序可以去该文件中找到printf,scanf等函数以便使用,因此答案为A选项。
(13)有以下程序
#include<
main()
{
printf("
%d\n"
NULL);
}
程序运行后的输出结果是()。
A)0
B)变量无定义,输出不确定
C)-1
D)1
【解析】NULL是在stdio.h头文件中定义的预定义符,NULL的代码值为0,如果以整型格式输出则输出0。
A选项正确。
(14)有如下程序
string.h>
main()
strlen("
0\n011\1"
));
程序运行后的输出结果是
A)6
B)8
C)9
D)4
【解析】由一对双引号括起来的一串字符为字符串。
字符常量是用一对单引号括起来的单个字符,还有一些特殊字符常量,即以“\”开头的转义字符。
“\”后可以为某些单个字符也可以为八进制或十六进制数字。
strlen函数统计字符串长度,遇到“\0”统计结束。
‘0’‘\n’‘0’‘1’‘1’‘\1’共6个字符,A选项正确。
(15)以下非法的定义语句是()。
A)longb=0L;
B)unsignedinta=-100u;
C)shortc2=0123;
D)intd=0x0;
【解析】unsigned定义的是"
无符号数"
,则B选项定义错误,答案为B选项。
(16)不能正确表示数学式
的表达式是
A)a/c*b
B)a*b/c
C)a/b*c
D)a*(b/c)
【解析】/号和*号的优先级处于平级,结合性都是自左至右。所以选择C,C式子表示的是
。
(17)有以下程序
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语言中用"
%%"
打印输出字符"
%"
所以%%d,输出为%d两个普通字符,而不是格式控制符"
%d"
的含义,所以打印结果为C。
(18)以下选项中错误的是()。
A)a&
=b与a=a&
b等价
B)a^=b与a=a^b等价
C)a|=b与a=a|b等价
D)a!
^=b与a=a!
^b等价
D
【解析】D选项中,a!
=b表示a不等于b时,运算结果为1,或者为0;
而a=a!
b是一种语法错误,!
是非运算,且是单目运算符,只要求有一个操作数,故两者不等价,答案为D选项。
(19)有以下程序段:
inta,b,c;
a=10;
b=50;
c=30;
if(a>
b)a=b,b=c;
c=a;
a=%db=%dc=%d\n"
a,b,c);
程序的输出结果是( )。
A)a=10b=50c=30
B)a=10b=50c=10
C)a=10b=30c=10
D)a=50b=30c=50
【解析】本题中a>
b的条件不满足,所以不执行逗号表达式a=b,b=c;
的操作,而是执行c=a操作,即c的值为10。
(20)有如下嵌套的if语句
if(a<
b)
c)k=a;
elsek=c;
else
if(b<
c)k=b;
以下选项中与上述if语句等价的语句是
A)k=(a<
b)?
((b<
c)?
a:
b):
((b>
b:
c);
B)k=(a<
((a<
c):
C)k=(a<
b;
k=(b<
c;
D)k=(a<
k=(a<
【解析】题目中嵌套语句的含义是当a<
b且a<
c成立,则将a的值赋给k,如果a<
b成立而a<
c不成立将c的值赋给k。如果a<
b不成立而b<
c成立,将b的值赋给k,如果如果a<
b不成立且b<
c也不成立,将c的值赋给k。判断条件表达式只有B选项可以表示这个含义。
(21)有以下程序段:
inti,n;
for(i=0;
i<
8;
i++)
{ n=rand()%5;
switch(n)
{ case1:
case3:
%d\n"
,n);
break;
case2:
case4:
continue;
case0:
exit(0);
}
printf("
,n);
以下关于程序段执行情况的叙述,正确的是( )。
A)for循环语句固定执行8次
B)当产生的随机数n为4时结束循环操作
C)当产生的随机数n为1和2时不做任何操作
D)当产生的随机数n为0时结束程序运行
【解析】case常量表达式只是起语句标号作用,并不是该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不再进行判断,直到碰到break或函数结束为止。
简单的说break是结束整个循环体,而continue是结束单次循环。
B)选项中当产生的随机数n为4时要执行打印操作。
C)选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。
由于存在break语句所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。
(22)有如下程序
inti,*ptr;
intarray[3]={8,2,4};
for(ptr=array,i=0;
2;
i++)
%d,"
*ptr++);
\n"
);
A)8,2,
B)8,8,
C)2,4,
D)4,8,
【解析】程序执行过程为:
定义指针ptr与数组array,执行for循环,使指针指向数组,i=0,输出指针指向的元素array[0]=8,然后指针加1,指向数组下一个元素;
i=1,输出array[1]=2,指针指向数组下一个元素;
i=2退出for循环。
程序依次输出8,2,A选项正确。
(23)有以下程序
{
inti,j,x=0;
for(i=0;
x++;
for(j=0;
j<
=3;
j++)
if(j%2)continue;
x=%d\n"
x);
程序执行后的输出结果是
A)x=4
B)x=8
C)x=6
D)x=12
【解析】coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次执行外循环i的值为0,执行x++,x的值变为1,第一次执行内层循环j的值为0,不满足if条件,执行x++,x的值变为2,第二次内循环j的值为1,if条件成立,跳出本次循环,第三次执行内循环j的值为2,不满足if条件,x的值变为3,第四次执行内循环j的值为3满足条件跳出本次内循环,x的值加1,即为4,第一次外循环结束。第二次执行外循环时,同理,i的值被加了,4次,变为8,所以选择B选项。
(24)设有如下程序段
inta[1]={0};
intb[]={9};
charc[3]={"
A"
"
B"
};
chard="
12"
;
以下叙述正确的是()。
A)a,b的定义合法,c,d的定义不合法
B)a,b,c,d的定义都是合法的
C)a,b,c的定义是合法的,d的定义不合法
D)只有a的定义是合法的
【解析】inta[1]={0}表示定义一个数组a[1]初值为0,intb[]={9},表示定义一个数组b,其中只有一个值9,系统自动识别数组有1个元素。
},数组元素为字符串,需要用二维数组来表示,C选项错误;
chard="
,字符串常量不能赋值给字符变量,D选项错误;
因此答案为A选项。
(25)设有定义
doublea[10],*s=a;
以下能够代表数组元素a[3]的是()。
A)(*s)[3]
B)*(s+3)
C)*s[3]
D)*s+3
【解析】指针的赋值首先基类型必须一致,s二维数组名,是二维数组的首地址,其基类型是一个具有10个元素的字符数组。
p是一个字符指针变量,其基类型是一个字符,k是一个行指针,其基类型是具有3个元素的字符型数组。
所以A、C、D中两项的基类型不一致。
而B选项,s[0]是二维数组s的第一个元素,其代表第一行元素构成的数组的首地址,其相当于一维数组的数组名,其基类型是一个字符类型,和p基类型一致。
因此B选项正确。
(26)#include<
#defineN4
voidfun(inta[][N])
{
inti;
N;
i++)
a[0][i]+=a[N-1][N-1-i];
main()
{intx[N][N]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}},i;
fun(x);
for(i=0;
i<
i++)printf("
x[i][i]);
A)4,7,10,13,
B)1,6,11,16,
C)17,6,11,16,
D)5,13,21,29,
【解析】N=4,for(i=0,i<
N,i++)printf(x[i][j]);
此语句输出x[0][0],x[1][1],x[2][2],x[3][3],其中只有x[0][0]的值在fun函数中发生改变,在fun函数中,当i=0时,x[0][0]=x[0][0]+x[3][3]=17,程序运行后的输出结果是:
17.6.11.16。
因此答案为C选项。
(27)有以下程序
charch[]="
uvwxyz"
*pc;
pc=ch;
%c\n"
*(pc+5));
A)z
B)0
C)元素ch[5]的地址
D)字符y的地址
【解析】语句pc=ch;
使得指针变量指向字符数组ch的首地址,即指向字符'
u'
。
则pc+5指向的是字符向后移动5位,指向字符'
z'
所以输出的*pc+5的值即为'
因此A选项正确。
(28)有以下程序
voidfun(char*w,intm)
{chars,*p1,*p2;
p1=w;
p2=w+m-1;
while(p1<
p2)
s=*p1;
*p1=*p2;
*p2=s;
p1++;
p2--;
{chara[]="
123456"
fun(a,strlen(a));
puts(a);
A)123456
B)116611
C)161616
D)654321
【解析】主函数中调用fun(a,6)后,指针p1指向字符串中的"
1"
、p2指向字符串中的"
6"
While循环中,只要p1<
p2,则把p1、p2所指向的字符互换,同时p1前移,p2后移。
最终字符串逆序存放。
因此D选项正确。
(29)若有以下程序
{chara[20],b[]="
Theskyisblue."
10;
i++)scanf("
%c"
&
a[i]);
a[i]='
\0'
gets(b);
%s%s\n"
a,b);
执行时若输入:
Figflowerisred.<
回车>
则输出结果是()。
A)Figflowerisred.isblue.
B)Figflowerisred.
C)Figflowerisred.
D)Figfloweris
【解析】本题考查字符数组的赋值以及字符串的处理函数,本题中输入字符串Figflowerisred时,首先是将前10个字符赋值给字符数组a,然后执行gets(b)后,将后续字符存放到b中,当输出时,首先输出字符数组a,然后输出字符串b,所以结果为B选项。
(30)有以下程序
{chars[]="
012xy\08s34f4w2"
inti,n=0;
for(i=0;
s[i]!
=0;
i++)
if(s[i]>
='
0'
&
&
s[i]<
9'
)n++;
n);
A)7
C)3
D)8
【解析】题意统计字符s中阿拉伯数字的个数。
chars[]='012xy\08s34f4w2';
元素是字符型。
'0'=48;
而'\0'=0;
因此可以计算出'\0'之前阿拉伯数字的个数,由字符串s可知,有3个阿拉伯数字。
答案为C选项。
(31)若有定义语句:
char*s1="
OK"
*s2="
ok"
以下选项中,能够输出"
的语句是()。
A)if(strcmp(s1,s2)!
=0)puts(s2);
B)if(strcmp(s1,s2)!
=0)puts(s1);
C)if(strcmp(s1,s2)==1)puts(s1);
D)if(strcmp(s1,s2)==0)puts(s1);
【解析】strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。
因为'
OK'
<
'
ok'
,所以strcmp(s1,s2)为负值,只有B选项正确。
(32)以下关于return语句的叙述中正确的是()。
A)一个自定义函数中必须有一条return语句
B)一个自定义函数中可以根据不同情况设置多条ret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级C语言 4套 选择题的副本 二级 语言 选择题 副本