2016年计算机二级《C++》上机考前冲刺题

以下是本站小编为大家整理的2016年计算机二级《C++》上机考前冲刺题,希望对大家的考试有所帮助!

2016年计算机二级《C++》上机考前冲刺题

  一、选择题(每小题1分,共40分)

1、有如下程序:

#inClude using namespaCe std; Class B{

publiC:

virtual void show(){Cout<<”B”;} };

Class D:publiC B{ . publiC:

void show(){Cout<<”D”;} };

void funl(B * ptr){ptr一>show();} void fUN2(B&ref){();}

voidfhIl3(B B.{();} int main()

{

B b,* P=new D; D d;

funl(P); fun2(B.; fun3(D);

delete P; return 0; }

执行这个程序的输出结果是( )。

2、下面描述中错误的是( )。

A.系统总体结构图支持软件系统的详细设计

B.软件设计是将软件需求转换为软件表示的过程

C.数据结构与数据库设计是软件设计的任务之一

图是软件详细设计的表示工具

3、已知函数FA调用函数FB,若要把这两个函数定义在同一个文件中,则( )。

必须定义在FB之前

必须定义在FA之前

C.若FA定义在FB之后,则FA的原型必须出现在FB的定义之前

D.若FB定义在FA之后,则FB的原型必须出现在FA的定义之前

4、有如下函数定义:

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

5、下面程序的输出结果是( )。

#include

class example

{

int a;

public:

example(int B.{a=b++;}

void print(){a=a+1;eout< void print()const{cout< };

void main()

{

example x(3);

const example Y(2);

A print();

B print();

}

A.2 2

B.4 3

C.4 2

D.3 2

6、下列有关类继承的叙述中,错误的是( )。

A.继承可以实现软件复用

B.虚基类可以解决由多继承产生的二义性问题

C.派生类构造函数要负责调用基类的构造函数

D.派生类没有继承基类的私有成员

7、下面程序的运行结果是( )。

#include

int fun(int a[],int n) {

int resuh=1;

for(inl i=1;i<11;1‘++)

result=result * a[i];

retum result;

} void main()

int a[3]={3,4,5}:

cout< }

A.12

B.15

C.20

D.60

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

A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化

B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化

C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化

D.以上说法都不正确

9、在满足实体完整性约束的条件下( )。

A.一个关系中应该有一个或多个候选关键字

B.一个关系中只能有一个候选关键字

C.一个关系中必须有多个候选关键字

D.一个关系中可以没有候选关键字

10、下面关于c+十语言变量的.叙述错误的是( )。

A.c++语言中变量分为aut0、static、extem和register4种存储类型

B.自动变量和外部变量的作用域为整个程序

C.内部静态变量的作用域是定义它的函数

D.外部静态变量的作用域是定义它的文件

11、 下面程序的运行结果是( )。

#include void main()

{

int num=1:

int&ref=num; ref=ref+2:

cout< }

A.13

B.16

C.36

D.33

12、 有以下程序:

#include float tun(int X,int Y) {return(X+Y);} void main()

{int a=2,b=5,c=8;

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

A.编译出错

B.9

C.21

D.9.0

13、 下列运算符中,不能被重载的是(  )。

A.&&

B.!=

C..

D.++

14、 算法的空间复杂度是指( )。

A.算法在执行过程中所需要的计算机存储空间

B.算法所处理的数据量

C.算法程序中的语句或指令条数

D.算法在执行过程中所需要的临时工作单元

15、 c++语言类体系中,不能被派生类继承的有( )。

A.转换函数

B.构造函数

C.虚函数

D.静态成员函数

16、 对C++编译器区分重载函数无任何意义的信息是( )。

A.参数类型

B.参数个数

C.返回值类型

D.常成员函数关键字Const

17、 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。

A.公有类型

B.私有类型

C.保护类型

D.友元类型

18、 下列程序的运行结果为(  )。

#include int i=0;

class A{ public: A(){i++;}

};

void main() {

A a,b[3],*C; C=b;

cout< }

A.2

B.3

C.4

D.5

19、 以下关键字不能用来声明类的访问权限的是(  )。

iC

iC

eCted

ate

20、 设有定义int a=1;float f=1.2;char C='a';,则下列表示错误的是( )。

A.++a;

B.f一一;

C.c++;

D.8++;

  二、基本操作题(18分)

41、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中含有一个源程碍文件 。其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:

ConstruCtor Called. The value is 10

Copy ConstruCtor Called. The value is 10

DestruCtor Called. DestruCtor Called. 注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。

//

#inClude ’using namespaCe std; Class MyClass{

publiC:

//ERROR**********found**********

MyClass(int i)

{value=i;Cout<<”ConstruCtor Called.” < //ERROR**********found********** MyClass(eonst MyClass P)

{

value = e;

eout<<”Copy ConstruCtor Called.”< }

void Print()

{Cout<<”The value is” < //ERROR**********found********* void-MyClass()

{Cout<<”DestruCtor Called.”< private:

int value;

}; int main()

{ MyChas objl

t();

MyClmss obj2(owl); t();

retum 0;

  三、简单应用题(24分)

42、请使用VC6或使用【答题】菜单打开考生文件夹pr092下的工程pros2。此工程中包含一个程序文件,其中有“部门”类Department和“职工”类Staff的定义,还有主函数main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:

改换办公室前:

职工号:0789姓名:张三部门:人事处办公室:521

职工号:0513姓名:李四部门:人事处办公室:521

改换办公室后:

职工号:0789姓名:张三部门:人事处办公室:311

职工号:0513姓名:李四部门:人事处办公室:311

注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。

#include

using namespace std;

class Department{ //“部门”类

public:

Department(const char*name,const char*office){

strcpy(this一>name,nanle);

//**********found**********

}

const char*getName()const{return name;}//返回部门名称

//**********found**********

const char*getOffice()const{________} //返回办公室房号

void changeOfficeTo(const char*office){ //改换为指定房号的另一个办公室

strcpy(this一>office,office);

}

private:

char name[20];//部门名称

char office[20];//部门所在办公室房号

};

class staff{//“职工”类

public:

//**********found**********

Staff(const char*my—id,const char木my_name,Department&my_dept):——{

strcpy(this一>staff id,my_id);

strcpy(this一>name,my_name);

}

const char*getlD()const{return staff_id;}

const char*getName()consl{return name;}

Department getDepartment()const{return dept;} char staff=id[10];//职工号

char name[20];//姓名

Department&dept;//所在部门

}; void showStaff(Staff&staff){

cout<<”职工号:”< cout<<”姓名:”< cout<<”部门:”< cout<<”办公室:”< int main(){

Department dept(”人事处”,”521”);

Staff Zhang(”0789”,”张三”,dept),Li(”0513”,”李四”,dept);

cout<<”改换办公室前:”< showStaff(Zhang); showStaff(Li);

//人事处办公室由521搬到311 //**********found********** ———————————————————————一

cout<<”改换办公室后:”< showStaff(Zhang); showStaff(Li);

return 0; }

  四、综合应用题(18分)

43、

请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数remove。在main函数中给出了一组测试数据,此时程序的正确输出结果应为:

2 3 4 5 27 28 31 66 75

2 3 4 5 6 27 28 31 56 75

2 3 4 5 6 19 27 28 31 66 75

3 4 5 6 19 27 28 31 66 75

3 4 5 6 19 27 28 31 66 75

要求:

补充编制的内容写在“//***********333***********”与“//***********666***********”之间,不得修改程序的其他部分。

注意:程序最后将结果输出到文件中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。

//IntegorSet.h

#ifndef INTEGERSET

#define INTEGERSET

#include

using namespace std;

const int MAXELEMENTS=100;

//集合最多可拥有的元素个数

class IntegerSet{

int elem[MAXELEMENTS];

//用于存放集合元素的数组

int counter; //用于记录集合中元素个数的计数器

puhlic:

IntegerSet():counter(0){}

//创建一个空集合

IntegerSet(int data[],int size);

//利用数组提供的数据创建一个整数集合

void add(int element);

//添加一个元素到集合中

void remeve(int element);

//删除集合中指定的元素

int getCount()const{return counter;}

//返回集合中元素的个数

int getElement(int i)const{retum elem[i];}//返回集合中指定的元素

void show()const;

};

void WriteToFile(char*);

#endif

//

#include”IntegerSet.h”

#include

IntegerSet::IntegerSet(int data[],int size):counter(0){

for(int i=0;i add(data[i]);

}

}

void IntegerSet::add(int element){

int j;

//从后往前寻找第一个小于等于element的元素

for(j=counter;j>0;j-)

if(element>=elem[j一1])break;

//如果找到的是等于element的元素,说明要添加的元素已经存在,直接返回

if(j>0)

if(element==elem[j-1])return;

//如果找到的是小于element的元素,j就是要添加的位置

//该元素及其后面的元素依次后移,腾出插入位置

for(int k=counter;k>j;k一)

elem[k]=elem[k一1];

elem[j]=element;//将element插入到该位置

counter++; //计数器加l

}

void IntegerSet::remove(int element){

//***************333***************

//***************666***************

void IntegerSet::show()const{

for(int i=0;i cout< cout< }

int main(){

int d[]={5,28,2,4,5,3,2,75,27,66,31};

IntegerSet S(d,11);();

(6); ();

(19); ();

ve(2); ();

(4); ();

writeToFile(””);

return 0;

}