1、国家二级( C+)笔试模拟试卷 184及答案与解析 1 下列关于栈的叙述中,正确的选项是 ( ) ( A)在栈中只能删除数据 ( B)在栈中只能插入数据 ( C)栈是先进先出的线性表 ( D)栈是先进后出的线性表 2 下列哪种数据模型可以用树形结构来表示实体之间联系 ( )。 ( A)网状模型 ( B)数据模型 ( C)关系模型 ( D)层次模型 3 1, 2, 3, 4四个元素按顺序进栈,不可能的出栈顺序为 ( ) ( A) 1 2 3 4 ( B) 2 3 4 1 ( C) 1 4 3 2 ( D) 3 1 4 2 4 下列对于线性链表的描述中,正确的是 ( )。 ( A)存储空间必须连续
2、,且各元素的存储顺序是任意的 ( B)存储空间不一定是连续,且各元素的存储顺序是任意的 ( C)存储空间必须连续,且前件元素一定存储在后件元素的前面 ( D)存储空间不一定是连续,且前件元素一定存储在后件元素的前面 5 对长度为 N的线性表进行顺序查找,在最坏情况下,需要的比较次数是 ( )。 ( A) N+1 ( B) N ( C) (N+1)/2 ( D) N/2 6 数据视图的描述称为 ( ) ( A)外模式 ( B)内模式 ( C)概念模式 ( D)存储模式 7 下列的方法中,不属于软件调试技术的是 ( )。 ( A)强行排错法 ( B)集成测试法 ( C)回溯法 ( D)原因排除法
3、8 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为 ( ) ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 9 下列工具中,不属于结构化分析 的常用工具的是 ( ) ( A) PAD图 ( B)数据字典 ( C)判定树 ( D)数据流图 10 在公有派生时,派生类中定义的成员函数只能访问原基类的 ( )。 ( A)私有成员、保护成员和公有成员 ( B)保护成员和私有成员 ( C)公有成员和保护成员 ( D)公有成员和私有成员 11 有如
4、下定义: int b10=1,2,3,4,5,6,7,8,9,10,*q=b; 则数值为 8的表达式是( )。 ( A) *q+8 ( B) *(q+7) ( C) *q+=8 ( D) q+7 12 下面的符号中可以用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc othter ( C) else ( D) radius 13 下列程序执行后,输出的结果是 ( )。 int x=-5,y=0; while(+x) y+; cout y end1; ( A) 1 ( B) 2 ( C) 4 ( D) 5 14 有如下类声明: class TestClass int n;
5、public: TestClass(int i=0):n(i) void setValue(int n0); ; 下面关于 setValue成员函数的实现中,正确的是 ( ) ( A) TestClass:setValue(int n0)n=n0;) ( B) void TestClass:setValue(int n0)n=n0; ( C) void setValue(int n0)n=n0; ( D) setValue(int n0)n=n0; 15 下面关于常成员函数的说法中正确的是 ( )。 ( A)常成员函数不能修改任何的数据成员 ( B)常成员函数只能修改一般的数据成员 ( C)常
6、成员函数只能修改常数据成员 ( D)常成员函数只能通过常对象来调用 16 常成员函数不能修改任何的数据成员 ( A) 3 ( B) 4 ( C) 5 ( D) 6 17 下面关于虚函数的描述中,正确的是 ( )。 ( A)基类中利用 virtual关键字说明一个虚函数后,其派生类中定义相同的原型函数时可不必加 virtual来说明 ( B)虚函数是非成员函数 ( C)虚函数是 static类型的成员函数 ( D)派生类中的虚函数与基类中类型相同的虚函数具有不同的参数个数或类型 18 有如下程序: #include iostream using namespace std; class Base
7、 protected: Base()cout Base; Base(char c)cout c; ; class Derived:public Base public: Derived(char c)cout c; ; int main() Derived d(Derived); return 0; 执行这个程序屏幕上将显示输出( )。 ( A) Derived ( B) DerivedBase ( C) BaseDerived ( D) DerivedDerived 19 有如下程序: #include iostream using namespace std; int main() cou
8、t.fill(*); cout.width(6); cout.fill(#); cout 888 end1; return 0; 的执行结果是 ( )。 ( A) #888 ( B) 888# ( C) *888 ( D) 888* 20 设程序如下: #include iostream using namespace std; int main() int *p,*q,r=10; q= p= cout *p+1 end1; return 0; 以上程序的输出结果是 ( ) ( A) p的地址 ( B) r的地址 ( C) 11 ( D)运行错误 21 下面关于函数模板的表述中不正确的是 (
9、) ( A)类模板的成员函数都是模板函数 ( B)类模板本身在编译过程中不会产生任何代码 ( C)类模板只能有虚拟类型的参数 ( D)用类模板定义一个对象 时,实参不能省略 22 下面类的声明中的几个语句,正确的是 (设定语句是主函数中的语句 )( )。 class TestClass private: int data; public: TestClass(int g_data) data=g_data; void show()cout data end1;) ; ( A) TestClass *p; ( B) TestClass m; ( C) TestClass.data=8; ( D)
10、 TestClass.show(); 23 类中的一个字符指针成员指向具有 m个字节的存储空间时,它所能存储的字符串的最大长度为 ( )。 ( A) m-2 ( B) m-1 ( C) m ( D) m+1 24 有如下程序: #include iostream using namespace std; class TestClass static int i; public: TestClass()i+; TestClass()i-; static int getVal()return i; ; int TestClass:i=0; void f()TestClass obj2;coutob
11、j2.getVal(); int main() TestClass obj 1; f(); TestClass *obj3=new TestClass;cout obj3- getVal(); delete obj3;cout TestClass:getVal(); return 0; 程序的输出结果是 ( )。 ( A) 232 ( B) 221 ( C) 222 ( D) 231 25 下面关于派生类的描述中错误的是 ( ) ( A)派生类中至少有一个基类 ( B)一个派生类可以作为另一个派生类的基类 ( C)派生类只继承了基类中的公有成员和保护成员 ( D)派生类的缺省继承方式是私有 2
12、6 有如下程序: #include iostream using namespace std; class TlestClass int n; public: TestClass(int k):n(k) int get()return n; int get()constreturn n+1; ; int main() TestClass p(5); colast TestClass q(6); cout p.get() q.get(); return 0; 执行后的输出结果是 ( )。 ( A) 55 ( B) 57 ( C) 75 ( D) 77 27 下列关于抽象类的表述中正确的是 ( )
13、。 ( A)派生类必须要实现作为基类的抽象类中的纯虚函数 ( B)抽象类的成员函数至少有一个没实现 ( C)抽象类不可能用来定义对象 ( D)派生类不能成为抽象类 28 执行下列语句: #include iostream using namespace std; int main() int x=3; if(x=5) cout x+ end1; else cout x end1; return 0; 程序的输出是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 29 假定 TestClass为一个类,则该类的拷贝构造函数的声明语句为 ( )。 ( A) TestClass(T
14、estClass x) ( B) TestClass void swap(int x,int y) int temp=x; x=y; y=temp; cout “x=“ x “,y=“ y end1; int main() int x=3,y=2; swap(x,y); cout“x=“ x “,y=“ y end1; return 0; ( A) x=3,y=2 x=3,y=2 ( B) x=2,y=3 x=3,y=2 ( C) x=2,y=3 x=2,y=3 ( D) x=3,y=2 x=2,y=3 33 在每个 C+程序中必须有且仅有一个 ( )。 ( A)函数 ( B)主函数 ( C)
15、预处理指令 ( D)语句 34 有如下程序: #include iostream using namespace std; classA public: A()cout “A“; ; class Bpublic:B()cout “B“; class C:public A B b; public: C()cout “C“; ; int main()C obj;return 0; 执行后的输出结果是 ( ) ( A) ABC ( B) BAC ( C) ACB ( D) CBA 35 数据结构分为逻 辑结构和存储结构,循环队列属于 _结构。 36 数据库系统其内部分为三级模式,即概念模式、内模式和
16、外模式。其中,_是用户的数据视图,也就是用户所见到的数据模式。 37 软件开发环境是全面支持软件开发全过程的 _集合。 38 一棵二叉树中序遍历结果是 ABCDEFG,前序遍历结果是 DBACFEG,则后序遍历结果为 _。 39 某二叉树中度为 2的结点有 12个,则该二叉树中有 _个叶子结点。 40 若有以下程序: #include iostream using namespace std; class TestClass 1 public: TestClass1() X=0; int x; ; class TestClass2:virtual public TestClass1 publi
17、c: TestClass2() x=10; ; class TestClass3:virtual public TestClass 1 public: TestClass3() x=20; ; class TestClass4:public TestClass2, protected TestClass3 ; int main() TestClass4 obj; cout obj.x end1; return 0: 该程序运行后的输出结果是 _。 41 指针变量所保存的不是一般的数据值,而是程序中另一个对象的 _。 42 以下程序的输出结果是 _。 #include iostream.h in
18、t add(int x, int y) return x+y; double add(double x, double y) return x+y; void main() int a=3, b=3; double c=6.5, d=1.5; cout add(a, b) “, “ add(c, d) end1; 43 下面程序运行时输出结果为 _。 #include iostream.h #include class Rect public: Rect(int l, int w)length=l; width=w;) void Print()cout “Area:“ length*width
19、 end1; void operator delete(void*p)free(p); private: int length, width; ; void main() Rect *p; p=new Rect(5, 4); p- Print(); delete p; 44 类中数据成员和成员函数的默认访问级别为 _。 45 有如下程序: #include iostream using namespace std; class PARENT public: PARENT()cout “PARENT“;) ; class SON:public PARENT public: SON()cout “
20、SON“; ; int main() SON son; PARENT *p; p= return 0; 执行上面程序的输出是 _。 46 以下程序的执行结果是 _。 #include iostream.h #include stdliB.h class Sample public: int x, y; Sample()x=y=0; Sample(int a, int b)x=a;y=b; void disp() cout “x=“ x “, y=“ y end1; ; void main() Sample s1(2,3); s1.disp(); 47 下列 函数的功能是判断字符串 str是否对
21、称,对称则返回 true,否则返回 false。请在横线处填上适当内容,实现该函数。 bool fun(char *str) int i=0,j=0; while(strj) j+; for(j-;i j i+,j-); return i_j; 48 若下面程序运行时输出结果为: 1, A, 10.1 2, B, 3.5 请将程序补充完整。 #include iostream using namespace std; int main() void test(int, char,double_); test(1, A, 10.1); test(2, B); return 0; void tes
22、t(int a, char b, double c) cout a , b , c end1; 49 有如下类声明: class MyClass int i; private: int j; protected: int k; public: int m, n; ; 其中,私有成员的数量为 _。 国家二级( C+)笔试模拟试卷 184答案与解析 1 【正确答案】 D 【试题解析】 栈是限定在一端进行插入与删除的线性表。这种线性表只能在固定的一端进行插入和删除操作,因此栈又称后进先出表或先进后出表。 2 【正确答案】 D 3 【正确答案】 D 【试题解析 】 栈的操作原则为后进先出。选项 A)中
23、出栈顺序可按 “1进, 1出, 2进, 2出, 3进, 3出, 4进, 4出 ”实现;选项 B)可按 1进, 2进, 2出, 3进, 3出, 4进, 4出实现; C)可按 “1进, 1出, 2进, 3进, 4进, 4出, 3出, 2出 ”实现。选项 D) 无法实现。 4 【正确答案】 B 【试题解析】 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 5 【正确答案】 B 【试题解析】 在进行顺序查找过 程中,如果线性表中被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查
24、找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。所以在此最坏情况下所需要比较的次数是该线性表的长度值。 6 【正确答案】 A 【试题解析】 外模式也称子模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导而出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。 7 【正确答案】 B 8 【正确答案】 C 9 【正确答案】 A 10 【正确答案】 C 【试题解析】 派生类中的成员,一部分是从基类继承来的,另一部分是自己定义的新成员,所有的这些成员也分为公有、私有和保护三种访问权限。其中,从基类继承下来的全部成员构成派生类的基类,这部
25、分的私有成员是派生类不能直接访问的,而公有成员和保护成员则是派生类可以直接访问的,但它们在派生类中的访问属性随着派生类对基类的继承方式而改变。 11 【正确答案】 B 12 【正确答案】 D 13 【正确答案】 C 14 【正确答案】 B 15 【正确答案】 A 16 【正确 答案】 A 【试题解析】 在 C+中,形参列表是由逗号分开的。分别说明函数的各个参数。在 fun()函数中它包括三个形参: x+y, 3和 min(n-1,y);当调用一个函数时,实参与形参一对一匹配,所以突参个数也是 3个。 17 【正确答案】 A 【试题解析】 虚函数是非 static类型的成员函数,基类中可以利用
26、virtual关键字来声明虚函数,派生类中定义相同原型函数时可不必加 virtual说明,直接重写基类中的函数。在派生类中的虚函数必须与基类中的虚函数具有相同的参数个数与类型。 18 【正确答案】 C 【试题解析】 派生类 Derived由基类 Base公有派生,在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用 Derived d(Derived);后,执行类Derived构造函数的 Derived(char c),系统自动调用基类的缺省构造函数 Base(),输出字母 Base;再执行派生类的构造函数 Derived(char c),输出字母 Derived。 19 【正确答案】
27、 A 【试题解析】 C+在流操作中,利用 cout对象的 width属性设置输出字符的宽度, 用 fill函数来设置需要填充的字符。题目程序中,首先设置填充字符为 *,输出宽度为 6,但存输出前又设置了填充字符为 #。所以在输出时,其填充字符为 #,由于 888不足 6个字符,所以在前面以三个 “#”来填充。 20 【正确答案】 C 【试题解析】 p为一个二级指针,其存放的是指针变量 q的地址,而 q存放的又是 r的地址。故式子 +p相当于对 r的引用。所以最后输出的结果为 11。 21 【正确答案】 C 22 【正确答案】 A 【试题解析】 C+中,若没有类的显式声明构造函数则系统会为其提供
28、一个 默认的构造函数,若提供了构造函数则会将系统提供的默认的构造函数覆盖。调用构造函数时,实参必须与形参匹配。但是如果声明一个对象指针时,不是定义一个对象,不调用对象的构造函数。 23 【正确答案】 B 24 【正确答案】 B 【试题解析】 有如下程序: #include iostream using namespace std; class TestClass static int i; public: TestClass()i+; TestClass()i-; static int getVal()return i; ; int TestClass:i=0; void f()TestCla
29、ss obj2;cout obj2.getVal(); int main() TestClass obj 1; f(); TestClass *obj3=new TestClass;cout obj3- getVal(); delete obj3;coutTestClass:getVal(); return 0; 程序的输出结果是 ( )。 25 【正确答案】 C 【试题解析】 继承方式有公有继承、私有继承和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类是不可直接访问的。 26 【正确答案】 B 【试题解析】 C+中对常对象的成员函数调用,将
30、自动调用其常成员函数,程序中调用原型为 “intget()const;“的函数,对于非常对象将调用原型为 “int get();“的函数。因为首先用 5对对象 p进行了初始化,所以执行 p.get()时直接返回 5,而对于常对象则以 6对 q进行初始化,在调用 q.get()时,将调用原型为 “int get()const;“的函数该函数将返回 n+1,第二个输出应为 7,所以本题答案为 57。 27 【正确答案】 C 28 【正确答案】 C 【试题解析】 if(条件 )语句 1 else语句 2,语句的执行过程是:首先判断条件是否为真 (不为 0),为真则 0执行语句 1,否则执行语句 2。
31、题目中的条件是 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 29 【正确答案】 D 【试题解析】 C+中的拷贝构造函数是用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下:类名 :类名 (const类名 &引用对象名 );其中 const可以省略。 30 【正确答案】 B 【试题解析】 指针是一种用来存放其他变量地址的数据类型,它的声明形式为:类型 +变量名,可以在声明的时候对其进行初始化。由于其存放的是内存单元的地址,所以大小一般都 是 4个字节 31 【正确答案】 B 32 【正确答案】 B 33 【正确答案】 B 34 【正确答案】 A 35
32、【正确答案】 逻辑 【试题解析】 数据的逻辑结构主要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。 36 【正确答案】 外模式 【试题解析】 数据库系统的三级模式分别是内模式、概念模式和外模式。其中,物理模式给出了数据库的物理存储结构和存取方法;概念模式是数据库系统 中全局数据逻辑结构的描述;外模式是用户的数据视图,也就是用户所见到的数据模式。 37 【正确答案】 软件工具 【试题解析】 软件开发环境或称软件工程环境是全而支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支
33、持软件生命周期内的各个阶段和各项任务的完成。 38 【正确答案】 ACBEGFD 【试题解析】 我们分 4大步骤来推理: 找到根结点:由于前序遍历首先访问根结点,那么前序遍历结果的第一个结点肯定就是整个二叉树的根结点。前序遍历结果是 DBACFEG,可 知 D为二叉树的根结点。 分出左、右子树:中序遍历中,访问根结点的次序为居中,先访问左子树,再访问右子树。因此,在中序遍历的结果 ABCDEFG中,以根结点 D为中间界线,前面的 ABC在左子树,后面的 EFG在右子树。 分析左子树:首先确定左子树 ABC的根点。在前序遍历中, B最靠前,应该是 ABC三个结点的根结点;在中序遍历中, A靠前,
34、应该是 ABC三个结点的左子树, C为右子树。 39 【正确答案】 13 40 【正确答案】 20 41 【正确答案】 内存地址 42 【正确答案】 6,8 43 【正确答案】 Area: 20 【试题解析】 此题考查的是内存空间的分配和释放,即 free和 delete函数的应用。使用 new对某种类型的变量进行动态分配的语法格式为:指针 =new类型;使用 delete对动态分配的变量进行释放是: delete指针。此题中,首先为变量分配内存单元,然后执行语句 p- Print();输出 Area: 20,然后利用 delete释放内存单元。 44 【正确答案】 私有 或 private
35、【试题解析】 此题考查的是类的成员的默认访问权限。在未声明,即默认情况下,类中数据成员和成员函数的默认访问级别为私有。 45 【正确答案】 PARENTSON 【试题解析】 此题考查的是派生类和基类的构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。 SON son;执行时首先调用基类的构造函数,输出 “PARENT”,然后调用派生类的构造函数输出 “SON”。需要注意的是,语句 PARENT *p;只是定义一个 PARENT类的指针,并不调用 构造函数。 46 【正确答案】 x=2, y=3 47 【正确答案】 = 48 【正确答案】 =3.5 49 【正确答案】 2
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1