2011年3月计算机等级考试二级C++笔试真题
![](http://www.onekao.net/templets/default/images/content_ad.gif)
一、选择题
(1)下列关于栈叙述正确的是 #
A)栈顶元素最先能被删除
B)栈顶元素最后才能被删除 #
C)栈底元素永远不能被删除
D)以上三种说法都不对
#
(2)下列叙述中正确的是
A)有一个以上根结点的数据结构不一定是非线性结构
#
B)只有一个根结点的数据结构不一定是线性结构
#
C)循环链表是非线性结构 #
D)双向链表是非线性结构
#
(3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层) #
A)3
B)4
C)6 #
D)7 #
(4)在软件开发中,需求分析阶段产生的主要文档是 #
A)软件集成测试计划
B)软件详细设计说明书
C)用户手册
D)软件需求规格说明书 #
(5)结构化程序所要求的基本结构不包括
#
A)顺序结构 #
B)GOTO跳转 #
C)选择(分支)结构 #
D)重复(循环)结构 #
(6)下面描述中错误的是
#
A)系统总体结构图支持软件系统的详细设计
B)软件设计是将软件需求转换为软件表示的过程
C)数据结构与数据库设计是软件设计的任务之一
D)PAD图是软件详细设计的表示工具
#
(7)负责数据库中查询操作的数据库语言是
#
A)数据定义语言
#
B)数据管理语言 #
C)数据操纵语言 #
D)数据控制语言
#
(8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是
#
A)1:1联系 #
B)1:m联系 #
C)m:1联系
#
D)m:n联系 #
(9)有三个关系R、S和T如下: #
则由关系R和S得到关系T的操作是
A)自然连接 #
B)交
C)除
#
D)并
(10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是
A)-369 #
B)369 #
C)0.369 #
D)整数集合{1,2,3,4,5}
(11)为了提高函数调用的实际运行速度,可以将较简单的函数定义为 #
A)内联函数
#
B)重载函数 #
C)递归函数
#
D)函数模板 #
(12)若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为 #
A)a
#
B)AA.a #
C)a() #
D)AA::a() #
(13)当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是
#
A)任何
#
B)公有或保护
C)保护或私有 #
D)私有
#
(14)若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是
#
A)Data+(Data);
B)Data operator+(Data);
C)Data+operator(Data);
D)operator+(Data,Data); #
(15)下列关于函数模板的描述中,正确的是 #
A)函数模板是一个实例函数
B)使用函数模板定义的函数没有返回类型
C)函数模板的类型参数与函数的参数相同 #
D)通过使用不同的类型参数,可以从函数模板得到不同的实例函数 #
(16) C++系统预定义了4个用于标准数据流的对象,下列选项中不属于此类对象的是
#
A)cout #
B)cin
#
C)cerr #
D)cset
#
(17)Windows环境下,由C++源程序文件编译而成的目标文件的扩展名是 #
A)cpp #
B)exe #
C)obj
#
D)lik
#
(18)字符串“a+b=12\n\t”的长度为 #
A)12
B)10
#
C)8 #p#分页标题#e# #
D)6
(19)有如下程序:
#
#include
using namespace std;
int main(){
int f,f1=0,f2=1; #
for(int i=3;i<=6;i++){ #
f=f1+f2; #
f1=f2;f2=f; #
} #
cout< return 0; #
}
运行时的输出结果是
A)2 #
B)3
C)5 #
D)8 #
(20)有如下程序: #
#include
#
using namespace std; #
int main(){
int a[6]={23,15,64,33,40,58}; #
int s1,s2;
s1=s2=a[0];
for(int* p=a+1;p if(s1>*p) s1=*p; #
if(s2<*p) s2=*p;
}
#
cout< return 0;
#
} #
运行时的输出结果是
#
A)23 #
B)58 #
C)64
D)79 #
(21)有如下程序:
#include
using namespace std;
#
void f1(int& x,int& y) {int z=x; x=y; y=z;}
void f2(int x;int y) {int z=x; x=y; y=z;} #
int main(){ #
int x=10,y=26; #
f1(x,y);
f2(x,y); #
cout< return 0;
#
}
运行时的输出结果是
#
A)10 #
B)16 #
C)26
D)36
#
(22)有如下程序: #
#include
using namespace std;
class XA{
int a; #
public: #
static int b;
XA(int aa):a(aa) {b++;}
#
~XA(){} #
int get(){return a;} #
};
int XA::b=0; #
int main(){
#
XA d1(2),d2(3);
#
cout< #
}
#
运行时的输出结果是
A)5 #
B)6 #
C)7 #
D)8
(23)有如下程序:
#
#include
using namespace std;
#
class Point{ #
int x,y; #
public: #
Point(int x1=0,int y1=0):x(x1),y(y1){} #
int get(){return x+y;} #
}; #
class Circle{
#
Point center; #
int radius; #
public: #
Circle(int cx,int cy,int r):center(cx,cy),raaius(r){} #
int get(){return center.get()+radius;}
}; #
int main(){
#
Circle c(3,4,5);
cout< return 0; #
} #
运行时的输出结果是
#
A)5 #
B)7
#
C)9
D)12
#
(24)若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是
A)operator long() const; #
B)operator long(BigNumber);
C)long operator long() const; #
D)long operator long(BigNumber);
#
(25)有如下函数模板定义:
#
template
T1 FUN(T2 n){return n*5.0;} #
若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为
#
A)FUN(9) #
B)FUN<9>
C)FUN
D)FUN<9>(double) #
(26)下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 #
A)cout< B)cout< C)cout< D)cout< (27)下列关于析构函数的描述中,错误的是
#
A)析构函数可以重载 #
B)析构函数由系统自动调用
C)每个对象的析构函数只被调用一次 #
D)每个类都有析构函数
#
(28)下列关于构造函数的描述中,错误的是 #
A)构造函数名与类名相同
B)构造函数可以有返回值
C)构造函数可以重载 #
D)每个类都有构造函数 #
(29)若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是 #
A)0 #
B)1
#
C)2 #
D)3
#
(30)下列描述中,错误的是 #
A)公有继承时基类中的公有成员在派生类中仍是公有成员
#
B)公有继承时基类中的保护成员在派生类中仍是保护成员 #
C)保护继承时基类中的公有成员在派生类中仍是公有成员 #
D)保护继承时基类中的保护成员在派生类中仍是保护成员
#
(31)生成派生类对象时,派生类构造函数调用基类构造函数的条件是 #
A)无需任何条件 #
B)基类中显式定义了构造函数
#
C)派生类中显式定义了构造函数#p#分页标题#e#
D)派生类构造函数明确调用了基类构造函数
#
(32)下列关于派生类和基类的描述中,正确的是 #
A)派生类成员函数只能访问基类的公有成员
#
B)派生类成员函数只能访问基类的公有和保护成员 #
C)派生类成员函数可以访问基类的所有成员 #
D)派生类对基类的默认继承方式是公有继承
(33)有如下类模板定义: #
template
class BigNumber{
long n; #
public:
#
BigNumber(T i):n(i){}
#
BigNumber operator+(BigNumber b){
return BigNumber(n+b.n);
} #
}; #
己知b1、b2是BigNumber的两个对象,则下列表达式中错误的是
A)bl+b2 #
B)b1+3
C)3+b1 #
D)3+3
(34)下列关于文件流的描述中,正确的是
A)文件流只能完成针对磁盘文件的输入输出
#
B)建立一个文件流对象时,必须同时打开一个文件
C)若输入流要打开的文件不存在,将建立一个新文件 #
D)若输出流要打开的文件不存在,将建立一个新文件
#
(35)有如下程序:
#
#include
using namespace std;
class Pair{ #
int m,n;
#
public:
Pair(int j,int k):m(j),n(k){} #
int get() {return m;}
int get() const {return m+n;} #
}; #
int main(){
Pair a(3,5); #
const Pair b(3,5); #
cout+a.get()< return 0;
#
} #
运行时的输出结果是
A)33
#
B)38 #
C)83 #
D)88
二、填空题
#
(1)有序线性表能进行二分查找的前提是该线性表必须是 【1】 存储的。 #
(2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF。则后序遍历结果为 【2】 。 #
(3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为 【3】 测试。
(4)实体完整性约束要求关系数据库中元组的 【4】 属性值不能为空。 #
(5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称 【5】 是关系A的外码。
(6)若有定义语句“int x=10,y=20,z=20;”,则表达式x>z&&y==z的值为 【6】 。 #
(7)有如下语句序列: #
int x=-10;while(++x){ }
#
运行时while循环体的执行次数为 【7】 。#p#分页标题#e#
#
(8)有如下语句序列: #
int arr[2][2]={{9,8},{7,6}};
int *p=arr[0]+1; cout<<*p< 运行时的输出结果是 【8】 。 #
(9)函数fun的功能是将一个数字字符串转换为一个整数,请将函数补充完整。 #
int fun(char *str){
#
int num=0; #
while(*str){ #
num*=10;
#
num+= 【9】 ; #
str++; #
} #
return num;
#
} #
(10)若要将函数“void FriFun();”声明为类MyClass的友元函数,则应在类MyClass的定义中加入语句 【10】 。 #
(11)下列程序的输出结果为012,请根据注释将横线处的缺失部分补充完整。 #
#include
using namespace std;
#
class Test{
#
public:
#
Test(int a) {data=a;} #
~Test() {} #
void print(){cout< private: #
int data; #
};
#
int main(){
Test t[3]={ 【11】 };//对有3个元素的Test类对象数组t初始化t[i].print(); #
for(int i=0;i<3;i++) #
return 0;
} #
(12)请在横线处填写派生类Derived的继承方式,使得程序的输出结果为Base。
#include
using namespace std; #
class Base{
public: #
void print(){cout<<"Base";}
};
#
class Derived: 【12】 Base{};
#
int main(){
#
Derived d;
d.print(); #
return 0;
#
} #
(13)下列程序的输出结果为1 2.3 2 4.6,请将横线处的缺失部分补充完整。 #
#include
using namespace std;
#
class Base{ #
public:
#
Base(int a):idata(a){} #
void print(){cout< private: #
int idata; #
}; #
class Derived:public Base{ #
public: #
Derived(int a;double b): 【13】 ,ddata(b){} #
void print(){Base::print();cout< private:
#
double ddata;
};
#
int main(){ #
Derived dl(1,2.3),d2(2,4.6); #
d1.print();
#
d2.print();
#
return 0;
#
}
(14)下列程序的输出结果为-5/8 -3/4,请将横线处的缺失部分补充完整。
#
#include
using namespace std;
class Fraction{ //“分数”类
#
public:
#
Fraction(double a,double b):num(a),den(b){}
~Fraction(){} #
//重载取负运算符“-”,返回一个分数对象,其分子是原来分子的相反数。#p#分页标题#e# #
Fraction operator-(){ #
【14】
#
return f;
#
}
void print(){ cout< private:
double num; //分子 #
double den; //分母
};
#
int main(){
Fraction f1(5;8),f2(3,4);
(-f1).print();(-f2).print();
#
return 0;
}
#
(15)函数Min的功能是返回具有n个元素的数组array中的最小值。请将横线处的缺失部分补充完整,使得程序的输出结果为1.24。 #
#include
#
using namespace std;
template
T Min(T* array,int n){
#
T min=array[0]; #
for(int i=1;i if(array[i] return min; #
} #
int main(){
double arr[8]={5.2,48.45,41.01,42,51.2,1.24,14.12,42};
#
cout<< 【15】 ; #
return 0;
#
} #
#