二级C语言 2套 选择题的副本.docx

上传人:b****5 文档编号:29193903 上传时间:2023-07-21 格式:DOCX 页数:25 大小:26.55KB
下载 相关 举报
二级C语言 2套 选择题的副本.docx_第1页
第1页 / 共25页
二级C语言 2套 选择题的副本.docx_第2页
第2页 / 共25页
二级C语言 2套 选择题的副本.docx_第3页
第3页 / 共25页
二级C语言 2套 选择题的副本.docx_第4页
第4页 / 共25页
二级C语言 2套 选择题的副本.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

二级C语言 2套 选择题的副本.docx

《二级C语言 2套 选择题的副本.docx》由会员分享,可在线阅读,更多相关《二级C语言 2套 选择题的副本.docx(25页珍藏版)》请在冰豆网上搜索。

二级C语言 2套 选择题的副本.docx

二级C语言2套选择题的副本

(1)算法空间复杂度的度量方法是

A)算法程序的长度

B)算法所处理的数据量

C)执行算法所需要的工作单元

D)执行算法所需要的存储空间

答案:

D

【解析】算法的空间复杂度是指执行这个算法所需要的内存空间,。

算法执行期间所需的存储空间包括3个部分:

输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。

D选项正确。

(2)下列叙述中正确的是

A)循环队列属于队列的链式存储结构

B)双向链表是二叉树的链式存储结构

C)非线性结构只能采用链式存储结构

D)有的非线性结构也可以采用顺序存储结构

答案:

D

【解析】循环队列是队列的一种顺序存储结构,A选项错误。

双向链表为顺序存储结构,二叉树通常采用链式存储结构,B选项错误。

完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式,C选项错误,D选项正确。

(3)下列叙述中正确的是(  )。

A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C)顺序存储结构能存储有序表,链式存储结构不能存储有序表

D)链式存储结构比顺序存储结构节省存储空间

答案:

A

【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。

链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。

(4)下列关于栈的叙述中,正确的是

A)栈底元素一定是最后入栈的元素

B)栈顶元素一定是最先入栈的元素

C)栈操作遵循先进后出的原则

D)以上说法均错误

答案:

C

【解析】栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。

栈的修改是按后进先出的原则进行的。

因此,栈称为先进后出表,或"后进先出"表,所以选择C。

(5)在软件设计中不使用的工具是(  )。

A)系统结构图

B)PAD图

C)数据流图(DFD图)

D)程序流程图

答案:

C

【解析】系统结构图是对软件系统结构的总体设计的图形显示。

在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。

PAD图是在详细设计阶段用到的。

程序流程图是对程序流程的图形表示,在详细设计过程中用到。

数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择C)。

(6)下面对类-对象主要特征描述正确的是()。

A)对象唯一性

B)对象无关性

C)类的单一性

D)类的依赖性

答案:

A

【解析】对象的基本特点是:

标识唯一性、分类性、多态性、封装性、模块独立性好。

类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。

对象具有的性质,类也具有。

故A选项正确。

(7)在软件开发中,需求分析阶段产生的主要文档是(  )。

A)可行性分析报告

B)软件需求规格说明书

C)概要设计说明书

D)集成测试计划

答案:

B

【解析】A)错误,可行性分析阶段产生可行性分析报告。

C)错误,概要设计说明书是总体设计阶段产生的文档。

D)错误,集成测试计划是在概要设计阶段编写的文档。

B)正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。

(8)下面对软件测试描述错误的是()。

A)严格执行测试计划,排除测试的随意性

B)随机地选取测试数据

C)测试根本目的是尽可能多地发现并排除软件中隐藏的错误

D)软件测试是保证软件质量的重要手段

答案:

B

【解析】在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,应选择有代表性的,尽可能发现迄今为止尚未发现的错误,A选项叙述正确,B选项叙述错误。

测试根本目的是尽可能多地发现并排除软件中隐藏的错误,C选项叙述正确。

软件测试是保证软件质量、可靠性的关键步骤,D选项叙述正确。

