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

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

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

一、选择题(每小题1分,共40分)
1、一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是( )。
A.1:1联系
B.1:m联系
C.m:1联系
D.m:n联系


2、 Tilil程序的运行结果是( )。
#include void main()
{
int i=1:
while(i<=8)
if(++i%3 1=2)continue: else eout< }
A.25
B.36
C.258
D.369


3、下列关于线性链表的叙述中,正确的是( )。
A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续
C.进行插入与删除时,不需要移动表中的元素
D.以上说法均不正确


4、对于一个类定义,下列叙述中错误的是( )。
A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数
B.如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数
C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数
D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数


5、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为( )。
A.public
B.protected
C.private
D.static


6、下列关于运算符函数的描述中,错误的是( )。
A.运算符函数的名称总是以operator为前缀
B.运算符函数的参数可以是对象
C.运算符函数只能定义为类的成员函数
D.在表达式中使用重载的运算符相当予调用运算符重载函数


7、 一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是(  )。
A.12345ABCDE
B.EDCBA54321
C.ABCDEl2345
D.5432lEDCBA


8、在数据管理技术发展的三个阶段中,数据共享的是(  )。
A.人工管理阶段
B.文件系统阶段
C.数据库系统阶段
D.三个阶段相同


9、下面程序的运行结果为( )。
#include
void main() {
char a=’3’: switch(8)
{
case '3':cout<<”3”:
case '2':cout<<”2”;break; default:cout<<”l”;
}
}
A.3
B.321
C.31
D.32


10、数据库设计中反映用户对数据要求的模式是( )。
A.内模式
B.概念模式
C.外模式
D.设计模式


11、一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为( )。
A.16
B.10
C.6
D.4


12、 下列( )是C++语言的有效标识符。
A.Nol
B.N0.1
C.12345
D.int


13、 下列关于运算符重载的叙述中,错误的是( )。
A.有的运算符可以作为非成员函数重载
B.所有的运算符都可以通过重载而被赋予新的含义
C.不得为重载的运算符函数的参数设置默认值
D.有的运算符只能作为成员函数重载


14、 F列关于栈的叙述正确的是( )。
A.栈按“先进先出”组织数据
B.栈按“先进后出”组织数据
C.只能在栈底插入数据
D.不能删除数据


15、 软件生命周期中的活动不包括( )。
A.市场调研
B.需求分析
C.软件测试
D.软件维护


16、 下面对静态数据成员的描述中,正确的是( )。
A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象调用


17、 软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是(  )。
A.编译程序
B.操作系统
C.教务管理系统
D.汇编程序


18、下面叙述中错误的是(  )。
A.软件测试的目的是发现错误并改正错误
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划,排除测试的随意性


19、 层次型、网状型和关系型数据库划分原则是( )。
A.己录长度
B.文件的大小
C.联系的复杂程度
D.数据之间的联系方式


20、 下面程序的运行结果为( )。
#include void swap(int&a,int B. int temp;
temp=a++: a=b:
b=temp;
}
void main()
{
im a=2,b=3; swap(a,B.;
eout< }
A.2,3
B.3,2
C.2,2
D.3,3



21、 有如下程序:
#inClude using namespaCe std; Class MyClass{
publiC:
MyClass(int X):val(X){}
void Print()Const}tout<<”Const:val=”< private:
int val; };
int main(){
Const MyClass objl(10); MyClass obj2(20);
objl.Print(); obj2.Print(); retum 0;
}
执行这个程序的输出结果是( )。
A.val=10 Const:val=20
B.Const:val=10 Const:val=20
C.Const:val=10 val=20
D.val=10 val=20


22、 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间 的联系是( )。
A.一对一
B.一对多
C.多对多
D.多对一


23、下列程序的运行结果是( )。
#include class Loeation{
private:
int X,Y;
public: void init(int=0,int=0);
void valueX(int val){X=val;} int valueX(){returnx;}
void valueY(int val){Y=val;} int valueY(){return Y;}};
void Location::init(int initX,int initY) {X=initX;
Y=initY4}
void main(X
{Location A,B;
A.init();
B.value X(5);
cout< B.value Y(4);
eout< }
A.5
0
6
4
B.0
0
6
4
C.5
0
6
2
D.0
0
6
2


24、 下面程序的运行结果为( )。
#include class A
static int n;
public:
A(){n=1;}
A(int num){n=hum;} void print(){cout< int A::n=2;
void main() {
A a,b(3); a.print(); b.print();
coutB.13
C.23
D.33


25、 负责数据库中查询操作的数据库语言是( )。
A.数据定义语言
B.数据管理语言
C.数据操纵语言
D.数据控制语言


26、 已知枚举类型声明语句为:
enum COl,OR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};
则下列说法中错误的是( )。
A.枚举常量YELLOW的值为1
B.枚举常量RED的值为6
C.枚举常量BLACK的值为10
D.枚举常量WHITE的值为1


27、 有如下程序:
#include
using namespace std;
class Base
{
public:
void funl(){cout<<”Base\n”;}
virtual void fun2(){eout<<”Base\n”;}
};
class Derived:public Base{
public:
void funl(){eout<<”Derived、n”;}
void fura(){eout<.<”Derived\n”;}
};
void f(Base&B.}b.funl();b.ftm2();}
int main()
{
Derived obj;
f(obj);
return 0;
}
执行这个程序的输出结果是(  )。
A.Base
Base
B.Base
Derived
C.Derived
Base
D.Derived
Derived


28、有如下类声明:
class SAMPLE
{
int n:
public:
SAMPLE(int i=0):n(i){}
void setValue(int nO);
};
下列关于9etValue成员函数的定义中,正确的是(  )。
A.SAMPLE::setValue(int nO){n=n0;}
B.void SAMPLE::setValue(int胡){n=n0;
C.void setValue(int nO){n=n0;}
D.setValue(int nO){n=n0;}


29、 下列关于c++函数的说明中,正确的是( )。
A.内联函数就是定义在另一个函数体内部的函数
B.函数体的最后一条语句必须是return语句
C.标准c++要求在调用一个函数之前,必须先声明其原型
D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式


30、 有如下程序:
#inClude using namespaCe std; Class MusiC{
publiC:
void setTitle(Char*str){strCpy(title,str);} proteCted:
Char type[10]; private:
Char title[20];
Class Jazz:publiC MusiC{ publiC:
void set(Char*str){
strCpy(type,”Jazz'’);//① strCpy(title,str);//②
} }; 下列叙述中正确的是(  )。
A.程序编译正确
B.程序编译时语句①出错
C.程序编译时语句②出错
D.程序编译时语句①和②都出错


31、 在公有继承的情况下,允许派生类直接访问的基类成员包括(  )。
A.公有成员
B.公有成员和保护成员
C.公有成员、保护成员和私有成员
D.保护成员


32、 有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为(  )。
A.笛卡尔积
B.交
C.并
D.自然连接


33、有如下类定义:
class MyClass
{
public:
private:
______________________________________
int data;
};
若要为MyClass类重载流输入运算符“>>”,使得程序中可以“cin>>obj;”的形式改变MyClass类的对象0bj中数据成员data的值,则横线处的声明语句应为( )。
A.friend istream& operator>>(istream&is,MyClass&A.;
B.friend istream&operator>>(istream&is,MyClass A.;
C.istream&operator>>(istream&is,MyClass&A.;
D.istream&operator>>(istream&is,MyClass A.;


34、 有如下程序:
#inClude using namespaCe std; Class Sample{
friend long fun(Sample S); publiC:
Sample(10ng A.{x=a;} private:
long X;
}; long fun(Sample S){
if(S.x<2)return l;
return S.X*fun(Sample(s.x-1)); }
int main(  ) {
int sum=0;
for(int i=0;i<6;i++) {sum+=fun(Sample(i));}
Cout< }
执行这个程序的输出结果是(  )。
A.120
B.16
C.154
D.34


35、 有如下程序:
#inClude using namespaCe std; Class Book{
publiC:
Book(Char*t=””){strCpy(title,t);}
private:
Char titlel40]; };
Class Novel:publiC Book{ publiC:
Novel(Char*t=””):Book(t){}
Char*Category(  )Const{return”文学”;} };
int main(  ){ Book * pb; pb=new Novel(  );
Cout< return 0; }
若程序运行时输出结果是“文学”,则横线处缺失的语句是(  )。
A.Char*Category(  );
B.Char*Category(  )Const;
C.virtual Char*Category(  )Const;
D.virtual Char*Category(  )Const=0;


36、 有如下头变件:
int f1()
StatiCintf2( ); Class MA
publiC: intf3();
1statiC int f4();
};
在所描述的函数中,具有隐含的this指针的是( )。
A.fl
B.f2
C.B
D.f4


37、下面对静态数据成员的描述中,正确的是( )。
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以被类的对象调用
C.静态数据成员不能受private控制符的作用
D.静态数据成员可以直接用类名调用


38、 设int a=10,b=11,C=12;,表达式(a+B.A.2
B.0
C.-2
D.1


39、 下列说法正确的是( )。
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外通过加关键字inline定义


40、 下面对于友元函数描述正确的是( )。
A.友元函数的实现必须在类的内部定义
B.友元函数是类的成员函数
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员


二、基本操作题(18分)
41、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中含有一个源程碍文件 projl.epp。其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
ConstruCtor Called. The value is 10
Copy ConstruCtor Called. The value is 10
DestruCtor Called. DestruCtor Called. 注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。
//pwjl.Cpp
#inClude ’using namespaCe std; Class MyClass{
publiC:
//ERROR**********found**********
MyClass(int i)
{value=i;Cout<<”ConstruCtor Called.” < //ERROR**********found********** MyClass(eonst MyClass P)
{
value = P.value;
eout<<”Copy ConstruCtor Called.”< }
void Print()
{Cout<<”The value is” < //ERROR**********found********* void-MyClass()
{Cout<<”DestruCtor Called.”< private:
int value;
}; int main()
{ MyChas objl
owl.Print();
MyClmss obj2(owl); obj2.Print();
retum 0;

三、简单应用题(24分)
42、请使用VC6或使用【答题】菜单打开考生文件夹pr092下的工程pros2。此工程中包含一个程序文件main.cpp,其中有“部门”类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***********”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数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
//main.cpp
#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);S.show();
S.add(6); s.show();
S.add(19); S.show();
S.remove(2); s.show();
S.add(4); S.show();
writeToFile(””);
return 0;
}


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

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