1、国家二级( C+)笔试模拟试卷 130及答案与解析 1 算法的空间复杂度是指 ( )。 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 按照 “先进先出 ”组织数据的数据结构是 ( )。 ( A)队列 ( B)栈 ( C)双向链表 ( D)二叉树 3 下列叙述中正确的是 ( )。 ( A)线性链表的各元素在存储空间中的位置必须是连续的 ( B)线性链表的头元素一定存储在其他元素的前面 ( C)线性链表中的各元 素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面 ( D)线性链表中的各元素在存储
2、空间中的位置不一定是连续的,且各元素的存储顺序也是任意的 4 有下列二叉树,对此二叉树前序遍历的结果为 ( )。 ( A) XZCYAB ( B) XYZABC ( C) XYABCZ ( D) XYAZBC 5 结构化程序设计主要强调的是 ( )。 ( A)程序的规模 ( B)程序的效率 ( C)程序设计语言的先进性 ( D)程序的易读性 6 下列叙述中正确的是 ( )。 ( A)在面向对象的 程序设计中,各个对象之间具有密切的关系 ( B)在面向对象的程序设计中,各个对象都是公用的 ( C)在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小 ( D)上述三种说法都不对 7 结构化分
3、析方法是面向 ( )的自顶向下、逐步求精进行需求分析的方法。 ( A)对象 ( B)数据结构 ( C)数据流 ( D)目标 8 下列选项中,是软件调试技术的是 ( )。 ( A)错误推断 ( B)集成测试 ( C)回溯法 ( D)边界值分析 9 数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是 ( )。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D)没有任何关系 10 最简单的交换排序方法是 ( )。 ( A)快速排序 ( B)选择排序 ( C)堆排序 ( D)冒泡排序 11 当需要将一个函
4、数 boo1 isnumber(char c)声明为内联函数时,则此内联函数的函数原型为 ( )。 ( A) enum boo1 isnumber(char c); ( B) define boo1 isnumber(char c); ( C) inline boo1 isnumber(char c); ( D) extem boo1 isnumber(char c); 12 运算符函数调用格式的表达式 y/x+与表达式 y.operator/(operator+(x,0)的含义相同,由此可看出 ( )。 ( A) “/”和 “+”都是作为成员函数重载的 ( B) “/”和 “+”都是作为非成
5、员函数重载的 ( C) “/”是作为成员函数重载的, “+”是作为非成员函数重载的 ( D) “/”是作为非成员函数重载的, “+”都是作为成员函数重载的 13 执行语句序列 ofstream outfile(“datA.dat“); if()cout “ok“; else cout“fail“; 后,如果文件打开成功,显示 “ok”,否则显示 “fail”。由此可知,上面 if语句的 “” 处的表达式是 ( )。 ( A) outfile.fail()或 outfile ( B) outfile.good()或 !outfile ( C) outfile.good()或 outfile (
6、D) outfile.fail()或 !outfile 14 下列关于 getline()函数的描述中,不正确的是 ( )。 ( A) getline()函数是用来从键盘上读取字符串的 ( B) getline()函数读取字符串长度是受限制的 ( C) getline()函数读取字符串时,遇到终止符时就停止 ( D) getline()函数中所使用的终止符只能是换行符 15 类 MyClass的定义如下: class MyClass public: MyClass()value=0; SetVariable(int i)value=i; private: int value; ; 则对下列语句
7、序列正确的描述是 ( )。 MyClass*P, my; p= ( A)语句 p= 是把对象 my赋值给指针变量 P ( B)语句 MyClass*p, my; 会调用两次类 MyClass的构造函数 ( C)对语句 *P. SetVariable(5)的调用是正确的 ( D)语句 p- SetVariable(5)与语句 my.SetVariable(5)等价 16 有如下类声明: class MyBASE int k; public: void set(int n)k=n; int get()constreturn k; ; class MyDERIVED:protected MyBASE
8、 protected: int j; public: void set(int m, int n)MyBASE:set(m);j=n; int get()constreturn MyBASE:get()+j; ; 则类 MyDERIVED中保护的数据成员和成员函数的个数是( )。 ( A) 4 ( B) 3 ( C) 2 ( D) 1 17 下列说法中错误的是 ( )。 ( A)公有继承时基类中的 public成员在派生类中仍是 public的 ( B)公有继承时基类中的 private成员在派生类中仍是 private的 ( C)私有继承时基类中的 public成员在派生类中是 privat
9、e的 ( D)保护继承时基类中的 public成员在派生类中 是 protected的 18 下列程序的执行结果是 ( )。 #include iostream.h class Sample int x,y; public: Sample() x=y=0; Sample(int a,int b) x=a;y=b; Sample() if(x=y) cout “x=y“ end1; else cout “x!=y“ end1; void disp() cout “x=“ x “,y=“ y end1; ; void main() Sample s1(2,3); s1.disp(); ( A) x
10、=2,y=2 ( B) x=3,y:3 ( C) x=2,y=3 ( D) x=3,y=2 19 有如下程序: #include iostream using namespace std; class A public: A()cout “A“; A()cout “ A“;) ; class B:public A A*p; public: B()cout “B“;p=new A; B()cout “ B“;delete p; ; int main() B obj; return 0; 执行这个程序的输出结果是( )。 ( A) BAA A B A ( B) ABA B A A ( C) BAA
11、 B A A ( D) ABA A B A 20 下列程序的输出结果是 ( )。 #include iostream.h #include“string.h“ void main() char a=“Hello Test“,b=“Test“; strcpy(a,b); cout aend1; ( A) Hello ( B) Test ( C) Hello Test ( D) Hello Test HelloTest 21 下列程序的执行结果是 ( )。 #include iostream.h int fun(int b,int n) int i,r=1; for(i=0;i n;i+) r=r
12、*bi; return r; void main() int x,a=1,2,3,4,5,6,7,8; x=fun(a,3); cout x end1; ( A) 5 ( B) 6 ( C) 7 ( D) 8 22 如果有以下定义及初始化: int a=3, *p= 则由此可以推断, *p的值是( )。 ( A)变量 a的值,即 3 ( B)变帚 a的地址值 ( C)变量 p的地址值 ( D)无意义 23 下列程序的输出结果是 ( )。 #include iostream using namespace std; int main() char a=“Hello,Test“; char *p=
13、a; while(*p) if(*p =a else cout *p; p+; return 0; ( A) hello,test ( B) Hello,Test ( C) HELLO,TEST ( D) hELLO,tEST 24 下列程序的输出结果为 ( )。 #include iostream.h void main() int x; int /变量引用 y=99; cout “x=“ x end1; ( A) x=99 ( B) x=9 ( C) x=0 ( D)异 常 25 下列程序将 x, y和 z按从小到大的顺序排列,请将下面的函数模板补充完整。 template class T
14、 void fun(_) T a; if(x y) a=x; x=y;y=a; if(y z) a=y; y=z;z=a; if(x y) a=x; x=y;y=a; ( A) T x,T y,T z ( B) T x;y;z ( C) T class TestClass private: int x,y; public: TestClass (int i,int j) x=i; y=j; void print() cout “print1“ end1; void print()const cout “print2“ end1; ; int main() const TestClass a(1
15、,2); a.print(); return 0; 该程序运行后的输出结果是 ( )。 ( A) print1 ( B) print2 ( C) print1 print2 ( D)程序编译时出错 27 下列有关类继承的叙述中,错误的是 ( )。 ( A)继承可以实现软件复用 ( B)虚基类可以解决由多继承产生的二义性问题 ( C)派生类构造函数要负责调用基类的构造函数 ( D)派生类没有继承基类的私有成员 28 下列有关运算符重载的叙述中, 正确的是 ( )。 ( A)运算符重载是多态性的一种表现 ( B) C+中可以通过运算符重载创造新的运算符 ( C) C+中所有运算符都可以作为非成员函
16、数重载 ( D)重载运算符时可以改变基结合性 29 下列是关于派生类声明的开始部分,其中正确的是 ( )。 ( A) class virtual B:public A ( B) virtual class B:public A ( C) class B:public A virtual ( D) class B:virtual public A 30 在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )。 ( A)后缀一元运算符 ( B)前缀一元运算符 ( C)无操作数的运算符 ( D)二元运算符 31 下列关于 this指针的叙述中,正确的是 ( )。 ( A)任何
17、与类相关的函数都有 this指针 ( B)类的成员函数都有 this指针 ( C)类的友元函数都有 this指针 ( D)类的非静态成员函数才有 this指针 32 有如下类声明: 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
18、):x(a),XB(b) ( D) XB:XB(int a,int b):XA(a),XB(b) 33 在表达式 x+y*z中, “+”是作为成员函数重载的运算符, “*”是作为非成员函数重载的运算符。下列叙述中正确的是 ( )。 ( A) operator+有两个参数, operator*有两个参数 ( B) operator+有两个参数, operator*有一个参数 ( C) operator+有一个参数, operator*有两个参数 ( D) operator+有一个参数, operator*有一个参数 34 下 列符号中可以用作 C+标识符的是 ( )。 ( A) _radius
19、( B) foo bar ( C) else ( D) 3room 35 有如下类定义: class Test public: Test()a=0;c=0 / int f(int a)constthis- a=a; / static int g()return a; / void h(int b)Test:b; / private: int a; static int b; const int C; ; int Test:b=0; 在标注号码的行中,能被正确编译的是 ( )。 ( A) ( B) ( C) ( D) 36 数据库系统的主要特点为数据集成性、数据的高 _和低冗余性、数据独立性和数
20、据统一管理和控制。 37 数据库的逻辑模型设计 阶段的任务是将 _转换成关系模式。 38 在面向对象方法中, _描述的是具有相似属性与操作的一组对象。 39 最简单的交换排序方法是 _。 40 在链表的运算过程中,能够使空表与非空表的运算统一的结构是 _。 41 如果表达式 -x中的 “”是重载的类运算符,采用运算符函数调用格式,其表达式还可以表示为 _。 42 虚函数必须是类的 _。 43 多态性分为两类:编译时的多态性和 _。 44 在下列的程序的横线处填上适当的语句 ,使该程序的输出为 12。 #include iostream using namespace std; class Te
21、stClass public: int a,b; TestClass(int i,int j) a=i; b=j; ; class TestClass1:public TestClass int a; public: TestClass1(int x):TestClass(x,x+1) void show() _;/输出基类数据成员 a的值 ? cout b endl; ; int main() TestClass1 d(1); d.show(); return 0; 45 在面向对象的程序设计中,将数据和处理数据的操作封装成一个整体就定义了一种事物的类型,称作 “类 ”。类是一种抽象的概念,
22、属 于该类的一个实例叫做“_”。 46 请在下列程序中的横线处填写正确的语句。 #include iostream using namespace std; class Base public: void fun()cout “Base fun“ endl; ; class Derivde:public Base public: void fun() _/调用基类的函数 fun() cout “Derived fun“ endl; ; 47 已知类 sample是一个抽象类,其成员函数 display是无形参、无返回类型的纯虚函数,请完成其声明。 class sample public: sa
23、mple(); _ ; 48 请将下列程序补充完整,使得输出结果为 bbaa。 #include iostream using namespace std; class A public: _cout “aa“; ; class B:public A public: B()cout “bb“; ; int main() B *p=new B; delete p; return 0; 49 请将下列栈类 Stack补充完整。 class Stack private: int pList100; /int 数组,用于存放栈的元素 int top; / 栈顶元素 (数组下标 ) public: St
24、ack():top(0) void Push(const int / 新元素 item压入栈 int Pop(void); / 将栈顶元素弹出栈 ; void Stack:Push(const int top+; / 栈顶指针增 1 _; int Stack:Pop() if(top 0) / 如果栈空,程序终止 exit(1); return pListtop-; 50 若要访问指针变量 p所指向的数据,应使用表达式 _。 国家二级( C+)笔试模拟试卷 130答案与解析 1 【正确答案】 D 【试题解析】 一个算法的空间复杂度一般是指执行这个算法所需的存储空间。一个算法所占用的存储空间包括
25、算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。 2 【正确答案】 A 【试题解析】 队列是一种特殊的线性表,只允许 在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫 “队尾 ”,删除元素的一端叫 “队头 ”,先插入的元素先被删除,是按 “先进先出 ”的原则组织数据的。 3 【正确答案】 D 【试题解析】 在线性链表中,各元素在存储空间中的位置是任意的,各元素的顺序也是任意的,依靠指针来实现数据元童的前后件关系。 4 【正确答案】 D 【试题解析】 对二叉树的前序遍历是指先访问根结点,然后访问左于树,最后访问右子树,并且在访问左、右子树时,先访问
26、根结点,再依次访问其左、右于树。 5 【正确答案】 D 【试题解析】 程序不光是编写完就结束了,为了测试和维护程序,往往还有其他人阅读和跟踪程序,因此程序设计的风格应该强调简单和清晰,即程序的易读性, “清晰第一,效率第二 ”。 6 【正确答案】 C 【试题解析】 面向对象的程序设计是用对象模拟问题领域中的实体,各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互联系。 7 【正确答案】 C 【试题解析】 结构化分析方法是面向数据流进行需求分析的方法,采用自顶向下、逐步求精,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。 8 【正确答案】 C 【试题解析】
27、软件调试技术包括强行排错法、回溯法和原因排除法。边界值分析、错误推断都是黑盒测试的方法。 9 【正确答案】 C 【试题解析】 数据库系统 (DBS)由数据库 (DBS)、数据库管理系统 (DBMS)、数据库管理员,硬件平台和软件平台 5个部分组成,可见 DB和 DBMS都是 DBS的组成部分。 10 【正确答案】 D 【试题解析】 所谓的交换排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡律序和快速排序。冒泡排序是一种最 简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。 11 【正确答案】 C 【试题解析】 此题考查的是内联函数的相关知识点。函数原型应指出函数
28、名、返回值类型以及在调用函数时必须提供的参数的个数和类型,因为要声明为内联函数,故应加 inline关键字。 12 【正确答案】 C 【试题解析】 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即 y.operator*(z)或者 operator*(y,z);另一种是通过运算符构成表达式,即y*z。因为 “+”运算符既可以 作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀 “抖 ”时必须多一个虚拟参数 int。 13 【正确答案】 C 【试题解析】 可以用文件流对象的成员函数来判别文件流当前的状态: fail,刚进行的操作失败是返回 true,否则返回 f
29、alse; good,刚进行的操作成功时返回true,否则返回 false。 14 【正确答案】 D 【试题解析】 此题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止字符 (默认是换 行符 ),在读取完成后,从读取的内容中删除该终止字符。 15 【正确答案】 D 【试题解析】 选项 A) ,语句 p=y=b;, disp()函数输出成员变量 x和 y的值: x=2,y=3;然后结束时调用析构函数,因为 x和 y值不等,故输出 x!=y。 19 【正确答案】 B 【试题解析】 此题考查的是类的构造函数和析构函数。派生类构造
30、函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。因此本题中,首先调用基类构造函数输出 A,然后调用于对象的构造函数输出 B, p=new A再调用类 A的构造函数输出 A,析构函数的调用顺序和构造函数的调用顺序相反。 20 【正确答案】 B 【试题解析】 程序中首先定义字符数 a和 b,其值分别为 “Hello Test”和 “Test”。然后利用 strcpy复制函数,将 b的值复制给 a,所以输出 a的结果为 Test。 21 【正确答案】 B 【试题解析】 由程序的 mai
31、n函数入手,调用 fun函数,其中参数为数组 a和3。 fun函数的功能是 for循环中由第一个数组元素开始到第三个元素进行累积,所以答案是 “6”。 22 【正确答 案】 A 【试题解析】 题目中的定义初始化是定义一个整型变量 a,初始化为 3。而“int*p=”语句中的 “ 【试题解析】 此题考查的是纯虚函数。纯虚函数定义格式是在虚函数的后面加上“=0”。与虚函数不同的是,纯虚函数允许没有函数体,故本题应填入的内容是virtual void display()=0;。 48 【正确答案】 A() 【试题解析】 此题考查的是类的构造与析 构。本题要求输出的结果中包含 aa,所以基类 A中横线
32、处的函数一定要被执行。横线处应是定义基类的构造或者析构函数,如果定义的是构造,那么 aa肯定在 new操作时就输出,而下面的 bb是在析构函数中,会在 delete时被输出。故可以肯定应填入基类 A的析构函数定义A()。 49 【正确答案】 pListtop=item 【试题解析】 此题考查的是堆栈数据结构。堆栈是一种先进后出的队列,每次入栈在栈顶,出栈也在栈顶。当栈顶指针所指位置是最后一个有效数据时,下次出栈直接取出栈顶指针所指数据,然后栈顶指针再减 1;入栈时需要将栈顶指针先增1,然后将数据存入栈顶指针所指位置。本题中,从 Pop()函数中可以看出,是先取数然后 top才会减 1, Push()函数应先增 1再取数。所以应填入pListtop=item。 50 【正确答案】 *p 【试题解析】 此题考查的是指针。指针使用两种特殊的运算符 “:*”和 “&”。 “&”用于返回其操作对象的内存地址; “*”用于返回其操作数所指对象的值。