故正确答案为B选项。

(9)在数据库系统中,用于对客观世界中复杂事物的结构及它们之间的联系进行描述的是

A)概念数据模型

B)逻辑数据模型

C)物理数据模型

D)关系数据模型

答案:

A

【解析】数据模型按照不同的应用层次分为以下3种类型:

概念数据模型,着重于对客观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。

A选项正确。

(10)公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。

则实体部门和职员间的联系是

A)1:

1联系

B)m:

1联系

C)1:

m联系

D)m:

n联系

答案:

C

【解析】两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系(1:

1)、一对多联系(1:

m)、多对一联系(m:

1)、多对多联系(m:

n)。

对于每一个实体部门,都有多名职员,则其对应的联系为一对多联系(1:

m),答案选C。

(11)关于程序中的注释,以下叙述正确的是()。

A)注释的内容必须放在一对/*和*/之间

B)注释必须置于所说明的语句前或语句后

C)注释中间可以嵌套另一个注释

D)注释内容错误会导致编译出错

答案:

A

【解析】程序中,注释可以出现在程序的任何位置,B选项错误;注释中间不能嵌套另一个注释,C选项错误;注释内容不影响程序编译,D选项错误,答案为A选项。

(12)有以下程序

#include

main()

{intk=-17;

printf("%d,%o,%x\n",k,1-k,1-k);

}

程序的运行结果是()。

A)-17,22,12

B)-17,12,22

C)-17,-22,-12

D)17,22,12

答案:

A

【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。

十进制整常量没有前缀,输出格式控制符为%d;八进制整常量以0作为前缀,输出格式控制符为%o;十六进制整常量以0X或0x作为前缀,输出格式控制符为%x。

1-k=18,整型常量18用八进制表示为22,十六进制表示为12,A选项正确。

(13)以下定义语句中正确的是()。

A)inta=b=0;

B)charA=65+1,b='b';

C)floata=1,*b=&a,*c=&b;

D)doublea=0.0;b=1.1;

答案:

B

【解析】A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*b、*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。

(14)有以下程序:

#include

main()

{ ints,t,A=10;doubleB=6;

  s=sizeof(A);t=sizeof(B);

  printf("%d,%d\n",s,t);

}

在VC6.0平台上编译运行,程序运行后的输出结果是(  )。

A)10,6

B)4,4

C)2,4

D)4,8

答案:

D

【解析】C语言中利用sizeof()函数判断数据类型长度,在VC6.0平台中,整型int占有4个字节,double型数据占有8个字节。

(15)表达式:

(int)((double)9/2)-9%2的值是()。

A)0

B)3

C)4

D)5

答案:

B

【解析】先将整型数据9强制转换成double型,然后除以2得到的结果与double型保持一致,即为4.5,然后将4.5强制转换成整型数据4,然后计算9%2的值为1,最后计算4-1的值为3,所以选择B选项。

(16)设有定义:

intx=11,y=12,z=0;,以下表达式值不等于12的是()。

A)(z,x,y)

B)(z=x,y)

C)z=(x,y)

D)z=(x==y)

答案:

D

【解析】逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。

赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。

成功实现赋值后以左值为返回值。

逻辑表达式成立则返回1,不成立返回0。

A选项逻辑表达式x==y不成立,则z=0,表达式值为0。

B选项中逗号表达式x,y取y值为表达式值,然后赋值给z=12,表达式值为12。

C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12。

D选项逗号表达式(z,x,y)取y值为表达式值12。

选择D选项。

(17)若有定义:

inta=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++)?

c++:

d++,以下关于其执行顺序的叙述正确是()。

A)先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)的值为0,因此执行d++

B)先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++

C)先执行a++,表确定(a++&&b++)值为1,因此执行c++达式a++的值为1;再执行b++,表达式b++的值为1,由此可

D)先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++

答案:

A

【解析】表达式1?

表达式2:

表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。

逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++,答案为A选项

(18)有以下程序:

#include

main()

