1、国家二级( C+)笔试模拟试卷 253及答案与解析 1 下列叙述中错误的是 ( )。 ( A)一种数据的逻辑结构可以有多种存储结构 ( B)数据的存储结构与数据的处理效率无关 ( C)数据的存储结构与数据的处理效率密切相关 ( D)数据的存储结构在计算机中所占的空间不一定是连续的 2 按 “先进后出 ”原则组织数据的结构是 ( A)有序表 ( B)栈 ( C)队列 ( D)二叉树 3 一间教室可坐多名学生,则实体教室和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 4 如下程序的输出结果是 #include iostream void fun(int
2、 X,inty)intt=x; x=y; y=t; int main( ) int a2=23, 42; fun(a1, a0); std:cout a0 “, “ a1 std:endl; return 0; ( A) 42, 42 ( B) 23, 23 ( C) 23, 42 ( D) 42, 23 5 算法分析的目的是 ( )。 ( A)找出数据结构的合理性 ( B)找出算法中输入和输出之间的关系 ( C)分析算法的易懂性和可靠性 ( D)分析算法的效率以求改进 6 关系 R和 S进行自然连接时,要求 R和 S含有一个或多个公共 _。 ( A)元组 ( B)行 ( C)记录 ( D)属
3、性 7 程序的 3种基本控制结构是 ( A)过程、子过程和分程序 ( B)顺序、选择和重复 ( C)递归、堆栈和队列 ( D)调用、返回和转移 8 已知数据表 A中每个元素距其最终位置不 远,为节省时间,应采用的算法是 ( A)堆排序 ( B)直接插入排序 ( C)快速排序 ( D)直接选择排序 9 while和 do-while循环的主要区别是 ( )。 ( A) do-while的循环体至少无条件执行一次 ( B) while的循环控制条件比 do-while的循环控制条件更严格 ( C) dowhile允许从外部转到循环体内 ( D) do-while的循环体不能是复合语句 10 在 E
4、-R图中,用来表示实体之间联系的图形是 ( A)矩形 ( B)椭圆形 ( C)菱形 ( D)平行四边 形 11 设有以下定义和程序: #include iostream.h class A1public: void show1() cout “class A1“ endl; ;class A2 : public A1public: void show2() cout “class A2“ end1 ;class A3 : protected A2public: void show3() cout “class A1“ endl; ;void main() A1 obj1; A2 obj2; A
5、3 obj3; 则以下不合语法的调用语句是 ( A) obj1. showl(); ( B) obj2. showl(); ( C) obj3. showl(); ( D) obj2. show2(); 12 假定 MyClass为一个类,那么下列的函数说明中, ( )为该类的析构函数。 ( A) void MyClass(); ( B) MyClass(int n); ( C) MyClass(); ( D) MyClass(); 13 下列程序的输出结果是 ( )。 #include iostream using namespace std; template typename T T f
6、un(T a,T b)return(a b)?a:b; void main() cout fun(3,6) , fun(3.14F,6.28F) end1; ( A) 6,3.14 ( B) 3,6.28 ( C) 3,3.14 ( D) 6,6.28 14 下列关于 C+流的说明中,正确的是 ( )。 ( A)与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现 ( B)从流中获取数据的操作称为插入操作, 向流中添加数据的操作称为提取操作 ( C) cin是一个预定义的输出流类 ( D)输出流有一个名为 open的成员函数,其作用是生成一个新的流对象 15 若有以下定义: inta 1,
7、 2, 3, 4, 5, 6, 7; char cl b,c2=2; 则数值不为 2的表达式是 ( )。 ( A) a1 ( B) d-c1 ( C) a3-c2 ( D) c2-0 16 以下有关成员函数特征的叙述不正确的是 ( A)成员函数一定是内联函数 ( B)成员函数可以重载 ( C)成员函数可以设置缺省参数值 ( D)成员函数可以是静态的 17 实现运行时的多态性要使用 ( )。 ( A)重载函数 ( B)析构函数 ( C)构造函数 ( D)虚函数 18 如果在表达式 x/y中, 是作为友元函数重载的, /是作为成员函数重载的,则该表达式还可为 ( A) (operator (x)
8、) .operator/(y) ( B) (operator (0) ) .operator/(y) ( C) operator/(operator (x,0) ) ,y) ( D) operator/(operator (0) ) ,y) 19 类定义如下: class TestClass public: TestClass()cout using namespace std; intmain() cout fill(*); cout width(6); cout fill(#); cout using namespace std; class TestClass int x; public
9、: TestClass(int i)x=i; TestClass() ; class TestClass1: public TestClass public: _完成类 TestClass1构造函数的定义 ; int main() TestClass1 Obj(); return 0: 43 当用数组元素作函数参数时,这属于【 】传递。 44 在一个函数的定义或声明前加上关键字【 】时,该函数就声明为内联函数。 45 以下程序段的输出结果是【 】。 int x, i ; for (i=1; i =100; i+) x=i; if (+x%2=0) if (+x%3=0) if(+x%7=0)
10、cout i , ; 46 开发一个 C+语言程序的步骤通常包括编辑、【 】、链接、运行和调试。 47 头文件 _中包含了执行内部格式化所需的信息。 48 下列程序的执行结果为 【 】 。 #include iostream.h void main( ) cout.fill(*); cout.width(10); cout “hello“ end1; 49 下列程序的招待结果是【 】。 # include iostream. h float temp; float float& b=fn2(5.0) b=20; cout temp end1; 50 构造函数的主要作用是【 】。 国家二级( C
11、+)笔试模拟试卷 253答案与解 析 1 【正确答案】 B 【试题解析】 数据的存储结构分为顺序结构和链式结构,一个数据的逻辑结构可以有多种存储结构顺序结构中数据元素所占的存储空间是连续的,而链式存储结构中,数据元素所占的存储空间不一定是连续的。数据的存储结构与数据的处理效率密切相关 2 【正确答案】 B 【试题解析】 栈是按 “先进后出 ”原则组织数据的结构;队列是按 “先进先出 ”原则组织数据的结构;而有序表与二叉树均不是。 3 【正确答案】 B 4 【正确答案】 B 【试题解析】 参数 X是引用传递,传递的是 地址:参数 Y是值传递,函数 fun( )是做 X与 Y值交换,交换后 X的值
12、要被回传给 a1,此时 a1=a0=23。 5 【正确答案】 D 6 【正确答案】 D 7 【正确答案】 B 【试题解析】 采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护,它包括 3种基本控制结构,分别是顺序结构、选择结构和重复结构 (又称循环结构 )。注意:控制程序结构的方法和作用。 8 【正确答案】 B 【试题解析】 当数据表 A中每个元素距其最终位置不远,说明数据表 A按关键字值基本 有序,在待排序序列基本有序的情况下,采用插入排序所用时间最少,故答案为选项 B。 9 【正确答案】 A 10 【正确答案】 C 【试题解析】 E-R模型中,有三个基本的抽象概念:实体
13、、联系和属性。 E-R图是 E-R模型的图形表示法,在 E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。因此,本题的正确答案是选项 C。 11 【正确答案】 C 【试题解析】 本题考核派生类的使用以及访问权限问题。 C+中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。 A2是 A1的公有派生类, A3是 A2的保护派生类,所以类 A1的成员函数 show1()在类 A3中呈现保护属性,不能通过 A3类的对象访问。 12 【正确答案】 D 【试题解析】 本题考核类的析构函数。在 C+中,析构函数名为符号 “ ”加类名,析构函数没有参数和返回值。根据以上知识可
14、知, MyClass 类的正确析构函数的说明为 MyClass()。 13 【正确答案】 D 【试题解析】 “?:”为条件运算符, (a b)?a:b是当 a大于 b 时取 a,否则取b。所以第一个 fun(3, 6)调用中, 6大于 3,所以 输出 6,同理,第二个fun(3.14F,6.28F)调用中输出 6.28。 14 【正确答案】 A 【试题解析】 选项 B)中,从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作;选项 C)中, cin是一个预定义的输入流对象;选项 D)中, open 的成员函数只能打开文件:故只有选项 A)的叙述是正确的。 15 【正确答案】 D
15、【试题解析】 字符在进行数学运算时取其 ASC 码值,其中 b的 ASC 码值为98, d的 ASC 码值为 100,字符 2的 ASC 码值为 50。可知 D选项中表达式c2-0的值为 50。 16 【正确答案】 A 【试题解析】 在类体内定义的成员函数都是内联函数,不在类体内定义的就不是内联函数,故成员函数不一定都是内联函数 A项错误。 17 【正确答案】 D 【试题解析】 C+中函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数。动态多态性是在程序运行过程中才动态确定操作所针对的对象。动态多态性是通过虚函数实现的。 18 【正确答案】 A 【试题解析
16、】 C中用成员函数重载 x为 :x. operator ( ) ,用友元函数重载 x为 :operator (x) ,用成员函数重载 x/y为 :x. operator/(y) ,用友元函数重载 x/y为 :operator/(x, y) 。 19 【正确答案】 B 【试题解析】 class TestClass 定义了一个类,其中 TestClass()eout1; )为其的构造函数,当程序创建类 TestClass 的实例时,该函数将会被调用,在执行“TestClass a,b2, *p2; ”时,一共创建了三个这样的实例,故一共执行 构造函数 3次,对于变量 p,则是声明了一个指针数组,该
17、数组中的元素是指向类 restClass实例的指针,本身并没有创建类的实例。 20 【正确答案】 C 【试题解析】 在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类的构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。 21 【正确答案】 A 【试题解析】 C+在流操作中,利用 cout对象的 width属性设置输出字符的宽度,用 fill 函数来设置需要填充的字符。题目 程序中,首先设置填充字符为 *,输出宽度为 6,但在输出前又设置了填充字符为 #,所以在输出时,其填充字符为 #,由于 888不足 6个字符,所以在前面
18、以三个 “#”来填充。 22 【正确答案】 B 【试题解析】 p 表示的是变量 a的地址,定义后 *p表示的是变量 a的值。 23 【正确答案】 D 【试题解析】 形参、实参的生存期一般说来是不同的。 24 【正确答案】 C 【试题解析】 对象是类的实例化,类和对象不一样。 25 【正确答案】 D 【试题解析】 调用对象的一个成员函数时不会 调用拷贝构造函数。 26 【正确答案】 D 27 【正确答案】 D 【试题解析】 数据封装为了防止不同模块间数据的非法访问及修改。 28 【正确答案】 C 【试题解析】 本题考核指针和引用作为函数形参。做此类题时,应学会整体比较,要不然花费的时间不亚于一个
19、大的编程题。 首先,这 4个程序都是调用 swap函数,而且目的都一致,交换传入的两个实参值。 分析被调函数 swap()。在选项 A、 B和 C中都是指针作为形参,只有在选项 D中,函数 swap()是以引用作为形参。由指针和引用 作为函数形参的特点可知,只要调用了函数,就能达到交换两个实参变量的值,所以这几个被调函数没有问题。 再看主函数。在选项 C中,没有定义指针类型变量,而是直接给指针变量赋值: “floata, b; *a=8.0; *b=9.0; ”,这显然是非法的。想直接开辟存储空间,交换两个常量值,是不可能的。所以只有选项 C是错误的。 29 【正确答案】 D 【试题解析】 在
20、 C+的继承中,基类的构造函数和析构函数不能被继承。所以选项 A是正确的。 派生类中包含了基类中的成员,它是对基类定义的扩充和延 续,是对基类定义的进一步具体化,也可以说派生类是基类的组合。所以选项 B 是正确的。 派生类继承了基类的全部数据成员和除了构造函数、析构函数之外的全部函数成员。 所以选项 C是正确的。 派生类继承了基类的全部数据成员和除了构造函数、析构函数之外的全部函数成员,但是,继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。派生类不能访问基类的私有成员,而对基类的公有成员和保护成员的访问权限则随着派生类对基类的继承方式而改变。所以选项 D的说法是错误的。 30
21、【正确答案】 C 【 试题解析】 运算符的结合方式有两种:左结合和右结合。左结合表示运算符优先与其左边的标识符结合进行运算,如加法;右结合表示运算符优先与其右边的标识符结合,如单目算术运算符 +和 -。赋值运算符、复合运算符和单目运算符都是右结合的。双目算术运算符是左结合的。所以选项 C是错误的。 31 【正确答案】 D 【试题解析】 本题程序中引入了虚基类。在主函数中,执行语句 “y obj; ”时,先执行虚基类 x的构造函数,使 a=1,然后执行类 x1的构造函数,使 a=2,并输出值 2。再执行类 x2的构造函数,使 a=4,并输出值 4。最后执行类 y的构造函数,输出值 4。 32 【
22、正确答案】 A 33 【正确答案】 B 【试题解析】 对象属于某个已知的类,是类的实例,对象之间通信实际上就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于类的方法的改变和补充,重载是多态性之一。 34 【正确答案】 D 【试题解析】 考生根据分析可以得知 f函数的功能是交换两个变量的值。表明看起来,在 main 函数中,使用三次 f函数完成三个变量的交换。真的如此么 ?只要考生注意到 f函数采用值传递,而值传递的缺点就是不会改变形参的值 ,因此,上述操作根本无法改变原来三个变量的值 !故三个变量的值依然保持不变。 35 【正确答案】 A 【试题解析】 switch 语句检测到符合
23、条件 case执行后面语句不再判断。 36 【正确答案】 10pumpkin(s) 【试题解析】 在主函数中 pumpkin pl10;定义了一个有 10 个元素的对象数组,所以调用了 10次构造函数,静态数据成员 court累加了 10次,pumpkin:total_count( );显式调用类成员函数,直接调用静态成员函数:total_count( ),打印 pumpkin(s)。 37 【正确答案】 6 38 【正确答案】 关系的元组 【试题解析】 在关系型数据库中,用二维表来表示关系,二维表的表名即关系名,二维表的行称为关系的元组,二维表的列称为关系的属性。 39 【正确答案】 谓词演
24、算 【试题解析】 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。 40 【正确答案】 顺序查找 【试题解析】 在顺序查找与二分查找两种方法中,只能用顺序 查找方法对有序线性链表进行查找,因为二分查找方法只适用于顺序存储的有序表。 41 【正确答案】 14 【试题解析】 本题考核运算符的应用。条件运算符是一种在两个表达式中选择一个的操作,它是 C+中惟一的三元运算符。在本题中,先计算 (a B) ?a: b,因为a b,所以条件表达式的值为 0,因此 y=b=14,而 y c的逻辑值为真,所以表达式的值为 y的
25、值,即 14。 42 【正确答案】 TestClass1(int i): TestClass(i) 【试题解析】 程序中的 Testclass1为 Testclass 的派生类,派生类构造函数的一般形式为:派生类构造函数名 (总参数类表 ):基类构造函数名 (参数列表 )派生类中新增数据成员初始化语句 。派生类 TestClass1 的基类函数名为 TestClass,参数为int i,并且派生类中没有新增的数据成员。所以派生类 Testclass1 的构造函数为:Testclass1(int i): TestClass(i)。 43 【正确答案】 数值 【试题解析】 当用数组元素作函数参数时
26、是值传递方式。 44 【正确答案】 inline 45 【 正确答案】 25, 67 46 【正确答案】 编译 【试题解析】 C+语言是以编译方式实现的高级语言, C+语言程序的实现,必须要使用某种 C+语言的编译器对程序进行编译。 47 【正确答案】 strstrea.h 48 【正确答案】 *hello 【试题解析】 本题考查的是 C+语言的流输出操作, cout中包括的函数 fill()和width()分别实现填充和设定显示长度的功能。 49 【正确答案】 20 【试题解析】 本题考察全局变量和引用的综合使用。在主函数 中, b 实际上是temp 的一个引用。因此在给 b 赋值 20的时候,输出的 temp 就是 20。 50 【正确答案】 初始化对象成员 【试题解析】 构造函数的主要作用是初始化对象成员。