1、国家二级( C+)笔试模拟试卷 136及答案与解析 1 下列叙述中错误的是 ( A)一种数据的逻辑结构可以有多种存储结构 ( B)数据的存储结构与数据处理的效率无关 ( C)数据的存储结构与数据处理的效率密切相关 ( D)数据的存储结构在计算机中所占的中间不一定是连续的 2 下列叙述中正确的是 ( A)线性表是线性结构 ( B)栈与队列是非线性结构 ( C)线性链表是非线性结构 ( D)二叉树是线性结构 3 一棵二叉树中共有 70个叶子结点与 80个度为 1的结点,则该二叉树中的总结点数为 ( A) 221 ( B) 219 ( C) 231 ( D) 229 4 下列叙述中正确的是 ( A)
2、一个逻辑数据结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 5 下列叙述中正确的是 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上三种说法都不对 6 在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是 ( A)概要设计 ( B)详细设计 ( C)可行性分析 ( D)需求分析
3、7 下列叙述中正确的是 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期就结束 ( D)软件维护是指修复程序中被破坏的指令 8 在关系数据库中,用来表示实体之间联系的是 ( A)树结构 ( B)网结构 ( C)线性表 ( D)二维表 9 设有如下关系表 : 则下列操作中正确的是 ( A) T=RS ( B) T=R S ( C) T=RS ( D) T=R/S 10 下列叙述中错误的是 ( A)在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统 ( B)在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关 ( C
4、)在数据库设计的过程中,逻辑结构设计与具体的数据库管理系统有关 ( D)在数据库设计的过程中,物理结构设计依赖于具体的计算机系统 11 在 C+语言中函数返回值的类型是由 ( )决定的。 ( A)调用该函数时系统临时 ( B) return语句中的表达式类型 ( C)定义该函数时所指定的函数类型 ( D)调用该函数时的主调函数类型 12 关于类和对象描述错误的是 ( A)对象 (Object)是现实世界中的客观事物,对象具有确定的属性 ( B)类是具有相同属性和行为的一组对象的集合 ( C)对象是类的抽象,类是对象的实例 ( D)类是对象的抽象,对象是类的实例 13 已知下列语句中的 x和 y
5、都是 int型变量,其中错误的语句是 ( A) x=y+; ( B) x=+y; ( C) (x+y)+ ( D) +x=y; 14 下列 运算符中不能在 C+中重载的是 ( A) ?: ( B) + ( C) - ( D) = 15 下列关于模板的叙述中,错误的是 ( A)模板声明中的第一个符号总是关键字 template ( B)在模板声明中用和括起来的部分是模板的形参表 ( C)类模板不能有数据成员 ( D)在一定条件下函数模板的实参可以省略 16 下列对变量的引用中,错误的是 ( A) int a; int public: sample(int i) n=i; static void
6、add() s+=n; ); int sample: s=0; int main() sample a(2), b(5); sample: add(); cout s endl; return 0; 程序运行后的输出结果是 ( A) 2 ( B) 5 ( C) 7 ( D) 3 22 关于友元,下列说法错误的是 ( A)如果类 A是类 B的友元,那么类 B也是类 A的友元 ( B)如果函数 fun()被说明为类 A的友元,那么在 fun()中可以访问类 A的私有成员 ( C)友元关系不能被继承 ( D)如果类 A是类 B的友元,那么类 A的所有成员函数都是类 B的友元函数 23 C+流中重载了
7、运算符,它是一个 ( A)用于输出操作的成员函数 ( B)用于输入操作的成员函数 ( C)用于输入操作的非成员函数 ( D)用于输出操作的非成员函数 24 如果表达式 -x/y中的 “-”和 “/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为 ( A) operator/ (x.operator-(), y); ( B) operator/(operator-(x), y); ( C) x.operator-().operator/(y); ( D) y.operator/(operator-(x); 25 通过公有派生类的对象,只能访问基类成员中的 ( A)公有成员
8、 ( B)私有成员 ( C)保护成员 ( D)公有成员和保护成员 26 在下面的 4个关键字中用来说明虚函数的是 ( A) virtual ( B) public ( C) protected ( D) private 27 有如下程序: #include iostream.h using namespace std; class Demo public: Demo() cont “default constructorn“; Demo(const Demo int main () C obj; return 0; 执行后的输出结果是 ( A) CBA ( B) BAC ( C) ACB (
9、D) ABC 31 执行语句序列 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 ( D) outfile fail()或 !outfile 32 重载输入流运算符必须使用的原型为 ( A) istream cout x - r endl;
10、 输出结果为 _。 44 下列程序的输出结果为 Object id=0 Object id=1 请将程序补充完整。 #include iostream 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=“ countP endl; private: int X,Y; static int count
11、P; ; _ /静态数据成员的初始化 int main () Point:GetC(); Point A(4,5); A.GetC(); return 0; 45 下列程序的输出结果是 _。 #include iostream using namespace std; int main() int i=5; int r = 7; cout i endl; return 0; 46 有以下程序 #include iostream using namespace std; class MyClass public: MyClass(); MyClass(); static int s; void
12、SetValue(int val); ; int MyClass:s=0; MyClass:MyClass() s+; void MyClass:SetValue(int val) s=val; int main () MyClass my3,*p; p=my; for (int k=0;k 3;k+) p- SetValue(k+1); p+; cout MyClass:s endl; return 0; 运行后的输出结果是 _。 47 有以下程序: #include iostream using namespace std; long fib( int n ) if ( n 2 ) ret
13、urn ( fib( n - 1 ) + fib( n - 2 ) ); else return 2; int main () cout fib( 3 ) endl; return 0; 则该程序的输出结果应该是 _。 48 已知 int DBL(int n)return n+n;和 long DBL(long n)return n+n是一个函数模 板的两个实例,则该函数模板的定义是 _。 49 有以下程序 #include iostream using namespace std; class Base int a; public: Base(int x) a=x; void show()
14、cout a; class Derived : public Base int b; public: Derived(int i) :Base(i+1),b(i) void show() cout b; ; int main () Base b(5),*pb; Derived d(1); pb= pb- show (); return 0; 运行后的打印结果是 _。 50 下面是复数类 complex的定义,其中作为友元函数重载的运算符 “-”的功能是将参数对象的实部减 1,然后返回对该对象的引用;请补充完整。 class complex private: int real; int imag
15、; public: complex(int r=0,int i=0):real(r),imag(i) void show () cout real (imag 0?“-“:“+“) imag i; _; ; complex return c; 国家二级( C+)笔试模拟试卷 136答案与解析 1 【正确答案】 B 【试题解析】 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序,链接、索引等,选项 A和选项 D正确。采用不同的存储结构,其数据处理的效率不同,因此,在进行数据处理时,选择合适的存储结构是很重要的,选项 C正确,选项 B错误,应为所选。 2 【正确答案】 A 【
16、试题解析】 非空的数据结构如果满足下列两个条件则称为线 性结构:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。线性表是线性结构。选项 A的说法正确;栈与队列是特殊的线性表,因此,它们也是线性结构,选项 B的说法错误:线性链表是线性表的链式存储结构,因此,其对应的逻辑结构也是线性结构,而不是非线性结构,选项 C的说法错误;二叉树是非线性结构,而不是线性结构,选项 D的说法错误。 3 【正确答案】 B 【试题解析】 在任意一棵二叉树中,度为。的结点 (也就是叶子结点 )总比度为 2的结点多一个。由于本题中的二叉树有 70个叶子结点,所以有 69个度为 2的结点。该二叉树中总结点数
17、为:度为 2的结点数十度为 1的结点数 +度为 0的结点数 =69+80+70=219。 4 【正确答案】 D 【试题解析】 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。由此可见,选项 D的说法正确。 5 【正确答案】 A 【试题解析】 程序执行的实际计算工作量不仅与程序的控制结构有一定的关系,与处理的数据量有关,而且还与数据的存储结构密切相关。所以,选项 A正确,选项 B和 C错误所以,本题的正确答案为 A。 6 【正确答案】 D 【试题解析】 在需求分析阶段中,根据可行性研究阶段所提
18、交的文档,特别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要明确系统必须做什么的问题本题的正确答案为 D。 7 【正确答案】 A 【试题解析】 本题考核软件维护的概念。维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段,在软件交付使用后,还需要进行维护。软件维护通常有以下四类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适 应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。综上所述,本题的正确答案是 A,其余选项的说法错误。 8 【正确答案】 D 【试题解析
19、】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。即关系模型是用表格数据来表示实体本身及其相互之间的联系本题的正确答案是 D。 9 【正确答案】 B 【试题解析】 显然,关系表 T是关系表 R与 S的并,即 T=R S。 10 【正确答案】 B 【试题解析 】 数据库设计主要分四个步骤;需求分析,概念结构设计,逻辑结构设计,物理结构设计。选项 B错误,应为所选,因为概念结构设计在需求分析的基础上对客观世界做抽象,独立于数据库的逻辑结构;也独立于具体的数据库管理系统,与具体的数据库管理系统无关。 11 【正确答案】 C 【试题解析】 本题考查对函数定义的掌握程度。函数类型决定了函
20、数返回值的,类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将 return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。 12 【 正确答案】 C 【试题解析】 C+中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。 13 【正确答案】 C 【试题解析】 本题考核 C+表达式类型及求值规则。 自加运算符 +是单目运算符,运算对象必须为变量,不能是常量和表达式, C选项中 +的对象是表达式,故错误。 14 【正确答案】 A 【试题解析】 本题考核运算符的重载。 C+中,
21、 “:、 *、 ?: ”这 4个运算符不能重载。 15 【正确 答案】 C 【试题解析】 本题考核模板的概念。函数模板的一般说明形式如下: template类型形参表返回类型函数名 (形参表 )函数体 ,所以 A、 B选项的描述是正确的。在一定条件函数模板的实参可以省略。所以 C选项的描述是错误的。 16 【正确答案】 C 【试题解析】 本题考核引用的定义和初始化。引用具有如下特点:引用能够使用任何合法变量名;引用不是变量,所以必须在定义时初始化,而且一旦初始化之后,就不能再成为其他变量的引用;引用不是值,不占存储空间,说明引用时,目标的存储状 态不会改变。所以,引用只有说明,没有定义; 引用
22、仅在说明时带有 “。在 C+中,允许在函数的说明或定义时给一个或多个参数指定默认值。但一旦为某个给定参数定义了缺省值,必须为后继的所有参数也定义缺省值。由此可知,选项 D是错误的。 18 【正确答案】 C 【试题解析】 函数重载允许用同一个函数名定义多个函数。被重载的函数必须要有不同的形参列表。不可以根据函数返回值类型来重载函数。 19 【正确答案】 B 【试题解析】 本题考核指针、数组和关键字 new。说明一维数组的一般形式为:数据类型数组名 数组长度 ;在此数组长度必须常量表达式,它是一个整常数。 B) 选项中 n是一个 int型变量不是常数,所以是错误的。选项 A、 C使用 new获得动
23、态内存空间,它的操作数可以带有初始值表达式或元素个数, A选项的形式表示数组元素的个数, C选项的形式表 示为变量 *p赋初值 n。 20 【正确答案】 C 【试题解析】 本题考核函数的调用。题中函数声明带有默认参数,那么在 C选项的调用中,将会把字符型实参 #赋值给整型形参 b,这不符合参数传递规则。 21 【正确答案】 B 【试题解析】 本题考核静态数据成员和静态成员函数的应用;程序中定义一个类 sample,它包括一个静态数据成员 n和一个静态成员函数 add,并在类的构造函数中给类私有静态数据成员 n赋值。在主函数 main中,定义对象 a(2)时,通过构造函数使静态数据成员 n的值变
24、为 2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面的 n=2),再执行 sample: add()使全局变量 s=5。 22 【正确答案】 A 【试题解析】 本题考核友元类和友元函数。友元关系是单向的,并且只在两个类之间有效。即使类 X是类 Y的友元,类 Y是否是类 X的友元也要看类 X中是否有相应的声明。即友元关系不具有交换性,所以 A选项的说法是错误的。类的友元函数可以直接访问该类的所有成员;类 A是类 B的友元类,那么类 A的所有成员函数都是类 B的友元函数。 23 【正确答案】 D 【试题解析】 本题考 核运算符的重载。 C+流中重载了和,其中用于有格式输入
25、,用于有格式输出,且都重载为非成员函数。 24 【正确答案】 B 【试题解析】 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符 +,且 c1、 c2都是该类的对象,则 c1 operator+(c2)与 c1+c2含义相同。如果 +作为该类的非成员函数重载,则 operator+(c1,c2)与 c1+c2含义相同。同理,运算符 “/”作为友元函数重载,则 (-x)/y与表达式 operator/(-x), y)相同。前缀运 算符 “-”作为友元函数重载,则 -x与 operator-(x)相同,所以组合起来是operator/ (operator-(x), y);,即 B
26、选项。 25 【正确答案】 A 【试题解析】 本题考核派生类的访问权限。派生类的继承方式有三种:公有继承public、私有继承 private和保护继承 protected。当公有派生时,派生类成员函数只能访问基类的公有成员和保护成员,但是通过派生类的对象只能访问基类的公有成员。 26 【正确答案】 A 【试题解析】 C+中说明虚函数的方法为: virtual类型说明符函数名 (参数表 );。其中,被关键词 virtual说明的函数称为虚函数。 27 【正确答案】 C 【试题解析】 本题考核构造函数的应用,有一定的深度。函数 Demo()为构造函数,而 Demo(const Demo 【试题解
27、析】 本题考核函数模板的使用。函数模板的一般说明形式如下:template类型形参表返回类型函数名 (形参表 )/函数体 。函数调用方式为:函数名 (实参表 );。形参表中的类型以实参表中的实际类型为依据。由此易得答案。 49 【正确答案】 2 【试题解析】 本题考核基类指针与派生类指针的使用。本例程序中类 Derived是从基类 Base公有继承来的。 main()中定义了基类对象 b和一个基类指针 pb,又定义了派生类 Derived的对象 d。由于 Derived是 Base的子类型,因此可以将派生类 Derived的对象 d的地址赋值给指向基类 Base的指针 pb,但这时指针 pb只能使用从基类 Base继承的成员。所以通过对象指针 Pb调用的 show函数是基类的成员函数 show(),从而输出基类私有数据成员 a的值 2。 50 【正确答案】 friend complex& operator-(complex&) 【试题解析】 本题 考核运算符重载的定义。程序要填入的是运算符函数operator-在类 complex中的声明,运算符 “-”是作为友元函数重载的。根据题目给出的条件,易得到答案。