二级C++分类模拟254.docx
《二级C++分类模拟254.docx》由会员分享,可在线阅读,更多相关《二级C++分类模拟254.docx(17页珍藏版)》请在冰点文库上搜索。
二级C++分类模拟254
二级C++分类模拟254
(总分:
65.00,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
65.00)
1.有如下类定义:
classAnimal{
public:
virtualvoidName()=0;
};
classKoala:
publicAnimal{
public:
voidName(){/*函数体略*/}
};
关于上述类定义,下列描述中错误的是______。
(分数:
2.50)
A.类Koala是类Animal的派生类
B.类Koala中的Name函数是一个虚函数
C.类Animal中的Name函数是一个纯虚函数
D.语句“Animala;”能够建立类Animal的一个对象a √
解析:
2.运行以下程序后,如果从键盘上输入shose后回车,则输出结果为_______。
#include<iostream.h>
voidmain(){
intv1=0,v2=0,k=0;
charch[80];
cin>>ch;
while(ch[k]){
switch(ch[k]){
case"s";
case"h";
default:
v1++1;
case"o":
v2++;
}
k++;
}
cout<<v1<<","<<v2<<end1;
}
(分数:
2.00)
A.2,0
B.5,0
C.4,5 √
D.2,5
解析:
3.有下列程序:
#include<stdio.h>
intf(intx,inty)
{return((y-x)*x);}
voidmain()
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d/n",d);
}
程序运行后的输出结果是______。
(分数:
2.50)
A.10
B.9 √
C.8
D.7
解析:
[解析]在C语言中,子函数f(intx,inty)的功能是计算y减去x的差与x之积.所以在主函数中,调用f(a,b)的值等于3,调用f(a,c)的值等于6,然后再调用f(3,6)的值等于9,所以正确答案为选项B。
4.在公有继承的情况下,允许派生类直接访问的基类成员包括______。
(分数:
2.00)
A.公有成员
B.公有成员和保护成员 √
C.公有成员、保护成员和私有成员
D.保护成员
解析:
[解析]此题考查的是派生类对基类成员的访问。
基类的成员有公有、保护和私有三种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。
无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。
5.若目前D盘根目录下并不存在test.txt文件,则下列打开文件方式不会自动创建test.txt文件的是______。
(分数:
2.00)
A.ifstreamfin;fin.open("d:
//test.txt",ios_base:
:
in); √
B.fstreamfio;fio.open("d:
//test.txt",ios_base:
:
out);
C.ofstreamfout;four.open("d:
//test.txt",ios_base:
:
out);
D.ofstreamfout;fout.open("d:
//test.txt",ios_base:
:
app);
解析:
[解析]如果以iso_base:
:
in模式打开文件但文件又不存在时,可以通过fail()测出文件打开失败,不会自动创建文件。
6.考虑函数原型voidtest(inta,intb=7,charz="*7"),下面的函数调用中,属于不合法调用的是______。
(分数:
1.00)
A.test(5);
B.test(5,8);
C.test(6,"#"); √
D.test(0,0,"*");
解析:
[解析]题中函数声明带有默认参数,那么在C选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。
7.若有以下变量和函数说明:
#include<iostream.h>
charCh="*";
voidsub(intx,inty,charch,double*Z)
{
switch(ch)
{
case"+":
*Z=x+y;break:
case"-":
*Z=x-y;break:
case"*":
*Z=x*y;break:
case"/":
*Z=X/y;break;
}
}
以下合法的函数调用语句是____。
(分数:
1.00)
A.sub(10,20,Ch,y);
B.sub(1.2+3,2*2,"+",&Z); √
C.sub(sub(1,2,"+",&y),sub(3,4"+",&x),"-",&y);
D.sub(a,b,&x,ch);
解析:
8.下列程序的运行结果是____。
#include<iostream.h>
voidfun(int*a,int*b)
{int*k;k=a;a=b;b=k;}
voidmain()
{inta=2OO4,b=9,*x=&a,*y=&b;
fun(x,y);
cout<<a<<""<<b<<end1;}
(分数:
2.00)
A.20049 √
B.92004
C.00
D.编译时出错
解析:
9.从工程管理角度,软件设计一般分为两步完成,它们是______。
(分数:
2.50)
A.概要设计与详纲设计 √
B.数据设计与接口设计
C.软件结构设计与数据设计
D.过程设计与数据设计
解析:
[解析]从软件工程角度看,软件设计分为概要设计和详细设计。
概要设计就是结构设计,其主要目标是给出软件的模块结构;详细设计的首要任务是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库。
10.若已定义过类A和B,并且定义类C如下:
classC{
public:
intval;
AaObj;
BbObj;
C*cObj;
C():
cObj(0),val(0){}
};
若要建立类C的对象object,则类成员val、aObj、bObj和cObj中最后被初始化的是______。
(分数:
1.00)
A.val
B.aObj
C.bObj
D.cObj √
解析:
[解析]C++中初始化顺序遵循以下两个原则:
(1)初始化列表的初始化变量顺序是根据成员变量声明的顺序来执行的;
(2)若有成员对象,先初始化成员对象,多个成员变量按规则
(1)执行。
按题中所给声明顺序,最后被初始化的是cObj。
故选择D选项。
11.若有如下语句:
#include<iostream.h>
voidmain()
{
intx=3;
do{
x=x-2;
cout<<x;
}while(!
(--X));
}
则上面程序段
(分数:
2.00)
A.输出的是1
B.输出的是1和-2 √
C.输出的是3和0
D.是死循环
解析:
[解析]do…while语句的一般格式为do循环体语句while(表达式);,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。
本题中,先执行x=x-2,即为1。
判断表达式的值,!
(--x)为真,x=0,继续循环。
再次执行循环体语句后,x=-2,此时表达式的值为0,结束循环。
12.下列关于函数重载的叙述中,错误的是______。
(分数:
2.00)
A.重载函数的参数个数可以不同
B.重载函数的参数类型可以不同
C.重载函数的返回值类型必须不同 √
D.重载函数的参数个数或参数类型必须有所不同
解析:
[解析]两个或两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数进行最佳匹配,自动确定调用哪个函数,这就是函数的重载。
13.下列选项中不全是C++语言关键字的是
(分数:
2.00)
A.const,break,default
B.long,void,using
C.virtual,exterm,include √
D.try,throw,this
解析:
14.有如下函数模板定义:
template<typenameT1,typenameT2>
T1FUN(T2n){returnn*5,0;}
若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为______。
(分数:
1.00)
A.FUN(9)
B.FUN<9>
C.FUN<double>(9) √
D.FUN<9>(double)
解析:
[解析]函数返回类型是double型,则T1为double型,T2为int型才符合函数模板的定义。
15.对于循环队列,下列叙述中正确的是______。
(分数:
2.50)
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针 √
解析:
[解析]所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
在循环队列结构中.当存储空间的最后一个位置已被使用而再要进行八队运算时,只要存储空间的第一个位置空闲,可将元素加入到第一个位置,即将存储空闲的第一个位置作为队尾。
16.支持子程序调用的数据结构是______。
(分数:
1.00)
A..栈 √
B..树
C.队列
D.二叉树
解析:
[解析]栈支持子程序调用。
栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
17.面向对象的开发方法中,类与对象的关系是______。
(分数:
2.50)
A.抽象与具体 √
B.具体与抽象
C.部分与整体
D.整体与部分
解析:
[解析]现实世界中的很多事物都具有相似的性质,把具有相似的属性和操作的对象归为类,也就是说类是具有共同属性、共同方法的对象的集合,是对对象的抽象。
它描述了该对象类型的所有对象的性质,而一个对象则是对应类的一个具体实例。
所以本题正确答案为A选项。
18.有三个关系R、S和T如下:
则由关系R和S得到T的操作是______。
(分数:
2.50)
A.自然连接 √
B..交
C.投影
D..并
解析:
[解析]关系运算中自然连接是使用等于运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
并是指两个结果集合并,交是指两个结果集的公共部分。
投影是从表中选出指定的属性值组成新表,是单目运算,由此可知本题答案为A。
19.以下程序的正确运行结果是____。
#include<iostream.h>
intf(int);
voidmain()
{
inta=2,i;
for(i=0;i<3;i++)cout<<f(a)<<"";
cout<<endl;
}
intf(inta)
{
intb=0
staticintc=3;
b++:
c++;
return(a+b+c);
}
(分数:
1.00)
A.777
B.71013
C.7911
D.789 √
解析:
20.已知各变量的定义如下
inti=8,k,a,b;
unsignedlongw=5;
doublex=1.42,y=5.2;
则以下符合C++语言语法的表达式是____。
(分数:
2.00)
A.a+=a-=(b=4)*(a=3) √
B.a=a*3+2
C.x%(-3)
D.y=floati
解析:
21.有如下程序:
#include<iostream>
usingnamespacestd;
voidf1(int&x,int&y){intz=x;x=y;y=z;}
voidf2(intx,inty){intz=x;x=y;y=z;}
intmain(){
intx=10,y=26;
f1(x,y);
f2(x,y);
cout<<y<<endl;
return0;
}
运行时的输出结果是______。
(分数:
2.50)
A.10 √
B.16
C.26
D.36
解析:
[解析]函数f1的参数传递方式采用传引用方式,调用函数f1后,实参变量x、y的值被交换。
此时,x=26,y=10。
函数f2的参数传递方式采用传值方式,调用函数f2后,不会改变实参变量x、y的值。
故程序输出y的值为10。
22.派生类的构造函数的成员初始化列表中,不能包含______。
(分数:
2.50)
A.基类的构造函数
B.派生类中子对象的初始化
C.基类中子对象的初始化 √
D.派生类中一股数据成员的初始化
解析:
[解析]在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类的构造函数使基类的数据成员得以初始化。
如果派生类中还有子对象,还应包含对子对象初始化的构造函数。
23.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。
与程序的效率相比,人们更重视程序的
(分数:
1.00)
A.安全性
B.一致性
C.可理解性 √
D.合理性
解析:
[解析]结构化程序设计方法设计出的程序具有明显的优点。
其一,程序易于理解、使用和维护;其二,提交了编程工作的效率,降低了软件开发成本。
其中,人们更重视前者。
24.设有以下程序段:
inta[5]={0},*p,*q;
p=a;
q=a;
则下列选项中,合法的运算是____。
(分数:
1.00)
A.p+q
B.p-q √
C.p*q
D.p%q
解析:
[解析]本题考核指针的运算。
C++语言中,指向同一字符串的指针之间能且只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。
25.有如下程序:
#include<iostream>
usingnamespacestd;
classMyClass{
public:
MyClass(intx):
val(X){}
voidSet(intX){val=x;}
voidPrint()const{cout<<"val="<<val<<"/t";}
private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.Print();//语句1
obj2.Print();//语句2
obj1.Set(20);//语句3
obj2.Set(30);//语句4
return0;
}
其主函数中错误的语句是______。
(分数:
2.00)
A.语句1
B.语句2
C.语句3 √
D.语句4
解析:
[解析]在创建类对象obj1(10)时,前面有关键字const,所以当语句3调用obj1的成员函数试图修改其私有成员的数值的时候,会编译出错。
26.在类中重载赋值运算符时,应将其声明为类的______。
(分数:
2.00)
A.静态函数
B.友元函数
C.成员函数 √
D.构造函数
解析:
27.如果有以下定义及初始化:
inta=3,*p=&a;
则由此可以推断,*p的值是______。
(分数:
2.50)
A.变量a的值,即3 √
B.变量a的地址值
C.变量p的地址值
D.无意义
解析:
[解析]此题考查的是指针变量的定义与赋初值。
语句*p=&a是定义指针并且给指针赋初值,指向a,所以指针的值就是变量a的地址,*p的值就是a的值。
28.若MyClass是一个类名,其有如下语句序列:
MyClassc1,*c2;
MyClass*c3=newMyClass;
MyClass&c4=c1;
上面的语句序列所定义的类对象的个数是______。
(分数:
2.50)
A.1
B.2 √
C.3
D.4
解析:
[解析]首先定义对象的格式:
(存储类型)<类名><对象名1>(<对象名2>,…,<对象名n>);第一句定义了对象c1和指针对象c2,而MyClass*c3=newMyClass是Java里的定义方式,MyClass&c4=c1这种定义方式也是不对的。
29.下列语句中正确的是____。
(分数:
2.00)
A.int*p;i=8;p=&i;
B.int*p,i;p=&i; √
C.float*p;inti;p=&(float)i;
D.float*p;cout<<*p;
解析:
[解析]选项A中的变量i没有定义就使用了;选项C(float)i把i中的数据取出后变为float型,就是一个数值,“&(float)i”不能得到i的地址;选项D中的指针变量,p没有赋值就使用,它到底指向哪个存储单元没有指明,它可能指向不可读取的存储单元,这时的破坏性很大。
30.下列关于C++预定义流对象的叙述中,正确的是______。
(分数:
1.00)
A.cin是C++预定义的标准输入流对象 √
B.cin是C++预定义的标准输入流类
C.cout是C++预定义的标准输入流对象
D.cout是C++预定义的标准输入流类
解析:
[解析]cin是C++预定义的标准输入流对象,cout是C++预定义的标准输出流对象。
31.已知枚举类型声明语句为:
enumCOLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};
则下列说法中错误的是
(分数:
2.00)
A.枚举常量YELLOW的值为1
B.枚举常量RED的值为6
C.枚举常量BLACK的值为10
D.枚举常量WHITE的值为1 √
解析:
[解析]枚举变量中的枚举元素系统是按照常量来处理的。
如果没有进行元素赋值操作,那么元素将会被系统从0开始自动递增地进行赋值操作,但是,如果一旦定义了某一个元素的值,那么系统将对下一个元素进行按前一个元素的值加1操作,故wHITE=1,YELLOW=2,GREEN=5,RED=6,BLACK=10。
32.有如下类声明:
classSAMPLE
{
intn;
public:
SAMPLE(inti=0):
n(i){}
voidsetValue(intn0);
};
下列关于getValue成员函数的实现中,正确的是______。
(分数:
2.00)
A.SAMPLE:
:
setValue(int.n0){n=n0;}
B.voidSAMPLE:
:
setValue(intn0){n=n0;} √
C.voidsetValue(intn0){n=n0;}
D.(intn0){n=n0;}
解析:
[解析]此题考查了成员函数的定义格式。
在类外部对成员函数定义时的一般格式为:
返回类型类名:
:
成员函数名(参数表){函数体},故此题正确答案为选项B。
33.生成派生类对象时,派生类构造函数调用基类构造函数的条件是______。
(分数:
2.00)
A.无需任何条件 √
B.基类中显式定义了构造函数
C.派生类中显式定义了构造函数
D.派生类构造函数明确调用了基类构造函数
解析:
34.在软件开发中,需求分析阶段产生的主要文档是____。
(分数:
2.00)
A.软件集成测试计划
B.软件详细设计说明书
C.用户手册
D.软件需求规格说明书 √
解析:
[解析]在软件开发过程中,需求分析阶段产生的要文档是软件需求规格说明书。
35.有如下程序:
#include<iostream>
usingnamespacestd;
classBase{
public:
virtualvoidfunction1(){cout<<"0";}
voidfunction2(){out<<"1";}
};
classDerived:
publicBase{
oublic:
voidfunction1(){cout<<"2";}
voidfunction2(){cout<<"3";}
};
intmain(){
Base*p=newDerived();
p->function1();p->function2();
return0;
}
运行时的输出结果是______。
(分数:
1.00)
A.01
B.21 √
C.03
D.23
解析:
[解析]本题中需要注意的是虚函数的定义:
指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
所以p->functionl();会指向实现类Derived,而p->function2()则会指向Base。