二级C++分类模拟255.docx
《二级C++分类模拟255.docx》由会员分享,可在线阅读,更多相关《二级C++分类模拟255.docx(14页珍藏版)》请在冰豆网上搜索。
二级C++分类模拟255
二级C++分类模拟255
(总分:
62.00,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
62.00)
1.派生类的成员函数不能访问基类的______。
(分数:
2.50)
A.共有成员和保护成员
B.共有成员
C.私有成员 √
D.保护成员
解析:
[解析]类的私有成员只能在其内部访问。
2.下列叙述中正确的是______。
(分数:
1.00)
A.软件测试应该由程序开发者来完成
B.程序经调试后一般不需要再测试
C.软件维护只包括对程序代码的维护
D.以上三种说法都不对 √
解析:
[解析]程序调试就是诊断和改正程序中的错误,由程序开发者完成。
软件测试是为了发现错误而执行程序的过程,它由专门的测试人员完成。
软件维护是指软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程,是软件生存周期中非常重要的一个阶段。
3.以下关键字不能用来声明类的访问权限的是______。
(分数:
1.00)
A.public
B.static √
C.protected
D.private
解析:
[解析]类的成员访问权限有3种:
public(公用)、protected(保护)、private(私有)。
4.有如下程序:
#include<iostream>
usingnamcspacestd;
intmain(){
inta[6]={23,15,64,33,40,58);
ints1,s2;
s1=s2=a[0];
for(int*p=a+1;p<a+6;p++){
if(s1>*p)s1=*p;
if(s2<*p)s2=*p;
}
cout<<s1+s2<<endl;
return0;
}
运行时的输出结果是______。
(分数:
2.50)
A.23
B.58
C.64
D.79 √
解析:
[解析]根据程序的意思,找出数组a中最大值s1和最小值s2并计算二者的和。
5.Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是______。
Samplea[2],*p=newSample;
(分数:
2.50)
A.0
B.1
C.2
D.3 √
解析:
[解析]生成对象,以及动态生成对象空间,都要自动调用构造函数。
6.若已定义:
inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a数组元素不正确的引用是
(分数:
2.00)
A.a[p-a]
B.*(&a[1])
C.p[1]
D.a[10] √
解析:
[解析]通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。
本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。
7.有如下类定义:
classPoint{
intx_,y_;
public:
Point():
x_(0),y_(0){}
Point(intx,inty=0):
x_(x),y_(y){}
};
若执行语句:
Pointa
(2),b[3],*c[4];
则Point类的构造函数被调用的次数是
(分数:
2.00)
A.2次
B.3次
C.4次 √
D.5次
解析:
[解析]a
(2)执行一次,调用带参构造函数;b[3]生成一个对象数组,所以执行3次无参构造函数,生成3个对象数组元素;*c[4]定义一个对象指针,并没产生对象,所以没有调用构造函数。
8.有如下程序:
#include<iostream>
usingnamespacestd;
classBase{
public:
Base(intx=0){cout<<x;}
};
classDerived:
publicBase{
public:
Derived(intx=0){cout<<x;}
private:
Baseval;
};
intmain(){
Derivedd
(1);
return0;
}
程序执行后的输出结果是______。
(分数:
1.00)
A.100
B.000
C.010
D.001 √
解析:
[解析]本题考查的知识点是类的构造。
建立一个类的对象时,构造函数的执行顺序如下:
①执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);②执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);③执行自身的构造函数。
本题Derived类继承于Base类,所以首先会构造基类Base,但Derived类的构造函数没有初始化列表,所以将调用Base类的默认构造函数,输出一个O。
接下来由于它的成员中还定义了一个Base类的对象,而构造函数也没有显示初始化这个对象,所以再次调用Base类的默认构造函数输出一个O。
最后构造自身,因为主函数中传入了构造参数1,所以构造自身时输出了一个1。
故最终输出结果为001。
9.下列函数参数默认值定义错误的是____。
(分数:
2.00)
A.Fun(intx,inty=0)
B.Fun(intx=100)
C.Fun(intx=0,inty)
D.Fun(intx=f())(假定函数f()已经定义) √
解析:
10.设树T的度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1。
则T中的叶子结点数为
(分数:
1.00)
A.5
B.6
C.7
D.8 √
解析:
[解析]根据给定的条件,在树中,各结点的分支总数为:
4×1+2×2+1×3+4×1=15:
树中的总结点数为:
15(各结点的分支总数)+1(根结点)=16:
非叶子结点总数为:
4+2+1+1=8。
因此,叶子结点数为16(总结点数)-8(非叶子结点总数)=8。
因此,本题的正确答案为D。
11.设有以下程序段:
inta[5]={0},*p,*q;
p=a;
q=a;
则下列选项中,合法的运算是____。
(分数:
1.00)
A.p+q
B.p-q √
C.p*q
D.p%q
解析:
[解析]本题考核指针的运算。
C++语言中,指向同一字符串的指针之间能且只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。
12.有以下程序:
#include<iostream>
usingnamespacestd;
Classsample
{
private:
intn;
public:
sample(){}
sample(intm)
{
n=m;
}
sampleadd(samples1,samplcs2)
{
this-->n=s1.n+s2.n;
return(*this);
}
voiddisp()
{
cout<<“n=”<<n<<endl;
}
};
intmain()
{
samples1(10),s2(5),s3;
s3.add(s1,s2);
s3.disp();
return0;
}
程序运行后,输出的结果是____。
(分数:
2.00)
A.n=10
B.n=5
C.n=20
D.n=15 √
解析:
[解析]本题考查this指针的使用类成员函数add中通过this指针实现私有数据成员n的赋值。
13.下列控制格式输入/输出的操作符中,能够设置浮点数精度的是______。
(分数:
2.00)
A.setprecision √
B.setw
C.setfill
D.showpoint
解析:
[解析]iomanip中定义的操纵符包括:
setfill(ch)用ch填充空白、setprecision(n)将浮点精度置为n、setw(w)、读写w个字符的值showpoint设置小数点。
14.有如下类定义:
classBase{
intm;
intn;
public:
Base(intm1,intn1):
n(n1),m(m1){}
};
classDerived:
publicBase{
intq;
public:
Derived(intm1,intn1,intq1):
q(q1),Base(m1,n1){};
};
在创建一个Derived对象时,数据成员m、n和q被初始化的顺序是______。
(分数:
2.50)
A.m、n、q √
B.n、m、q
C.q、m、n
D.q、n、m
解析:
15.下列有关函数重载的叙述中,错误的是______。
(分数:
1.00)
A.函数重载就是用相同的函数名定义多个函数
B.重载函数的参数列表必须不同
C.重载函数的返回值类型必须不同 √
D.重载函数的参数可以带有默认值
解析:
[解析]所谓函数重载是指同一个函数名可以对应着多个函数的实现。
每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。
所以本题答案为C。
16.下面有关类模板的说法中不正确的是____。
(分数:
2.00)
A.类模板的成员函数都是模板函数
B.类模板本身在编译中不会生成任何代码
C.类模板只是虚拟类型的参数 √
D.用类模板定义一个对象时,不能省略实际参数
解析:
[解析]C++中类模板的声明格式为template<模板形参表声明><类声明>,并且类模板的成员函数都是模板函数。
17.语句ofstreamf("DATA.DAT",ios_base:
:
app|ios_base:
:
binary);的功能是建立流对象f,并试图打开文件DATA.DAT并与之连接,而且______。
(分数:
2.50)
A.若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件
B.若文件存在,将其截为空文件;若文件不存在,打开失败
C.若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件 √
D.若文件存在,打开失败;若文件不存在,建立一个新文件
解析:
18.有如下程序:
#include<iomanip>
#include<iostream>
usingnamespacestd;
intmain(){
cout<<setfill("*")<<setw(6)<<123<<456;
return0;
}
运行时的输出结果是______。
(分数:
2.50)
A.***123***456
B.***123456***
C.***123456 √
D.123456
解析:
19.下列函数中对调用它的函数没有起到任何作用的是
(分数:
2.00)
A.voidf1(double&x){--x;}
B.doublef1(doublex){returnx-1.5;}
C.voidf3(doublex){--x;} √
D.doublef4(double*x){--*x;return*x;}
解析:
[解析]本题考核函数的调用和参数值的传递(形参、实参)。
选项C中的函数D调用采用按值传递的方式,函数中对形参的修改没有影响到实参的值,而且函数G还没有返回值,所以函数耀对调用它的函数没有起到任何作用。
选项A中的函数f1采用引用传递的方式影响实参的值,选项D中的函数f4通过返回值和指针调用来影响调用函数;选项B中的函数f2采用返回值的形式对其调用函数发生作用。
20.下面属于黑盒测试方法的是______。
(分数:
2.50)
A.基本路径测试
B.等价类划分 √
C.判定覆盖测试
D.语句覆盖测试
解析:
[解析]等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。
21.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是______。
(分数:
2.50)
A.不合法的运算符
B.一元运算符 √
C.无操作数的运算符
D.二元运算符
解析:
[解析]成员函数有隐含参数的this指针,一般是第一个操作数,并不显式出现在参数表中。
即对于单目运算符,参数表为空,对于双目运算符,参数表中有一个参数。
22.下列程序的输出结果是______。
#include<iostream.h>
voidmain()
{char*str="12123434";
intx1=0,x2=0,x3=0,x4=0,i;
for(i=0;str[i]!
="/0";i++)
switch(str[il)
{case"1":
x4++;
case"2":
x3++;
case"3":
x2++;
case"4":
x1++;
}
cout<<x1<<","<<x2<<","<<x3<<","<<x4;
}
(分数:
1.00)
A.8,6,4,1
B.8,6,3,2
C.8,8,4,1
D.8,6,4,2 √
解析:
[解析]本题考查循环的嵌套,for和switch语句的应用,C++中各种条件判断、循环语句的用法。
只要注意在C++语言中,系统在字符指针的最后位置会增加一个字符串结束符"/0",执行8次for循环,再根据switch语句中的条件易知答案。
23.关系数据库管理系统能实现的专门关系运算包括______。
(分数:
1.00)
A.排序、索引、统计
B.选择、投影、连接 √
C.关联、更新、排序
D.显示、打印、制表
解析:
[解析]关系数据库管理系统能实现的专门关系运算包括选择、投影、连接。
24.有如下程序:
#include<iostream>
usingnamespacestd;
classTestClass
{inta;
public:
TestClass(intx){a=x;}
voidshow(){cout<<a;}};
classTestClass1:
publicTcstClass
{intb;
public:
TestClass1(inti):
TestClass(i+1),b(i){)
voidshow(){cout<<b;}};
intmain()
{TestClassb(5),*p;
TestClass1d
(1);
p=&d;
p->show();
return0;}
该程序运行后的打印结果是______。
(分数:
1.00)
A.5
B.1
C.0
D.2 √
解析:
[解析]TestClass为TestClass1的基类,在主函数main中定义TestClass对象b,*p。
TestClass1对象d,p指向d,调用其show函数。
“TestClass(inti):
TestClass(i+1),b(i){}”语句中的TestClass基类参数为2,所以show输出2。
25.C++语言中在C语言的基础上增加的特性不包括______。
(分数:
1.00)
A.结构 √
B.引用
C.类和对象
D.静态成员函数
解析:
[解析]本题很简单,不过考生要注意引用是C++的新特性。
只有结构是C语言也有的特性。
26.有如下类声明:
classFoo{intbar;};
则Foo类的成员bar是______。
(分数:
2.00)
A.公有数据成员
B.公有成员函数
C.私有数据成员 √
D.私有成员函数
解析:
[解析]此题考查的是类的定义。
在定义类的成员变量时,如果没有使用关键字;所有成员默认定义为private私有权限。
27.在C++中,cin是个______。
(分数:
2.50)
A..类
B.对象 √
C.模板
D.函数
解析:
[解析]C++流有4个预定义的流对象:
cin、cout、cerr和clog。
cin:
标准输入;cout:
标准输出;
cerr:
标准出错信息输出;clog:
带缓冲的标准出错信息输出。
28.下列符号中不属于C++关键字的是______。
(分数:
2.00)
A.friend
B.namespace
C.continue
D.byte √
解析:
29.下列程序的运行结果为
#include<iostream.h>
template<classTT>
classFF
{TTa1,a2,a3;
public:
FF(TTb1,TTb2,TTb3){a1=b1;a2=b2;a3=b3;}
TTSum(){returna1+a2+a3;}};
voidmain()
{FF<int>x(int(1.1),2,3),y(int(4.2),5,6);
cout<<x.Sum()<<""<<y.Sum()<<endl;}
(分数:
2.00)
A.6.115.2
B.615 √
C.615.2
D.6.115
解析:
[解析]本题考查模板函数的应用,表达式int(1.1)和int(4.2)是将1.1和4.2强制转换为整型。
30.字面常量42、4.2、42L的数据类型分别是______。
(分数:
1.00)
A.long、double、int
B.long、float、int
C.int、double、long √
D.int、float、long
解析:
[解析]本题考查整型变量的类型和浮点变量的类型,42默认为int型数据,42后面加上L后,表示long型数据,4.2默认为double型数据。
31.有如下程序
#include<iostream>
usingnamespacestd;
classbase
{
public:
virtualvoidf1()
{
cout<<"F1Base";
}
virtualvoidf2()
{
cout<<"F2Base";
}
};
classderive:
publicbase
{
voidf1()
{
cout<<"F1Derive";
}
voidf2(intx)
{
cout<<"F2Derive";
}
};
intmain()
{
baseobj1,*p;
deriveobj2;
p=&obj2;
p->f1();
p->f2();
return0;
}
执行后的输出结果是____。
(分数:
2.00)
A.F1DeriveF2Base √
B.F1DeriveF2Derive
C.F1BaseF2Base
D.F1BaseF2Derive
解析:
32.重载输入流运算符“>>”必须使用的原型为______。
(分数:
2.50)
A.istream&operator>>(istream&,<类名>&); √
B.istream&operator>>(istream,<类名>);
C.istreamoperator>>(istream,<类名>&);
D.<类名>operator>>(istream&,<类名>&);
解析:
[解析]C++流的输入运算符“>>”和输出运算符“<<”只能作为非成员函数重载。
重载输入流运算符“>>”须使用以下原型:
istream&operator>>(istream&,<类名>&);。
33.对下列二叉树
进行中序遍历的结果是______。
(分数:
1.00)
A.ACBDFEG √
B.ACBDFGE
C.ABDCGEF
D.FCADBEG
解析:
[解析]二叉树的遍历有三种:
前序、中序和后序。
中序遍历首先遍历左子树或左子结点,然后访问根结点,最后遍历右子树或右子结点,分析本题二叉树,对其进行中序遍历,结果为ACBDFEG。
34.重载输入流运算符>>必须使用的原型为______。
(分数:
1.00)
A.istream&operator>>(istream&,<类名>&); √
B.istream&operator>>(istream,<类名>);
C.istreamoperator>>(istream,<类名>&);
D.<类名>operator>>(istream&,<类名>&);
解析:
[解析]C++流的输入运算符“>>”和输出运算符“<<”只能作为非成员函数重载。
重载输入流运算符“>>”须使用的原型是istream&operator>>(istream&,<类名>&);。
35.一个栈的输入序列为1,2,3,4,下面______序列不可能是这个栈的输出序列
(分数:
2.00)
A.1,3,2,4
B.2,3,4,1
C.4,3,1,2 √
D.3,4,2,1
解析: