[2016年计算机二级真题答案]2016年计算机二级《C++》上机考前冲刺试题(3)

副标题:2016年计算机二级《C++》上机考前冲刺试题(3)

时间:2023-05-04 06:48:01 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。


一、选择题(每小题1分,共40分)
1、下列排序方法中,最坏情况下比较次数最少的是(  )。
A.冒泡排序
B.简单选择排序
C.直接插入排序
D.堆排序


2、下面程序的运行结果为( )。
#include
class A
{
public:
A(){tout<<”1”;}
~A(){tout<<”2”;}
};
class B:public A
{
public:
B(){cout<<”3”;}
~B(){cout<<”4”;}
};
void main()
{
B b;
}
A.1234
B.1324
C.1342
D.3142


3、以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是( )。
#include
void main()
{int * P,* q,a,b;
P=&a:
eout<<”input a:”;
cin>>P:
A.* P表示的是指针变量P的地址
B.P表示的是变量a的地址,而不是变量a的值
C.*P表示的是指针变量P的值
D.*P只能用来说明P是一个指针变量


4、与语句coutB.cout<<‘\l2’:
C.cout <<’\xA’;
D.cout<<‘\0’:


5、如果表达式x * y+z中,“*”是作为友元函数重载的,“+”是作为成员函数重载的,则该表达式还可为 ( )。
A.operator+(operator$(X,Y),z)
B.x.operator+(operator * (x,y),Z)
C.Y.operator * (operator+(x,Y),z)
D.x.operator+(operator{(X,Y))


6、在下列关键字中,不能用来表示继承方式的是( )。
A.private
B.static
C.public
D.protected


7、下面的(  )选项不能作为函数的返回类型。
A.void
B.int
C.new
D.long


8、有如下函数定义:
void funC(int a,int&B.{a++;b++;} 若执行代码段:
int x=0,Y=1: funC(X,y);
则变量X和y的值分别是( )。
A.0和1
B.1和1
C.0和2
D.1和2


9、定义无符号整数类为UInt,下面可以作.为类UInt实例化值的是( )。
A.一369
B.369
C.0.369
D.整数集合{1,2,3,4,5}


10、下列关于类定义的说法中,正确的是(  )。
A.类定义中包括数据成员和函数成员的声明
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义


11、 有如下程序:
#nclude
using namespace std;
int main()
{
void function(double val);
double val;
function(val);
cout< return 0;
}
void function(double val)
} val=3;}
编译运行这个程序将出现的情况是(  )。
A.编译出错,无法运行
B.输出:3
C.输出:3.0
D.输出一个不确定的数


12、 this指针是C++语言实现( )的一种机制。
A.抽象
B.封装
C.继承
D.重载


13、 下面关于虚函数的描述,错误的是( )。
A.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚数
C.虚函数可以是另一个类的友元函数,但不能是静态成员函数
D.基类中说明的纯虚函数在其任何派生类中都必须实现


14、 有如下程序:
#include
using namespaee std;
int main()
{
void function(double val);
double val:
function(val);
eout< return 0;
}
void function(double val)
{
val=3;
}
编译运行这个程序将出现的情况是( )。
A.编译出错,无法运行
B.输出:3
C.输出:3.0
D.输出一个不确定的数


15、 面向对象方法中,继承是指( )。
A.一组对象所具有的相似性质
B.一个对象具有另一个对象的性质
C.各对象之间的共同性质
D.类之间共享属性和操作的机制


16、 下列程序的运行结果为( )。 #include
void main() {
int a=2:
int b=a+1: coutB.0
C.0.7
D.0.66666666…


17、 有如下定义:
int a[5]={1,3,5,7,9},* P=a;
下列表达式中不能得到数值5的是( )。
A.a[2]
B.a[3]
C.*(P+2)
D.+P+4


18、 C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。
A.cout
B.cin
C.cerr
D.cset


19、 有如下程序:
#include
using namespace std;
class GA{
public:
virtual int f()t retum l;}
};
class GB:public GA{
public:
virtual int f(){retum 2;}
};
void show(GA g){eout<<9.f();}
void display(GA&g){cout<<9.f();}
int main()
{
GA a;show(A.;display(A.;
GB b;show(B.;display(B.;
return 0;
}
执行这个程序的输出结果是( )。
A.1111
B.1211
C.1112
D.1212


20、 下列叙述中正确的是( )。
A.有一个以上根结点的数据结构不一定是非线性结构
B.只有一个根结点的数据结构不一定是线性结构
C.循环链表是非线性结构
D.双向链表是非线性结构

21、 下列关于虚函数的说明中,正确的是(  )。
A.从虚基类继承的函数都是虚函数
B.虚函数不得是静态成员函数
C.只能通过指针或引用调用虚函数
D.抽象类中的成员函数都是虚函数


22、 某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( )。
A.3
B.4
C.6
D.7


23、 在数据库设计中,将E~R图转换成关系数据模型的过程属于( )。
A.需求分析阶段
B.概念设计阶段
C.逻辑设计阶段
D.物理设计阶段


24、 下列关于类模板的模板参数的叙述中,错误的是( )。
A.模板参数可以作为数据成员的类型
B.模板参数可以作为成员函数的返回类型
C.模板参数可以作为成员函数的参数类型
D.模板参数不能作为成员函数的局部变量的类型


25、 在软件开发中,需求分析阶段产生的主要文档是( )。
A.可行性分析报告
B.软件需求规格说明书
C.概要没计说明书
D.集成测试计划


26、 下面关于模板的描述,错误的是( )。
A.函数模板和类模板的参数可以是任意的数据类型
B.类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用
C.函数模板不能直接使用,需要实例化为模板函数后才能使用
D.类模板的成员函数都是模板函数


27、 数据库系统的三级模式不包括( )。
A.概念模式
B.内模式
C.外模式
D.数据模式


28、下列语句中不是死循环的是( )。
A.int i=10;
B.for(int i=1;j<10;i++)
while(1) {
{ i--; i--; }
if(i==1)break;
C.int i-0;
D.int i=1:

29、 为了取代c中带参数的宏,在c++中使用(  )。
A.重载函数
B.内联函数
C.递归函数
D.友元函数


30、 C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是( )。
A.增加了一些新的运算符
B.允许函数重载,并允许设置默认参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念


31、 派生类的成员函数不能访问基类的(  )。
A.公有成员和保护成员
B.公有成员
C.私有成员
D.保护成员


32、下列代码段中声明了3个类:
Class Person{};
Class Student:publiC Person{};
Class Undergraduate:Student{};
下列关于这些类之间关系的描述中,错误的是( )。
A.类Person是类Undergraduate的基类
B.类Undergraduate从类Student公有继承
C.类Student是类Person的派生类
D.类Undergraduate是类Person的派生类


33、 若有下面的函数调用:
fun(fl+b,3,max(n一1,B.)
则fun的实参个数是(  )。
A.3
B.4
C.5
D.6


34、 有如下两个类定义:
class XX{
private:
double xl;
protected:
double x2;
public:
double x3;
};
class YY:protected XX{
private:
double yl;
protected:
double y2;
public:
double y3;
在类YY中保护成员变量的个数是( )。
A.1
B.2
C.3
D.4


35、 下列关于运算符重载的描述中,正确的是( )。
A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符
B.一元运算符只能作为成员函数重载
C.二元运算符重载为非成员函数时,参数表中有一个参数
D.C++中可以重载所有的运算符


36、 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、C(派生类)构造函数),这3种构造函数的调用顺序为( )。
A.abC
B.aCb
C.Cab
D.Cba


37、 在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是(  )。
A.ios_base::cur
B.ios—base::beg
C.los_base::0ut
D.ios—base::end


38、 当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为(  )。
A.ios—base::in
B.ios—base::in l ios base::0ut
C.los base;:0ut
D.ios_base::in&ios_base::0ut

39、 下列有关运算符重载的叙述中,正确的是(  )。
A.运算符重载是多态性的一种表现
B.C++中可以通过运算符重载创造新的运算符
C.C++中所有运算符都可以作为非成员函数重载
D.重载运算符时可以改变其结合性


40、 必须用一对大括号括起来的程序段是(  )。
A.switCh语句中的ease标号语句
B.if语句的分支
C.循环语句的循环体
D.函数的函数体


二、基本操作题(18分)
41、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程含有一个源程序文件pn,jl.cpp。其中位于每个注释“//ERROR 木}}水found}}水木”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
The value is 10
注意:只修改注释“//ERROR **** found****”的下一行语句,不要改动程序中的其他内容。
//pmjl.cpp
#include
using namespace std;
class MyClass{
int value;
public:
//ERROR********found*********
void MyClass(int val):value(val){}
int GetValue()const{return value;}
void SetValue(int val);
};
//ERROR********found********
inline void SetValue(int val){value=val;}
int main()
MyClass obj(O);
obj.SetValue(10);
//ERROR********found********下列语句功能是输出obj的成员value的值
tout<<”The value is”< return 0;
}

三、简单应用题(24分)
42、
请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//t+++found母
***”。
#nClude using namespaCe std; //矩阵基础类,一个抽象类
Class MatrixBase{ int rows,Cols; publiC:
MatrixBase(int rows,int Cols):roWS(rows),Cow(Cols){} int getRows()Const{retum rows;}//矩阵行数
int getCols()Const{return Cols;}//矩阵列数
virtual double getElement(int r,int C)Const=0;//取第i个元素的值 void show()Const{//分行显示矩阵中所有元素
for(int i=0;i for(int j=0;j } }; //矩阵类
Class Matrix:publiC MatfixBase{ double*val;
publiC: //**********found**********
Matrix(int rows,int Cols,double in[]=NULL):——{ //**********found**********
val=;
for(int i=0:i val[i]=(m==NULL?0.0:Ill[i]);
}
一Matrix(){delete[]val;} double getElement(int r,int C)Const{retum val[r*getCols()+C];}
};
//单位阵(主对角线元素都是l,其余元素都是0的方阵)类 Class UnitMatrix:publiC MatrixBase{
publiC:
UnitMatrix(int rOWS):MatrixBase(rows,rows){} //单位阵行数列数相同
double getElement(int r,int C)Const{ //**********found**********
if(_____)retum l.0; retum 0.0;
} }; int main(){
MatrixBase*m;
double d[][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}}; ITI=new Matrix(3,5,(double*)d);
m→show(); delete m;
Cout< m=new UnitMatrix(6); Ill→show();
delete m; retum0; } .

四、综合应用题(18分)
43、
请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数0perator=,以实现深层复制。
要求:
补充编制的内容写在“//************333************”与“//****************666*************”之间。不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//CDeepCopy.h
#include
#include
using namespace std;
class CDeepCopy
{
public:
int n;//动态数组的元素个数
int *p;//动态数组首地址
CDeepCopy(int);
~CDeepCopy();
CDeepCopy&operator=(const CDeepCopy&r);//赋值运算符函数
};
void writeToFile(char});
//main.cpp
#include”CDeepCopy.h”
CDeepCopy::一CDeepCopy(){delete[]P;}
CDeepCopy::CDeepCopy(int k){n=k;p=new int[n];}//构造函数实现
CDeepCopy&CDeepCopy::0perator=(const CDeepCopy&r)//赋值运算符函数实现
{
//***********333*********
//***********666***********
}
int main()
{
CDeepCopy a(2),d(3);
a.p[O]=1;d.p[O]=666;//对象a,d数组元素的赋值
{
CDeepCopy b(3);//调用赋值运算符函数
a.p[O]=88;b=a;
cout< }
cout< cout<<”d fade away;\n”;
cout< writeToFile(””);
return 0;
}


2016年计算机二级《C++》上机考前冲刺试题(3).doc

本文来源:https://www.wddqw.com/54mx.html