1、全国计算机等级考试二级 C+真题 2012年 9月及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分)(总题数:35,分数:70.00)1.下列链表种,其逻辑结构属于非线性结构的是(分数:2.00)A.循环链表B.双向链表C.带链的栈D.二叉链表2.设循环队列的存储空间为 Q(1:35),初始状态为 front=rear=35,现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为(分数:2.00)A.16B.20C.0或 35D.153.下列关于栈的叙述中,正确的是(分数:2.00)A.栈顶元素一定是最先入栈的元素B.
2、栈操作遵循先进后出的原则C.栈底元素一定是最后入栈的元素D.以上三种说法都不对4.在关系数据库中,用来表示实体间联系的是(分数:2.00)A.二维表B.树状结构C.属性D.网状结构5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是(分数:2.00)A.m:1联系B.1:m联系C.1:1联系D.m:n联系6.有两个关系 R和 S 如下: (分数:2.00)A.自然连接B.选择C.并D.投影7.数据字典(DD)所定义的对象都包含于(分数:2.00)A.程序流程图B.数据流图(DFD 图)C.方框图D.软件结构图8.软件需求规格说明书的作用不
3、包括(分数:2.00)A.软件可行性研究的依据B.用户与开发人员对软件要做什么的共同理解C.软件验收的依据D.软件设计的依据9.下面属于黑盒测试方法的是(分数:2.00)A.逻辑覆盖B.语句覆盖C.路径覆盖D.边界值分析10.下面不属于软件设计阶段任务的是(分数:2.00)A.数据库设计B.算法设计C.软件总体设计D.制定软件确认测试计划11.下列关于函数重载的叙述中,错误的是(分数:2.00)A.重载函数的参数个数可以不同B.重载函数的参数类型可以不同C.重载函数的返回值类型必须不同D.重载函数的参数个数或参数类型必须有所不同12.下列关于类成员对象构造函数调用顺序的叙述中,正确的是(分数:
4、2.00)A.与它们在初始化列表中顺序相同B.与它们在类中声明的顺序相同C.与析构函数的调用顺序相同D.顺序不确定13.下列关于派生类的叙述中,错误的是(分数:2.00)A.派生类至少要有一个基类B.派生类中包括了从基类继承的成员C.一个派生类可以作为另一个派生类的基类D.基类成员被派生类继承以后访问权限保持不变14.下列关于运算符重载的叙述中,正确的是(分数:2.00)A.通过运算符重载机制可以为 C+语言扩充新的运算符B.运算符重载的作用是使已有的运算符作用于类的对象C.重载运算符的操作数类型可以全部为基本类型D.所有运算符都可以重载15.下列关于模板的叙述中,错误的是(分数:2.00)A
5、.调用模板函数时,有时可以省略模板实参B.函数模板的每个实例就是一个函数定义C.类模板的每个实例就是一个类定义D.类模板的实例是一个类对象16.下列关于输入输出流的叙述中,正确的是(分数:2.00)A.一个文件流可以与一个数据文件相联系B.cin是专门从键盘输入数据的输入流类C.流运算符a; if(a=*) coutn;int an;D.const int size=10;int asize;21.假设函数 fun已经定义,其原型为”void fun(int a,int b=7,char *p=”*”);”,下列函数调用中错误的是(分数:2.00)A.fun(5)B.fun(5,8)C.fun
6、(6,”#”)D.fun(0,0.”=”)22.已经函数 print()没有返回值,如果在类中将之声明为常成员函数,正确的是(分数:2.00)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的构造函数的定义中,正确的是(分数:2.00)A.Manager:Manager(int n):
7、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等价于(分数:2.00)A.c1.operator*(c2.operator+(c1)B.c1.operator+(c2.operator*(c1)C.c1.operator*(c1.operator+(c2)D.c2.operator+(c1.
8、operator*(c1)25.下列类模板的定义中语法格式错误的是(分数:2.00)A.templateclass Buffer/*/;B.templateclass Buffer/*/;C.templateclass Buffer/*/;D.templateclass Buffer/*/;26.在 C+中既可以用于文件输入又可以用于文件输出的流类是(分数:2.00)A.fstreamB.ifstreamC.ofstreamD.iostream27.有如下类定义: class MyClass int b;char a;double c; public: MyClass():c(0.0),b(0
9、),a(,) ; 创建这个类的对象时,数据成员的初始化顺序是(分数:2.00)A.a,b,cB.c,b,aC.b,a,cD.c,a,b28.有如下类定义 class MyClass int x; public: MyClass():x(0),y(0) int GetX()return x; void SetX(int xx)x=xx; int y; ; 已知 obj是类 MyClass的对象,下列语句中违反类成员访问控制权限的是(分数:2.00)A.obj.x;B.obj.y;C.obj.GetX();D.obj.SetX(0);29.有如下类定义 class Test char a; con
10、st char b; public:Test(char c)a=c;b=c; /第 1行 void f(char a)constthis-a=a; /第 2行 void g(char b)this-b=b; /第 3行 char h()constreturn a; /第 4行 ; 编译时没有错误的行是(分数:2.00)A.第 1行B.第 2行C.第 3行D.第 4行30.有如下程序: #include using namespace std; class A public: A()coutfun()32.有如下程序: #include using namespace std; class B
11、public; virtual void f() coutf();p-g(); int main() D obj; h( return 0; 运行这个程序的输出结果是:(分数:2.00)A.DDB.BBC.BDD.DB33.有如下程序: #include #include using namespace std; class MyString public; char str80; MyString(const char*s) strcpy(str,s); MyString return*this; ; ostream if(a=*) coutn;int an;D.const int size
12、=10;int asize; 解析:21.假设函数 fun已经定义,其原型为”void fun(int a,int b=7,char *p=”*”);”,下列函数调用中错误的是(分数:2.00)A.fun(5)B.fun(5,8)C.fun(6,”#”) D.fun(0,0.”=”)解析:22.已经函数 print()没有返回值,如果在类中将之声明为常成员函数,正确的是(分数:2.00)A.void print()const; B.const void print();C.void const print();D.void print(const);解析:23.已知基类 Employees只有
13、一个构造函数,其定义如下: Employee:Employee(int n):id(n) Manager是 Employees的派生类,则下列对 Manager的构造函数的定义中,正确的是(分数:2.00)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的对象,则表达式
14、 c1+c2*c1等价于(分数:2.00)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.下列类模板的定义中语法格式错误的是(分数:2.00)A.templateclass Buffer/*/;B.templateclass Buffer/*/;C.templateclass Buffer/*/;D.templateclass Buffer/*/; 解析:26.在 C+中既可以用于文
15、件输入又可以用于文件输出的流类是(分数:2.00)A.fstream B.ifstreamC.ofstreamD.iostream解析:27.有如下类定义: class MyClass int b;char a;double c; public: MyClass():c(0.0),b(0),a(,) ; 创建这个类的对象时,数据成员的初始化顺序是(分数:2.00)A.a,b,cB.c,b,a C.b,a,cD.c,a,b解析:28.有如下类定义 class MyClass int x; public: MyClass():x(0),y(0) int GetX()return x; void S
16、etX(int xx)x=xx; int y; ; 已知 obj是类 MyClass的对象,下列语句中违反类成员访问控制权限的是(分数:2.00)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)constthis-a=a; /第 2行 void g(char b)this-b=b; /第 3行 char h()constreturn a; /第 4行 ; 编译时没有错误
17、的行是(分数:2.00)A.第 1行B.第 2行C.第 3行 D.第 4行解析:30.有如下程序: #include using namespace std; class A public: A()coutfun()解析:32.有如下程序: #include using namespace std; class B public; virtual void f() coutf();p-g(); int main() D obj; h( return 0; 运行这个程序的输出结果是:(分数:2.00)A.DDB.BBC.BDD.DB 解析:33.有如下程序: #include #include
18、using namespace std; class MyString public; char str80; MyString(const char*s) strcpy(str,s); MyString return*this; ; ostream)解析:46.有下列程序的输出结果是 2334,请将横线处缺失部分补充完整。 #include using namespace std; class Base int m; pubic; Base(int k):m(k) int getM1constreturn m; class Derived:public Base int n; public;
19、 Derived(int k):【11】,n(k) int getN2constreturn n; int main3 Derived d1(3),d2(4); coutd1.getM4d1.getNd2.getM5D2.getN6; return 0; (分数:2.00)填空项 1:_ (正确答案:base(k-1))解析:47.在 C+中,编译时的多态性是通过模板或函数【12】实现的。(分数:2.00)填空项 1:_ (正确答案:重载)解析:48.有些运算符既可以作为成员函数重载,也可以作为非成员函数重载。若在一个重载的运算符函数的定义中成功地使用了 this指针,说明它是作为【13】重载
20、的。(分数:2.00)填空项 1:_ (正确答案:成员函数)解析:49.有如下程序: #include using namespace std; template T Add(Tv1,Tv2)return v1+v2; int main1 coutAdd(2,3),填空项 1:_ (正确答案:5,5.8)解析:50.有如下程序: #include using namespace std; class Point double x,y; public; Point(double xx=0.0,double yy=0.0):x(xx),y(yy) double getX1constreturn x
21、; double getY2constreturn y; void show3constcout(x,y); class Line Point p1,p2; public; Line(Point pp1,Point pp2):p1(pp1),p2(pp2) Point LeftMost4const if(p1.getX5=P2.getX6)return p1; return p2; int main7 Line line(Point(3.1,5.2),Point(8.2,4.4); line.LeftMost8.show9; return 0; 运行这个程序的输出结果是【15】。(分数:2.00)填空项 1:_ (正确答案:(3.1,5.2))解析: