2008年4月全国计算机等级考试二级C++笔试试题及答案(考试时间90 分钟,满分100 分)一、选择题(每小题2分,共70分)(1)程序流程图中带有箭头的线段表示的是()。
A)图元关系B)数据流C)控制流D)调用关系(2)结构化程序设计的基本原则不包括()。
A)多元性B)自顶向下C)模块化D)逐步求精(3)软件设计中模块划分应遵循的准则是()。
A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是()。
A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成测试计划(5)算法的有穷性是指()。
A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n 的线性表排序,在最坏情况下,比较次数不是n(n-1)/2 的排序方法是()。
A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)下列关于栈的叙述正确的是()。
A)栈按“先进先出”组织数据B)栈按“先进后出”组织数据C)只能在栈底插入数据D)不能删除数据(8)在数据库设计中,将E-R 图转换成关系数据模型的过程属于()。
A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段(9)有三个关系R、S 和T 如下:R S TB C Da 0 k1b 1 n1由关系R 和S 通过运算得到关系T,则所使用的运算为()。
A)并B)自然连接C)笛卡尔积D)交(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC 的关键字(键或码)为()。
A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)下列有关函数重载的叙述中,错误的是A)函数重载就是用相同的函数名定义多个函数B)重载函数的参数列表必须不同C)重载函数的返回值类型必须不同D)重载函数的参数可以带有默认值(12)下列有关类成员的叙述中,正确的是A)友元函数是类的成员函数B)类成员的默认访问权限是私有的D)类的静态数据成员不能是常成员(13)下列有关类继承的叙述中,错误的是A)继承可以实现软件复用B)虚基类可以解决由多继承产生的二义性问题C)派生类构造函数要负责调用基类的构造函数D)派生类没有继承基类的私有成员(14)下列有关运算符重载的叙述中,正确的是A)运算符重载是多态性的一种表现B)C++中可以通过运算符重载创造新的运算符C)C++中所有运算符都可以作为非成员函数重载D)重载运算符时可以改变基结合性(15)下列有关模板的叙述中,正确的是A)函数模板不能含有常规形参B)函数模板的一个实例就是一个函数定义C)类模板的成员函数不能是模板函数D)用类模板定义对象时,绝对不能省略模板实参(16)下列有关C++流的叙述中,错误的是A)C++操作符setw 设置的输出宽度永久有效B)C++操作符endl 可以实现输出的回车换行C)处理文件I/O 时,要包含头文件fstreamB C Da 0 k1B C Df 3 h2a 0 k1n 2 x1D)进行输入操作时,eof()函数用于检测是否到达文件尾(17)下列符号中能够作为C++标识符的是A)const B)2a C)_shape D)-count(18)已知枚举类型声明语句为:enum COLOR{ WHITE,YELLOW,GREEN=5,RED,BLACK=10 };则下列说法中错误的是A)枚举常量YELLOW 的值为1 B)枚举常量RED 的值为6C)枚举常量BLACK 的值为10 D)枚举常量WHITE 的值为1(19)执行下列语句段后,输出字符“*”的个数是for (int i=50; i>1; I-=2)cout<<'*';A)24 B)25C)26 D)50(20)有如下定义:int a[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5 的是A)a[2] B)a[3]C)*(p+2) D)*p+4(21)已知函数f 的原型是void f(int *a, long & b);,变量v1、v2 的定义是:int v1; loong v2;下列调用语句中正确的是A)f(v1, &v2); B)f(v1, v2);C)f(&v1, &v2); D)f(&v1, v2);(22)有如下类定义:class Point{private;static int how_many;};要初始化Point 类的静态成员how_many,下划线处应填入的内容是A)ing B)static intC)int Point:: D)static int Point::(23)在下列关键字中,不能用来表示继承方式的是A)private B)staticC)public D)protected(24)已知V alue 是一个类,V alue 是V alue 的一个对象。
下列以非成员函数形式重载的运算符函数原形中,正确的是A)V alue operator+(V alue v, int i); B)V alue operator+(V alue v=value, int i);C)V alue operator+(V alue vint i=0); D)V alue operator+(V alue v=value, int i=0);(25)下面是一个模板声明的开始部分:templute<typename T> double __由此可知A)这可能是一个函数模板的声明B)这可能是一个类模板的声明C)这既可能是一个函数模板的声明,也可能是一个类模板的声明D)这肯定是一个错误的模板声明(26)有如下4 个语句:①cout<<'A'<<setfill('*')<<left<<setw(7)<<'B'<<endl;②cout<<setfill('*')<<left<<setw(7)<<'A'<<'B'<<endl;③cout<<'A'<<serfill('*')<<right<<setw(7)<<'B'<<endl;④cout<<setfill('*')<<right<<setw(7)<<'A'<<'B'<<endl;其中能显示A******B 的是A)①和③B)①和④C)②和③D)②和④(27)有如下类定义:class MyClass{Int value;public;MyClass(int n): value (n) {}int gerV alue()const{ return value;}};则类MyClass 的构造函数的个数是A)1 个B)2 个C)3 个D)4 个(28)有如下类和对象的定义:class Constants{public;static double getPI(){return 3.1416;}};Constants constants;3.1416 的是A)cout<<constants->getPI();和cout<<Constants::gerPI();B)cout<<constants.getPI();和cout<<Constants.getPI();C)cout<<constants->getPI();和cout<<Constants->getPI();D)cout<<constants.getPI();和cout<<Constants::getPI();(29)有如下程序:#include<iostream>using namespace std;class V AC{public;int f() const { return 3; }int f() {return 5;}};const V AC v2;cout<<v1.f()<<v2.f();feturn 0;}运行时的输出结果是A)53 B)35C)55 D)33(30)有如下类声明:class Base{protected;int amount;public;Base(int n=0): amount(n){}int getAmount()const { retum amount; }};class Derived: public Base {protected;int value;public;Derived(int m, int n): value(m). Base(n){}Int getData()const{ return value+amount; }};已知x 是一个Derived 对象,则下列表达式中正确的是A)x.value+ x.getAmount() B)x.getData()-x.gctAmount() C)x.getData()-x.amount D)x.value+x.amount(31)有如下程序:#include<iostream>using namespace std;class Base {int x;public;Base{int n=0}; x(n){cout<<n;}Int getX()const{return x;}};class Derived public Base{int y;public;Derived(int m, int n): y(m), Base(n){cout<<m;}Derived(int m): y(m){cout<<m;}};int main(){Derived dl(3), d2(5,7);Return 0;}运行时的输出结果是A)375 B)357 C)0375 D)0357(32)下列有关抽象类和纯虚函数的叙述中,错误的是A)拥有纯虚函数的类是抽象类,不能用来定义对象B)抽象类的派生类若不实现纯虚函数,它也是抽象类C)纯虚函数的声明以“=0;”结束D)纯虚函数都不能有函数体(33)有如下程序:#include<iostream>Using namespace std;Class Amount{Amount(int n=0): amount(n){}Int getAmount()const{return amount;}Amount &operator +=(Amount a){amount+=a.amount;return ;}};int main(){Amount x(3),y(7);x+=y;cout<<x.getAmount()<<endl;return 0;}已知程序的运行结果是10,则下划线处缺失的表达式是A)*this B)thisC)&amount D)amount(34)下列语句分别是不同程序中的第一个输入输出语句,若去掉其中的“<<left”,输出效果将发生变化的是A)cout<<left<<setfill('*')<<357;B)cout<<left<<setw(5)<<357;C)cout<<left<<setw(5)<<"ABCDE";D)cout<<left<<"ABCDE";(35)有如下程序:#include<iostream>using namespace std;class GA{public;virtual int f(){retum l;}};class GB: public GA{public;virtual int f(){return 2;}};void show(GA g){cout<<g.f();}void display(GA &g){cout<<g.f();}int main(){GA a: show(a); display(a);GB b: show(b); display(b);retum 0;}运行时的输出结果是A)1111 B)1211C)1112 D)1212二、填空题(每空2分,共30分)(1)测试用例包括输入值集和值集。