{unsignedchara=2,b=4,c=5,d;

d=a|b;d&=c;printf("%d\n",d);}

程序运行后的输出结果是(  )。

A)3

B)4

C)5

D)6

答案:

B

【解析】&按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。

|按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。

2的二进制为00000010,4的二进制为00000100,所以做或运算结果为00000110,该数与5即00000101做与操作结果为00000100,即4

(19)有以下程序

#include

main()

{charc;

c=getchar();

do{

putchar(c++);

}while((c=getchar())!

='#');

}

程序运行时从第一列开始输入:

abcdefg##<回车>,则输出结果是()。

A)bcdefgh$

B)bcdefgh

C)abcdefg#

D)abcdefg

答案:

D

【解析】运算符"++"放在变量后面时,先参与其他操作,再对变量+1。

putchar(c++)表示先输出当前c值,再对c值+1,当输入abcdef##时,在while语句中,程序输入"#",循环退出。

因此输出为abcdefg,答案为D选项。

(20)若有定义:

charc;intd;,程序运行时输入:

1,2<回车>,能把值1输入给变量c、值2输入给变量d的输入语句是

A)scanf("%c,%d",&c,&d);

B)scanf("%c%d",&c,&d);

C)scanf("%d,%f",&c,&d);

D)scanf("%d%d",&c,&d);

答案:

A

【解析】scanf函数的调用格式为:

scanf(格式控制串,地址列表);,格式控制串,由%开头,后跟格式字符,如c对应字符型变量,d对应整型变量。

地址表列需要读入的是所有变量的地址或字符串的首地址。

如果除了格式说明字符和附加格式字符外,如果还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,比如两个格式说明之间有一个逗号,则从键盘输入时输入量之间也应照原样输入逗号。

A选项正确。

(21)有以下程序

#include

main()

{inta=1,b=2,c=3,d=0;

if(a==1&&b++==2)

if(b!

=2||c--!

=3)

printf("%d,%d,%d\n",a,b,c);

elseprintf("%d,%d,%d\n",a,b,c);

elseprintf("%d,%d,%d\n",a,b,c);

}

程序运行后的输出结果是()。

A)1,3,2

B)1,3,3

C)1,2,3

D)3,2,1

答案:

B

【解析】else总是和最近的if配对,所以进入第一个if语句中条件判断时,因为是逻辑与操作需要两边运算对象的值均为非零值,才为真,所以需要逐个执行判断的结果为1,不再执行第二个case语句中的操作。而是进入第二个if语句条件判断,因为b!

=2条件成立所以整个条件表达式的值为真,所以不再执行逻辑或的第二个运算对象(c--!

=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。

(22)有以下程序

#include

main()

{ints;

scanf("%d",&s);

while(s>0)

{switch(s)

{case1:

printf("%d",s+5);

case2:

printf("%d",s+4);break;

case3:

printf("%d",s+3);

default:

printf("%d",s+1);break;

}

scanf("%d",&s);

}

}

运行时,若输入123450<回车>,则输出结果是()。

A)66656

B)6566456

C)66666

D)6666656

答案:

B

【解析】switch语句的执行流程是:

首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句。然后退出。所以输入1时打印65,输入2时打印6,输入3时打印64,输入4时打印5,输入5时打印6。

(23)设有以下代码

do{

while(条件表达式1)

循环体A;

}while(条件表达式2);

while(条件表达式1)

{

do{

循环体B;

}while(条件表达式2);

}

其中,循环体A与循环体B相同,以下叙述正确的是()。

A)循环体A与循环体B的执行次数相同

B)循环体A比循环体B的执行次数多一次

C)循环体A比循环体B的执行次数少一次

D)循环体A与循环体B的执行次数不确定

答案:

A

【解析】while循环语句一般形式为:

while(表达式){循环体},执行过程为:

首先判断表达式,成立(非0)则执行循环体,不成立(0)则退出循环。

do…while循环语句一般形式为:

do{循环体}while(表达式),执行过程为:

首先执行循环体,之后判断表达式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。

