2012年9月全国计算机二级 C++考试真题及答案
一、选择题(每小题 2 分,共 70 分)
(1)下列链表种,其逻辑结构属于非线性结构的是 D
A)循环链表
B)双向链表 C)带链的栈
D)二叉链表
(2)设循环队列的存储空间为 Q(1:35),初始状态为 front=rear=35,现经过一系列入队与
退队运算后,front=15,rear=15,则循环队列中的元素个数为 C
A)16
B)20
C)0 或 35
D)15
(3)下列关于栈的叙述中,正确的是 B
A)栈顶元素一定是最先入栈的元素
B)栈操作遵循先进后出的原则
C)栈底元素一定是最后入栈的元素
D)以上三种说法都不对
(4)在关系数据库中,用来表示实体间联系的是 A
A)二维表
B)树状结构 C)属性
D)网状结构
(5)公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职
员,则实体部门和职员间的联系是 B
A)m:1 联系
B)1:m 联系 C)1:1 联系
D)m:n 联系
(6) 有两个关系 R 和 S 如下:
R
B
1
2
3
C
2
1
1
A
a
b
c
S
B
3
A
c
C
1
则由关系 R 得到关系 S 的操作是 B
A)自然连接
B)选择 C)并
D)投影
(7)数据字典(DD)所定义的对象都包含于 B
A)程序流程图
B)数据流图(DFD 图) C)方框图
D)软件结构图
(8)软件需求规格说明书的作用不包括 A
A)软件可行性研究的依据 B)用户与开发人员对软件要做什么的共同理解 s
C)软件验收的依据
D)软件设计的依据
(9)下面属于黑盒测试方法的是 D
1
A)逻辑覆盖
B)语句覆盖 C)路径覆盖
D)边界值分析
(10)下面不属于软件设计阶段任务的是 D
A)数据库设计 B)算法设计 C)软件总体设计 D)制定软件确认测试计划
(11)下列关于函数重载的叙述中,错误的是 C
A)重载函数的参数个数可以不同
B)重载函数的参数类型可以不同
C)重载函数的返回值类型必须不同
D)重载函数的参数个数或参数类型必须有所不同
(12)下列关于类成员对象构造函数调用顺序的叙述中,正确的是 B
A)与它们在初始化列表中顺序相同
B)与它们在类中声明的顺序相同
C)与析构函数的调用顺序相同
D)顺序不确定
(13)下列关于派生类的叙述中,错误的是 D
A)派生类至少要有一个基类
B)派生类中包括了从基类继承的成员
C)一个派生类可以作为另一个派生类的基类
D)基类成员被派生类继承以后访问权限保持不变
(14)下列关于运算符重载的叙述中,正确的是 B
A)通过运算符重载机制可以为 C++语言扩充新的运算符
B)运算符重载的作用是使已有的运算符作用于类的对象
C)重载运算符的操作数类型可以全部为基本类型
D)所有运算符都可以重载
(15)下列关于模板的叙述中,错误的是 C
A)调用模板函数时,有时可以省略模板实参
B)函数模板的每个实例就是一个函数定义
C)类模板的每个实例就是一个类定义
D)类模板的实例是一个类对象
(16)下列关于输入输出流的叙述中,正确的是 A
A)一个文件流可以与一个数据文件相联系
2
B)cin 是专门从键盘输入数据的输入流类
C)流运算符<<用来从输入流中读取数据
D)宽度设置的效果永久有效
(17)下列选项中可以做 C++标识符的是 A
A)_256
B)fat/pig
C)delete
D)5char
(18)关键字 unsigned 不能修饰的类型是 A
A)char
B)int
C)float
D)long int
(19)有如下程序:
#include
using namespace std;
int main(){
char a;
cin>>a;
if(a='*')
cout<<"***"<>n;int a[n];
D)const
int size=10;int a[size];
(21)假设函数 fun 已经定义,其原型为”void fun(int a,int b=7,char *p=”**”);”,
下列函数调用中错误的是 C
A)fun(5)
B)fun(5,8)
C)fun(6,”##”)
D)fun(0,0.”==”)
(22)已经函数 print()没有返回值,如果在类中将之声明为常成员函数,正确的是 A
A)void print()const;
B)const void print();
C)void const print();
D)void print(const);
(23)已知基类 Employees 只有一个构造函数,其定义如下:
Employee::Employee(int n):id(n){}
Manager 是 Employees 的派生类,则下列对 Manager 的构造函数的定义中,正确的是 C
3
A)Manager::Manager(int n):id(n){}
B)Manager::Manager(int n){id=n;}
C)Manager::Manager(int n):Employee(n){}
D)Manager::Manager(int n){Employee(n);}
(24)已知将运算符“+”和“*”作为类 Complete 的成员函数重载,设 c1 和 c2 是类 Complex
的对象,则表达式 c1+c2*c1 等价于 B
A)c1.operator*(c2.operator+(c1))
B)c1.operator+(c2.operator*(c1))
C)c1.operator*(c1.operator+(c2))
D)c2.operator+(c1.operator*(c1))
(25)下列类模板的定义中语法格式错误的是 D
A)templateclass Buffer{/*…*/};
B)templateclass Buffer{/*…*/};
C)templateclass Buffer{/*…*/};
D)templateclass Buffer{/*…*/};
(26)在 C++中既可以用于文件输入又可以用于文件输出的流类是 A
A)fstream
B)ifstream
C)ofstream
D)iostream
(27)有如下类定义: B
class MyClass{
int b;char a;double c;
public:
MyClass():c(0.0),b(0),a(','){}
};
创建这个类的对象时,数据成员的初始化顺序是
A)a,b,c
B)c,b,a
C)b,a,c
D)c,a,b
(28)有如下类定义 A
class MyClass{
int x;
public:
MyClass():x(0),y(0){}
int GetX(){return x;}
void SetX(int xx){x==xx;}
4
int y;
};
已知 obj 是类 MyClass 的对象,下列语句中违反类成员访问控制权限的是
A)obj.x;
B)obj.y;
C)obj.GetX();
D)obj.SetX(0);
(29)有如下类定义
class Test{
char a; const char b;
public:Test(char c){a=c;b=c;}
//第 1 行
void f(char a)const{this->a=a;}
//第 2 行
void g(char b){this->b=b;}
//第 3 行
char h()const{return a;}
//第 4 行
};
编译时没有错误的行是 C
A)第 1 行
B)第 2 行
C)第 3 行
D)第 4 行
(30)有如下程序:
#include
using namespace std;
class A{
public:
A(){cout<,'A';}
~A(){cout<<'C';}
};
class B:public A{
public:
B(){cout<<'G';}
~B(){cout<<'T';}
};
int main(){
B obj;
return 0;
5
}
运行这个程序的输出结果是 B
A)GATC
B)AGTC
C)GACT
D)AGCT
(31)有如下程序:
#include
using namespace std;
class Base{
public;
void fun(){cout<<'B';}
};
class Derived:public Base{
public;
void fun(){
cout<<'D';}
};
int main(){
Derived d;
d.fun();
return 0;
}
若程序的输出结果是 BD,则划线处缺失的部分是 C
A)fun()
B)Base.fun()
C)Base::fun()
D)Base->fun()
(32)有如下程序:
#include
using namespace std;
class B{
public;
virtual void f() {cout<<"B";}
void g(){cout<<"B";}
}
class D;public B {
6
public;
void f(){cout<<"D";}
void g(){coun<<"D";}
}
void h(B*p){p->f();p->g();}
int main(){
D obj;
h(&obj);
return 0;
}
运行这个程序的输出结果是: D
A)DD
B)BB
C)BD
D)DB
(33)有如下程序:
#include
#include
using namespace std;
class MyString{
public;
char str[80];
MyString(const char*s) {strcpy(str,s);}
MyString&operator+=(MyString a){
strcat(str,a.str);
return*this;
}
};
ostream&operator<<(ostream&s,const MyString&z){return s << z.str}
int main(){
MyString x("abc"),y("cde");
cout<<(x+=y)<}
运行这个程序的输出结果是 D
A) abc
B) cde
C) abcde
D) abccde
(34)有如下程序: A
#include
#include
using namespace std;
int main(){
cout<