(考试时间90分钟,满分100分)
一、选择题(每小题2分,共70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(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)在软件设计中,不属于过程设计工具的是 A)PDL(过程设计语言) B)PAD图 C)N-S图 D)DFD图
(7)下列叙述中正确的是 A)软件交付使用后还需要进行维护 B)软件一旦交付使用就不需要再进行维护 C)软件交付使用后其生命周期就结束 D)软件维护是指修复程序中被破坏的指令
(8)数据库设计的根本目标是要解决 A)数据共享问题 B)数据安全问题 C)大量数据存储问题 D)简化数据维护
(9)设有如下关系表:

则下列操作中正确的是 A)T=R∩S B)T=R∪S C)T=R×S D)T=R/S
(10)数据库系统的核心是 A)数据模型 B)数据库管理系统 C)数据库 D)数据库管理员
(11)下列关于C++函数的叙述中,正确的是 A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值 C)函数在被调用之前必须先声明 D)函数不能自己调用自己
(12)下列关于类和对象的叙述中,错误的是 A)一个类只能有一个对象 B)对象是类的具体实例 C)类是对某一类对象的抽象 D)类和对象的关系是一种数据类型与变量的关系
(13)在C++中,用于实现运行时多态性的是 A)内联函数 B)重载函数 C)模板函数 D)虚函数
(14)下列关于运算符重载的叙述中,正确的是 A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载 C)若重载运算符+,则相应的运算符函数名是+ D)重载一个二元运算符时,必须声明两个形参
(15)下列关于模板的叙述中,错误的是 A)模板声明中的第一个符号总是关键字template B)在模板声明中用 < 和 > 括起来的部分是模板的形参表 C)类模板不能有数据成员 D)在一定条件下函数模板的实参可以省略
(16)对于语句 cout<< A)“cout”是一个输出流对象 B)“endl”的作用是输出回车换行 C)“x”是一个变量 D)“<<”称作提取运算符
(17)下列字符串中,正确的C++标识符是 A)foo-1 B)2b C)new D)_256
(18)已知枚举类型定义语句为: enum Token { NAME, NUMBER, PLUS = 5, MINUS, PRINT = 10 }; 则下列叙述中错误的是 A)枚举常量NAME的值为1 B)枚举常量NUMBER的值为1 C)枚举常量MINUS的值为6 D)枚举常量PRINT的值为10
(19)执行语句序列 int i=0; while(i >< 25) i+=3; cout< 输出结果是 A)24 B)25 C)27 D)28
(20)要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是 30,50,-88,0 和 0,则下列定义语句中错误的是 A)int vect[ ]={30,50,-88}; B)int vect[ ]={30,50,-88,0,0}; C)int vect[5]={30,50,-88}; D)int vect[5]={30,50,-88,0,0};
(21)有如下程序: #include void fun(int& x, int y) { int t = x; x = y; y = t; } int main( ) { int a[2] = {23, 42}; fun(a[1], a[0]); std::cout << a[0] << ", " << a[1] << std::endl; return 0; } 执行后的输出结果是 A)42, 42 B)23, 23 C)23, 42 D)42, 23
(22)有如下类声明: class Foo { int bar; }; 则Foo类的成员bar是 A)公有数据成员 B)公有成员函数 C)私有数据成员 D)私有成员函数
(23)有如下类声明: class MyBASE{ int k; public: void set(int n){ k=n;} int get( )const{ return k; } }; class MyDERIVED: protected MyBASE{ protected: int j; public: void set(int m, int n){ MyBASE::set(m); j=n;} int get( )const{ return MyBASE::get( )+j; } }; 则类MyDERIVED中保护的数据成员和成员函数的个数是 A)4 B)3 C)2 D)1
(24)已知在一个类体中包含如下函数原型: VOLUME operator-(VOLUME)const;,下列关于这个函数的叙述中,错误的是 A)这是运算符-的重载运算符函数 B)这个函数所重载的运算符是一个一元运算符 C)这是一个成员函数 D)这个函数不改变类的任何数据成员的值
(25)有如下函数模板定义: template T func(T x, T y) { return x*x+y*y; } 在下列对func的调用中,错误的是 A)func(3, 5); B)func(3.0, 5.5); C)func (3, 5.5); D)func(3, 5.5);
(26)有如下程序: #include using namespace std; int main( ) { cout.fill('*'); cout.width(6); cout.fill('#'); cout << 123 << endl; return 0; } 执行后的输出结果是 A)###123 B)123### C)***123 D)123***
(27)在下列函数原型中,可以作为类AA构造函数的是 A)void AA(int); B)int AA( ); C)AA(int)const; D)AA(int);
(28)下列关于this指针的叙述中,正确的是 A)任何与类相关的函数都有this指针 B)类的成员函数都有this指针 C)类的友元函数都有this指针 D)类的非静态成员函数才有this指针
(29)有如下程序: #include using namespace std; class Test { public: Test( ) { n+=2; } ~Test( ) { n-=3; } static int getNum( ) { return n; } private: static int n; }; int Test::n = 1; int main( ) { Test* p = new Test; delete p; cout << "n=" << Test::getNum( ) << endl; return 0; } 执行后的输出结果是 A)n=0 B)n=1 C)n=2 D)n=3
(30)有如下程序: #include using namespace std; class A { public: A( ) { cout << "A"; } }; class B { public: B( ) { cout << "B"; } }; class C : public A { B b; public: C( ) { cout << "C"; } }; int main( ) { C obj; return 0; } 执行后的输出结果是 A)CBA B)BAC C)ACB D)ABC
(31)有如下类声明: class XA{ int x; public: XA(int n){ x=n;} }; class XB: public XA{ int y; public: XB(int a,int b); }; 在构造函数XB的下列定义中,正确的是 A)XB::XB(int a,int b): x(a), y(b){ } B)XB::XB(int a,int b): XA(a), y(b){ } C)XB::XB(int a,int b): x(a), XB(b){ } D)XB::XB(int a,int b): XA(a), XB(b){ }
(32)有如下程序: #include using namespace std; class BASE{ public: ~BASE( ){ cout<<"BASE";} }; class DERIVED: public BASE { public: ~DERIVED( ){ cout<<"DERIVED";} }; int main( ){DERIVED x; return 0 ;} 执行后的输出结果是 A)BASE B)DERIVED C)BASEDERIVED D)DERIVEDBASE
(33)在表达式 x+y*z中, + 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。下列叙述中正确的是 A)operator+有两个参数,operator*有两个参数 B)operator+有两个参数,operator*有一个参数 C)operator+有一个参数,operator*有两个参数 D)operator+有一个参数,operator*有一个参数
(34)下面关于C++流的叙述中,正确的是 A)cin是一个输入流对象 B)可以用ifstream定义一个输出流对象 C)执行语句序列char *y="PQMN"; cout< D)执行语句序列char x[80]; cin.getline(x,80); 时,若键入 Happy new year 则x中的字符串是"Happy"
(35)有如下程序: #include using namespace std; class AA{ int n; public: AA(int k):n(k){ } int get( ){ return n;} int get( )const{ return n+1;} }; int main( ) { AA a(5); const AA b(6); cout< return 0; } 执行后的输出结果是 A)55 B)57 C)75 D)77
二、填空题(每空2分,共30分) 请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。 (1)数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是 【1】 。
(2)算法复杂度主要包括时间复杂度和 【2】 复杂度。
(3)在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中 【3】 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。
(4)一棵二叉树第六层(根结点为第一层)的结点数最多为 【4】 个。
(5)数据结构分为逻辑结构和存储结构,循环队列属于 【5】 结构。
(6)下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回false。请在横线处填上适当内容,实现该函数。 bool fun(char *str) { int i=0, j=0; while (str[j]) 【6】 ; for(j--; ireturn i 【7】 j; } (7)执行语句序列 int x=10, &r=x; cout><<<'-'<< 输出结果为 【8】 。 (8)下列程序的输出结果为 Object id=0 Object id=1 请将程序补充完整。 #include using namespace std; class Point { public: Point(int xx=0, int yy=0) {X=xx; Y=yy; countP++; } ~Point( ) { countP--; } int GetX( ) {return X;} int GetY( ) {return Y;} static void GetC( ) {cout<<" Object id="<<private: int X,Y; static int countP; }; 【9】 //静态数据成员的初始化 int main( ) { Point::GetC( ); Point A(4,5); A.GetC( ); return 0; }
(9)非成员函数应声明为类的 【10】 函数才能访问这个类的private成员。 (10)派生类中的成员不能直接访问基类中的 【11】 成员。
(11)下列程序的输出结果为2,请将程序补充完整。 #include using namespace std; class Base { public: 【12】 void fun( ){ cout<<1; } }; class Derived:public Base { public: void fun( ) { cout<<2; } }; int main( ) { Base *p= new Derived; p->fun( ); delete p; return 0; }
(12)请将下列类定义补充完整。 class Base { public: void fun( ){ cout<<"Base::fun"<class Derived : public Base { public: void fun( ) { 【13】 //显式调用基类的fun函数 cout<<"Derived::fun"<}};
(13)多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但[ ]运算符只能作为类的 【14】 函数重载。
(14)下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函数弹出栈顶元素。栈初始为空,top值为0,栈顶元素在stack[top-1]中,在下面横线处填上适当语句,完成栈类模板的定义。 template class Tstack { enum {size=1000}; T stack[size]; int top; public: Tstack( ):top(0){ } void push(const T &i){ if(top stack[top++]=i; } T pop( ){ if(top == 0) exit(1); //栈空时终止运行 return 【15】 ; } };
2005年9月全国计算机等级考试二级C++笔试试题答案
选择题: 01.C 02.A 03.D 04.D 05.C 06.D 07.A 08.A 09.B 10.B 11.C 12.A 13.D 14.B 15.C 16.D 17.D 18.A 19.C 20.A 21.B 22.C 23.B 24.B 25.C 26.A 27.D 28.D 29.A 30.D 31.B 32.D 33.C 34.A 35.B
填空题: 36.数据库系统 37.空间 38.驱动模块 39.32 40.存储 41.J++ ; >= 42.10-10 43.int point::count p=0 44.友元 45.私有 46.virtual 47.Base::fun() 48.成员 49.stack[--top] |