计算机类 二级 C++
2014年全国计算机等级《二级C++》上机考试冲刺试题(3) 43 题 含答案 C++
1 单选题 1 / 43
下列排序方法中,最坏情况下比较次数最少的是( )。
A 冒泡排序 B 简单选择排序 C 直接插入排序 D 堆排序
查看答案 D. 堆排序
2 单选题 2 / 43
下面程序的运行结果为( )。 #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
查看答案 C. 1342
3 单选题 3 / 43
以下程序中调用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是一个指针变量
查看答案 B. P表示的是变量a的地址,而不是变量a的值
4 单选题 4 / 43
与语句cout<<ENDL;不等价的是(&NBSP;&NBSP;&NBSP; )。
A cout <<’\n’; B cout<<‘\l2’: C cout <<’\xA’; D cout<<‘\0’:
查看答案 D. cout<<‘\0’:
5 单选题 5 / 43
如果表达式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))
查看答案 A. operator+(operator$(X,Y),z)
6 单选题 6 / 43
在下列关键字中,不能用来表示继承方式的是( )。
A private B static C public D protected
查看答案 B. static
7 单选题 7 / 43
下面的( )选项不能作为函数的返回类型。
A void B int C new D long
查看答案 C. new
8 单选题 8 / 43
有如下函数定义: 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
查看答案 C. 0和2
9 单选题 9 / 43
定义无符号整数类为UInt,下面可以作.为类UInt实例化值的是( )。
A 一369 B 369 C 0.369 D 整数集合{1,2,3,4,5}
查看答案 B. 369
10 单选题 10 / 43
下列关于类定义的说法中,正确的是( )。
A 类定义中包括数据成员和函数成员的声明 B 类成员的缺省访问权限是保护的 C 数据成员必须被声明为私有的 D 成员函数只能在类体外进行定义
查看答案 A. 类定义中包括数据成员和函数成员的声明
11 单选题 11 / 43
有如下程序: #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 输出一个不确定的数
查看答案 D. 输出一个不确定的数
12 单选题 12 / 43
this指针是C++语言实现( )的一种机制。
A 抽象 B 封装 C 继承 D 重载
查看答案 B. 封装
13 单选题 13 / 43
下面关于虚函数的描述,错误的是( )。
A 在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数 B 基类中说明了虚函数后,派生类中对应的函数也必须说明为虚数 C 虚函数可以是另一个类的友元函数,但不能是静态成员函数 D 基类中说明的纯虚函数在其任何派生类中都必须实现
查看答案 B. 基类中说明了虚函数后,派生类中对应的函数也必须说明为虚数
14 单选题 14 / 43
有如下程序: #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 输出一个不确定的数
查看答案 D. 输出一个不确定的数
15 单选题 15 / 43
面向对象方法中,继承是指( )。
A 一组对象所具有的相似性质 B 一个对象具有另一个对象的性质 C 各对象之间的共同性质 D 类之间共享属性和操作的机制
查看答案 D. 类之间共享属性和操作的机制
16 单选题 16 / 43
下列程序的运行结果为( )。 #include void main() { int a=2: int b=a+1: cout<
A 0.66667 B 0 C 0.7 D 0.66666666…
查看答案 B. 0
17 单选题 17 / 43
有如下定义: int a[5]={1,3,5,7,9},* P=a; 下列表达式中不能得到数值5的是( )。
A a[2] B a[3] C *(P+2) D +P+4
查看答案 B. a[3]
18 单选题 18 / 43
C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。
A cout B cin C cerr D cset
查看答案 D. cset
19 单选题 19 / 43
有如下程序: #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
查看答案 C. 1112
20 单选题 20 / 43
下列叙述中正确的是( )。
A 有一个以上根结点的数据结构不一定是非线性结构 B 只有一个根结点的数据结构不一定是线性结构 C 循环链表是非线性结构 D 双向链表是非线性结构
查看答案 B. 只有一个根结点的数据结构不一定是线性结构
21 单选题 21 / 43
下列关于虚函数的说明中,正确的是( )。
A 从虚基类继承的函数都是虚函数 B 虚函数不得是静态成员函数 C 只能通过指针或引用调用虚函数 D 抽象类中的成员函数都是虚函数
查看答案 B. 虚函数不得是静态成员函数
22 单选题 22 / 43
某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( )。
A 3 B 4 C 6 D 7
查看答案 D. 7
23 单选题 23 / 43
在数据库设计中,将E~R图转换成关系数据模型的过程属于( )。
A 需求分析阶段 B 概念设计阶段 C 逻辑设计阶段 D 物理设计阶段
查看答案 C. 逻辑设计阶段
24 单选题 24 / 43
下列关于类模板的模板参数的叙述中,错误的是( )。
A 模板参数可以作为数据成员的类型 B 模板参数可以作为成员函数的返回类型 C 模板参数可以作为成员函数的参数类型 D 模板参数不能作为成员函数的局部变量的类型
查看答案 D. 模板参数不能作为成员函数的局部变量的类型
25 单选题 25 / 43
在软件开发中,需求分析阶段产生的主要文档是( )。
A 可行性分析报告 B 软件需求规格说明书 C 概要没计说明书 D 集成测试计划
查看答案 B. 软件需求规格说明书
26 单选题 26 / 43
下面关于模板的描述,错误的是( )。
A 函数模板和类模板的参数可以是任意的数据类型 B 类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用 C 函数模板不能直接使用,需要实例化为模板函数后才能使用 D 类模板的成员函数都是模板函数
查看答案 A. 函数模板和类模板的参数可以是任意的数据类型
27 单选题 27 / 43
数据库系统的三级模式不包括( )。
A 概念模式 B 内模式 C 外模式 D 数据模式
查看答案 D. 数据模式
28 单选题 28 / 43
下列语句中不是死循环的是( )。
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:
查看答案 A. int i=10;
29 单选题 29 / 43
为了取代c中带参数的宏,在c++中使用( )。
A 重载函数 B 内联函数 C 递归函数 D 友元函数
查看答案 B. 内联函数
30 单选题 30 / 43
C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是( )。
A 增加了一些新的运算符 B 允许函数重载,并允许设置默认参数 C 规定函数说明符必须用原型 D 引进了类和对象的概念
查看答案 D. 引进了类和对象的概念
31 单选题 31 / 43
派生类的成员函数不能访问基类的( )。
A 公有成员和保护成员 B 公有成员 C 私有成员 D 保护成员
查看答案 C. 私有成员
32 单选题 32 / 43
下列代码段中声明了3个类: Class Person{}; Class Student:publiC Person{}; Class Undergraduate:Student{}; 下列关于这些类之间关系的描述中,错误的是( )。
A 类Person是类Undergraduate的基类 B 类Undergraduate从类Student公有继承 C 类Student是类Person的派生类 D 类Undergraduate是类Person的派生类
查看答案 B. 类Undergraduate从类Student公有继承
33 单选题 33 / 43
若有下面的函数调用: fun(fl+b,3,max(n一1,B.) 则fun的实参个数是( )。
A 3 B 4 C 5 D 6
查看答案 A. 3
34 单选题 34 / 43
有如下两个类定义: 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
查看答案 C. 3
35 单选题 35 / 43
下列关于运算符重载的描述中,正确的是( )。
A 运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B 一元运算符只能作为成员函数重载 C 二元运算符重载为非成员函数时,参数表中有一个参数 D C++中可以重载所有的运算符
查看答案 A. 运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符
36 单选题 36 / 43
建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、C(派生类)构造函数),这3种构造函数的调用顺序为( )。
A abC B aCb C Cab D Cba
查看答案 A. abC
37 单选题 37 / 43
在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是( )。
A ios_base::cur B ios—base::beg C los_base::0ut D ios—base::end
查看答案 A. ios_base::cur
38 单选题 38 / 43
当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为( )。
A ios—base::in B ios—base::in l ios base::0ut C los base;:0ut D ios_base::in&ios_base::0ut
查看答案 A. ios—base::in
39 单选题 39 / 43
下列有关运算符重载的叙述中,正确的是( )。
A 运算符重载是多态性的一种表现 B C++中可以通过运算符重载创造新的运算符 C C++中所有运算符都可以作为非成员函数重载 D 重载运算符时可以改变其结合性
查看答案 A. 运算符重载是多态性的一种表现
40 单选题 40 / 43
必须用一对大括号括起来的程序段是( )。
A switCh语句中的ease标号语句 B if语句的分支 C 循环语句的循环体 D 函数的函数体
查看答案 D. 函数的函数体
41 主观题 41 / 43
请使用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”<<OBJ.VALUE< return 0; }
查看答案 (1)MyClAss(int vAl):vAluE(vAl){} (2)voiD MyClAss::SEtVAluE(int vAl){vAluE=vAl;} (3)Cout“”ThE vAluE is”“oBj.GEtVAluE()“EnD1;
42 主观题 42 / 43
请使用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<ROWS;I++){&NBSP;&NBSP;&NBSP; for(int j=0;j<COLS;J++)&NBSP;&NBSP;&NBSP; } <<””; Cout<< **********found********** /> } }; //矩阵类 Class Matrix:publiC MatfixBase{ double*val; publiC: //**********found********** Matrix(int rows,int Cols,double in[]=NULL):——{ //**********found********** val=; for(int i=0:i<ROWS*COLS;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; }
查看答案 (1)GEtElEmEnl(1,i) (2)MAtrixBAsE(rows,Cols) (3)FlEw DouBlE[rows*Cols] (4)r==C
43 主观题 43 / 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; }
查看答案 lq=r.n;//把对象r字符长度赋值给n delete[]P;//删除动态数组P P=new int[n];//给动态数组P分配空间为n for(int i=0;i<n;i++) //遍历对象r中的数组PP[i]=r.P[i];//把r. P[i]赋值给P[i] retum*this://返回被赋值的对象