假设表达式1与表达式2成立次数为n1与n2。

若n1>n2,则循环体A执行次数为n2+1,B执行次数n2+1;若n1

(24)有以下程序

#include

main()

{inta=0,b=0;

for(;a<5;a++)

{if(a%2==0)continue;

b+=a;

break;

}

printf("%d\n",b);

}

程序运行后的输出结果是()。

A)1

B)4

C)0

D)10

答案:

A

【解析】for语句中,当a=0时,满足for循环中if语句的条件,执行continue继续下一次循环,a+1后再进入for语句循环,此时a=1不满足if语句,执行b=b+a为1,接着执行break语句,终止循环,最后输出b=1,故答案为A选项。

(25)有以下程序

#include

main()

{inti=5;

do

{if(i%3==1)

if(i%5==2)

{printf("*%d",i);break;}

i++;

}while(i!

=0);

printf("\n");

}

程序的运行结果是

A)*2*6

B)*3*5

C)*5

D)*7

答案:

D

【解析】do...while语句是先执行后判断,所以第一次先执行循环体,判断i%3==1的条件,由于i为5所以余数为2,条件不成立,执行i++,i的值为6,判断while条件为真,第二次执行循环体,同第一次循环体的执行过程一样,i的值变为7,判断while条件为真,第三次执行循环体,此时i%3==1条件成立,判断i%5==2也成立,打印*与i的值,即*7,然后执行break语句,跳出循环。所以选择D选项。

(26)有以下程序

#include

main()

{intc[6]={10,20,30,40,50,60},*p,*s;

p=c;s=&c[5];

printf("%d\n",s-p);

}

程序运行后的输出结果是()。

A)5

B)50

C)6

D)60

答案:

A

【解析】首先初始化一维数组c[6],语句p=c;指将c[0]元素的地址赋给指针变量p;语句s=&c[5];指将c[5]元素的地址赋给指针变量s。

程序最后输出s-p,即结果为5。

因此A选项正确。

(27)有以下程序

#include

voidfun(inta[],intn,intflag)

{inti=0,j,t;

for(i=0;i

for(j=i+1;j

if(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选项

(28)下列选项中,能正确定义数组的语句是()。

A)intnum[0...2008];

B)intnum[];

C)intN=2008;

intnum[N];

D)#defineN2008

intnum[N];

答案:

D

【解析】C语言不允许定义动态数组,定义数组的大小必须为常量表达式。

A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。

因此D选项正确。

(29)有以下程序

#include

main()

{

inta[4][4]={{1,4,3,2},

{8,6,5,7},

{3,7,2,5},

{4,8,6,1}};

inti,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i])

{

t=a[j][i];

a[j][i]=a[k][i];

a[k][i]=t;

}/*按列排序*/

for(i=0;i<4;i++)

printf("%d,",a[i][i]);

}

程序运行后的输出结果是()。

A)1,6,2,1,

B)8,7,3,1,

C)4,7,5,2,

D)1,6,5,7,

答案:

D

【解析】首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。

通过for语句和if语句,对二维数组各列元素进行由小到大的排序操作,程序最后通过for语句输出二维数组对角线上的元素。

因此D选项正确。

(30)有以下程序

#include

main()

{charw[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"};

inti,j;

for(i=0;i<5;i++)

{j=0;

while(a[i][j]!

='\0')j++;

w[i]=a[i][j/2+1];

}

w[5]='\0';

puts(w);

}

程序运行后的输出结果是()。

A)ekpuz

B)agmrw

C)flqvz

D)djoty

答案:

A

【解析】在for循环中,执行完while语句,j值为字符串数组a的每行字符串的长度,因此w[i]=a[i][j/2+1],数组a的元素a[i][j/2+1]的值赋给一维数组w[i]。

比如i=0;j=6;a[i][j/2+1]=a[0][4]='e',将此值赋给w[0]。

循环依次给数组W赋值最后输出w,答案为A选项。

(31)有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)

#include

#include

main()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1