1、国家二级( C+)机试模拟试卷 131及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)数据的存储结构会影响算法的效率 ( B)算法设计只需考虑结果的可靠性 ( C)算法复杂度是指算法控制结构的复杂程度 ( D)算法复杂度是用算法中指令的条数来度量的 2 设数据集合为 D=1, 2, 3, 4, 5。下列数据结构 B=(D, R)中为非线性结构的是 ( )。 ( A) R=(1, 2), (2, 3), (3, 4), (4, 5) ( B) R=(1, 2), (2, 3), (4, 3), (3, 5) ( C) R=(5, 4), (4, 3), (3, 2), (2,
2、 1) ( D) R=(2, 5), (5, 4), (3, 2), (4, 3) 3 某二叉树共有 150个结点,其中有 50个度为 1的结点,则 ( )。 ( A)不存在这样的二叉树 ( B)该二叉树有 49个叶子结点 ( C)该二叉树有 50个叶子结点 ( D)该二叉树有 51个叶子结点 4 循环队列的存储空间为 Q(1: 50),初始状态为 front=rear=50。经过一系列正常的人队与退队操作后, front=rear=25,此后又正常地插入了一个元素,则 循环队列中的元素个数为 ( )。 ( A) 51 ( B) 50 ( C) 4 9 ( D) 1 5 下列排序方法中,最坏情
3、况下时间复杂度 (即比较次数 )低于 O(n2)的是 ( )。 ( A)快速排序 ( B)简单插入排序 ( C)冒泡排序 ( D)堆排序 6 下面描述正确的是 ( )。 ( A)软件测试是指动态测试 ( B)软件测试可以随机地选取测试数据 ( C)软件测试是保证软件质量的重要手段 ( D)软件测试的目的是发现和改正错误 7 下面图中属于软件设计建模工具的是 ( )。 ( A) DFD图 (数据流程图 ) ( B)程序流程图 (PFD图 ) ( C)用例图 (USE_CASE图 ) ( D)网络工程图 8 数据库 (DB)、数据库系统 (DBS)和数据库管理系统 (DBMS)之间的关系是 ( )
4、。 ( A) DB包括 DBS和 DBMS ( B) DBMS包括 DB和 DBS ( C) DBS包括 DB和 DBMS ( D) DBS、 DB和 DBMS相互独立 9 医院里有不同的科室,每名医生分属不同科室,则实体科室与实体医生间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 10 有 3个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( )。 ( A)投影 ( B)选择 ( C)交 ( D)差 11 下列选项中,错误的 C+表达式是 ( )。 ( A) a+ ( B) b=10 ( C) double(3 5) ( D) x+!
5、=3 y 12 执行语句 “for(int i=0, x=0; !x&i using namespace std; int main() int sum=0: for(int i=1; i 18 下列关于运算符重载的表述中,错误的是 ( )。 ( A)不能为运算符重载函数改变其运算符原有的优先级; ( B)有的运算符只能作为成员函数重载; ( C)能够为运算符重载函数改变其运算符原有的运算目数; ( D)有的运算符可以作为非成员函数重载。 19 下列关于运算符函数的表述中,错误的是 ( )。 ( A)运算符函数的参数表可能是空的; ( B)运算符函数只能定 义为类的成员函数; ( C)运算符函
6、数的名称是以 operator为前缀的; ( D)运算符函数的参数可以是对象。 20 有如下程序; #include using namespace std; void fun(int&a, _)int c; c-a; a=b; b=c; int main() int x=14, y=20; fun(x, y); cout using namespace std; class Bag public: Bag(int p, char s=M): price(p), size(s) void Show()cout using namespace std; class Equipment publi
7、c: Equipment()cout using namespace std; class Power public: Power(int x): val(x) protected: int val; ; class Square: public Power public: Square(int x): Power(x) void Display()coutDisplay(); delete p; return 0; 若运行时的输出结果为 “3的平方是 9”,则划线处缺失的语句可能是 ( )。 ( A) void Display()l ( B) virtual void Display()=0
8、 ( C) void virtual Display()=O; ( D) void Display()virtual 33 有如下程序: #include #include using namespace std; class MyBag public: MyBag(string br, string or): brand(br), color(or)+count; static int GetCount()return count; private: string brand, color; static int count; ; int MyBag: count=0; int main()
9、 MyBag one(CityLife, Gray); tout using namespace std; class Point public: Point(int xx, int yy): x(xx), y(yy) int Getxy()return x+y; private: int x, y; ; class Circle: public Point public: Circle(int r, int x=0, int y=0): Point(x, y), radius(r) private: int radius; ; int main() Circle a(6, 5, 4), b(
10、4, 3, 2); cout using namespace std; class Point public: Point(int xx=0, int yy=0): x(xx), y(yy) void SetX(int xx)x=xx; void SetY(int yy)y=yy; private: int x, y; ; class Circle: public Point public: Circle(int r): radius(r) int GetRadius()return radius; protected: void SetRadius(int r)radius=r; priva
11、te: int radius; ; int main() Circle c1l(5); c1 SetX(1); c1 SetY(2); c1 SetRadius(6); cout #include using namespace std; class Instrument public: Instrument(string t, string n): type(t), name(n) virtual string GetType()constreturn type; virtual string GetName()constreturn name; protected: string type
12、, name; ; class Piano: public Instrument public: Piano(string n=AB, string t=CD): Instrument(n, t) string GetType()constreturnWX; string GetName()constreturnYZ; ; int main() Instrument*pi=new Piano(); coutGetType()GetName() #include using namespace std; class MP3Player “MP3播放器 ”类 char* type;型号 char*
13、color;颜色 public: ERROR*found* MP3Player(const char* ty=NULL, const char* co) ERROR*found* if(ty=NULL) type=NULL; else type=new charstrlen(ty)+1; strcpy(type, ty); if(co=NULL) color=NULL; else color=new charstrlen(co)+1; strcpy(color, co); MP3Player() if(type)deletetype; ERROR*found* if(color)delete
14、color; const char*getType()constreturn type; const char*getColor()constreturn color; ; int main() MP3Phyer myplayer(“天籁 -1”, “黑色 ”); cout using namespace std; class Room “房间 ”类 int room_no;房间号 double length;房间长度 (m) double width;房间宽度 (m) public: Room(int the_room_no, double the_length, double the_wi
15、dth):loom_no(the_room_no), length(the_length), width(the_width) int theRoomNo()constreturn room_no; 返回房间号 double theLength()constreturn length; 返回房间长度 double theWidth()constreturn width; 返回房间宽度 *found* double theArea()const_返回房间面积 (矩形面积 ) ; class Office: public Room “办公室 ”类 char*depart;所属部门 public:
16、Office(int the_room_no, double the_length, double the_width, const char*the_depart) *found* : _ depart=new charstrlen(the_depart)+1; *found* strcpy(_); Office()deletedepart; const char*theDepartment()constreturn depart; 返回所属部门 ; int main() *found* Office_; cout using namespace std; class DataList数据表
17、类 int len; double*d; public: DataList(int len, double data=NULL); DataList()deleted; int length()constreturn len; 数据表长度 (即数据元素的个数 ) double getElement(int i)constreturn di; void sort();数据表排序 void show()eonst;显示数据表 ; void writeToFile(char*, const DataList&); main cpp #includeDataList h DataList: DataL
18、ist(int len, double data): len(1en) d=new doublelen; for(int i=0; i,将这些操作符定义为非成员函数将在编译时标记为错误,答案选 B选项。 18 【正确答案】 C 【试题解析】 重载运算符时,运算符的优先级、结合性或操作数数目不能改变,选项 A正确;赋值 =、下标 、调用 ()、和成员访问箭头一 等运算符必须定义为类成员函数,将这些操作符定义为非成员函数会在编译时标记为错误,选项 B正确;对于算术运算符、相等运算符等,可以定义为非成员函数,选项 D正确;重载运算符不能改变操作数数目,选项 C错误 。答案为 C选项。 19 【正确答
19、案】 B 【试题解析】 重载大多数运算符时,其参数列表中包含参数,而重载类型转换操作符时,其形参表必须为空,故运算符函数的参数表可能是空的,选项 A正确;重载运算符是具有特殊名称的函数,保留字 opera-tor后加上需要定义的运算符符号,选项 C正确;重载运算符函数的参数是满足该运算符运算的对象,选项 D正确;对于算术运算符、相等运算符等,可以定义为非成员函数,而有些运算符函数不能定义为类的成员函数,如 I O操作符,选项 B错误。答案为 B选项。 20 【正确答案】 B 【试题解析】 C+中,函数的参数必须指定类型,选项 A错误; C+中,函数的参数默认是按值传递的,观察程序可知,在函数
20、fun中,由于 fun函数的第一个参数为引用类型,所以 x值被改变为 y的值,由于程序输出 x、 y的值均为 20,所以y的值并没有在调用 fun的过程中被改变,所以 fun函数的第二个形参类型不能为引用类型,选项 D错误;由于 fun函数中,形参 a、 b与整型变量 c之间可以相互赋值,所以 b不可能为指针类型,选项 C错误;对于选项 B,由于函数参数按值传递,所以形参 b的改变,不会影响实参 y的值,选项 B正确。 21 【正确答案】 D 【试题解析】 本题考查的是输出运算符 的重载首先函数的第一个形参类型为ostream&,所以返同值也应该是 ostream&,以保证输出运算符可以链接使
21、用,选项 A、 C错误;由于 I O操作符的第一个形参类型并不是 Date类类型,所以不能作为成员函数,必须使用友元函数,声明前必须加关键字 friend,选项 B错误,选项 D正确。 22 【正确答案】 C 【试题解析】 本题考查的是前缀自增运算符的重载。由于题意中 “+”是作为成员函数重载的运算符,所以若要显式的调用该运算符, 需要使用该类的对象加上“ ”运算符,即 x operator+();又因为为了区分前缀运算符和后缀运算符,在调用后缀运算符时,需要给出一个整型实参值,而前缀运算符则不需要,所以 +x等效的运算符函数调用形式为: x operator+(),答案为 C选项。 23 【
22、正确答案】 C 【试题解析】 本题考查的是类的构造函数。只要创建某个类的一个对象时,编译器就会运行一个构造函数,选项 A正确;为所有形参提供默认实参的构造函数称为默认构造函数,选项 B正确;只有单个形参,而且该形参是对本类类型对象的引用 (常用 const来修饰 ),这样的构造函数称为复制构造函数,选项 D正确;类的静态数据成员独立于类的任何对象而存在,不是类类型对象的组成部分,所以不能通过类的构造函数进行初始化,而必须在类定义时,在类定义体的外部定义,选项 C错误;答案为 C选项。 24 【正确答案】 A 【试题解析】 本题考查的是类的成员初始化的次序。构造函数初始化列表仅指定用于初始化成员
23、的值,并不指定这些初始化执行的次序,成员对象被初始化的次序与类在声明这些成员的次序相同。答案为 A选项。 25 【正确答案】 B 【试题解析】 题意 中定义了两个对象 a和 b, a是 const变量,将一个对象说明为常对象后,通过这个常对象只能调用它的常成员函数,而不能调用其他成员函数,所以不能通过调用 a成员函数修改对象成员的值,而 b则可以,所以a SetData(10)的调用是错误的。由于 GetData()是常成员函数,所以 a GetData()的调用正确,答案为 B选项。 26 【正确答案】 B 【试题解析】 多重继承的派生类有可能从两个或多个基类中继承同名成员,对该成员不加限定
24、的访问就会造成二义性,虚基类就是为了解决这个二义性问题,无论该类在派生 层次中作为虚基类出现多少次,都只继承一个共享的基类子对象,从而消除二义性。答案选 B选项。 27 【正确答案】 C 【试题解析】 动态联编产生的条件是通过基类的指针或者引用来调用虚函数,所以选项 C正确,答案为 C选项。 28 【正确答案】 A 【试题解析】 类的对象可直接访问的只能是该类的公有成员,采用公有继承方式时,基类的公有成员在派生类中仍然是公有成员,可以直接访问,而基类的保护成员在派生类中仍然是保护成员,不可以直接访问,选项 A正确,选项 C错误;采用私有继承方式时,基类中的公有成员和保 护成员在派生类中都是私有
25、成员,派生类对象无法直接访问,选项 B、 D错误。答案为 A选项。 29 【正确答案】 D 【试题解析】 重定义是指派生类的函数屏蔽与其同名的基类函数,成员函数重载是指在同一个类中函数名字相同而参数列表不同,两个成员函数 GetPrice由于const的修饰,使得它们为重载函数,此处不存在重定义,选项 A错误;构造函数的参数可以设置为默认值,选项 B错误;析构函数可以访问静态数据成员,选项C错误;成员函数 SetPrice会修改成员变量 price的值,所以不能定义为常函数,选项 D正确,答 案为 D选项。 30 【正确答案】 A 【试题解析】 Black与 White两个对象都调用 Show
26、函数,输出的结果中除了成员变量的值不同,还有符号也不相同:一个是 -,一个是 *,可知划线处肯定是Show的重载函数;另外 Black对象与 white对象唯一的不同之处在于 Black对象是普通对象,而 White对象是 const修饰的常量对象,所以常量对象调用的成员函数 Show,一定是 const修饰的常函数,即 void Show()const,答案为 A选项。 31 【正确答案】 C 【试题解析 】 类 Computer的构造函数首先调用基类 Equipment的默认构造函数,完成基类部分的构造,所以首先输出 E;接着在初始化列表部分调用成员变量 m的默认构造函数,完成成员变量 m
27、的构造,即接着输出 M,最后进人Computer。构造函数的函数体,输出字符 C,最终输出结果为 EMC,答案为C。 32 【正确答案】 B 【试题解析】 由题意可知,基类指针 p指向的是派生类的对象,当 p调用Display()时,输出的结果是派生类中的 Display(),可知 Display()必为虚函数,这样才能满足 动态联编。虚函数的定义是在声明前加关键字 virtual,选项 A不是虚函数,错误;选项 C、 D定义虚函数的格式不对,错误;答案为 B选项。 33 【正确答案】 A 【试题解析】 静态成员变量 count在构造函数中完成前缀自增 1的运算,所以语句 MyBag one(
28、“CityLife”, “Gray”)在调用构造函数时,完成 +count,此时调用one GetCount()输出 count的值为 1;同理 new My-Bag语句也会调用构造函数,完成 +count,此时 count的值为 2,通过类名 MyBag调用 GetCount()时,输出count的值为 2,最终输出结果为 12,答案为 A选项。 34 【正确答案】 B 【试题解析】 类 Circle的构造函数中使用参数 x, y来完成基类 Point的初始化,使用 r完成 radius的初始化,所以语句 Circle a(6, 5, 4)将 5赋值给对象 a的x成员, 4赋值给对象 a的 y成员, 6赋值给对象 a的 r成员,同理语句 Circle b(4, 3, 2)将 3赋值给对象 b的 x成员, 2赋值给对象 b的 y成员, 4赋值给对象 b的 r成员,接着调用 Getxy函数时, a Getxy()返回 5+4=9, b Getxy()返回3+2=5,输出结果为 9+5=14,答案为 B选项。