1、国家二级( C+)机试模拟试卷 147及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)栈是 “先进先出 ”的线性表 ( B)队列是 “先进后出 ”的线性表 ( C)循环队列是非线性结构 ( D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 2 支持子程序调用的数据结构是 ( )。 ( A)栈 ( B)树 ( C)队列 ( D)二 - Z树 3 某二叉树有 5个度为 2的结点,则该二叉树中的叶子结点数是 ( )。 ( A) 10 ( B) 8 ( C) 6 ( D) 4 4 下列排序方法中,最坏情况下比较次数最少的是 ( )。 ( A)冒泡排序 ( B)简单选择排
2、序 ( C)直接插入排序 ( D)堆排序 5 软件按功能可以分为:应用软件、系统软件和支撑软件 (或工具软件 )。下面属于应用软件的是 ( )。 ( A)编译程序 ( B)操作系统 ( C)教务管理系统 ( D)汇编程序 6 下面叙述中错误的是 ( )。 ( A)软件测试的目的是发现错误并改正错误 ( B)对被调试的程序进行 “错误定位 ”是程序调试的必要步骤 ( C)程序调试通常也称为 Debug ( D)软件测试应严格执行测试计划,排除测试的随意性 7 耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 ( )。 ( A)提高耦合性降低内聚性有利于提高模块的独立性 ( B)降低
3、耦合性提高内聚性有利于提高模块的独立性 ( C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度 ( D)内聚性是指模块间互相连接的紧密程度 8 数据库应用系统中的核心问题是 ( )。 ( A)数据库设计 ( B)数据库系统设计 ( C)数据库维护 ( D)数据库管理员培训 9 有两个关系 R, S如下 : 由关系 R通过运算得到关系S,则所使用的运算为 ( )。 ( A)选择 ( B)投影 ( C)插入 ( D)连接 10 将 E-R图转换为关系模式时,实体和联系都可以表示为 ( )。 ( A)属性 ( B)键 ( C)关系 ( D)域 11 字面常量 42、 4 2、 42L的数据类型分
4、别是 ( )。 ( A) long、 double、 int ( B): long、 float、 int ( C) int、 double、 long ( D) int、 float、 long 12 执行下列语句段后,输出字符 “*”的个数是 ( )。 for(int i=50; il; -i) cout using namespace std; class A public: static int a; void init()a=1; A(int a=2)init(); a+; ; int A: a=0; A obj; int main() cout using namespace st
5、d; class test private: int a; public: test()cout using namespace std; class Point public: static int number; public: Point()number+; Point()number-; ; int Point: number=0; int main() Point*ptr; Point A, B; Point*ptr_point=new Point3; ptr=ptr_point; Point C: Cout using namespace std; class Sample fri
6、end long fun(Sample s); public: Sample(long a)x=a; private: long x; ; long fun(Sample s) if(s x using namespace std; class A public: A(int i)x=i; void dispa()cout using namespaee std; class Music public: void setTitle(char, -str)strcpy(title, str); protected: char type10; private: char title20; ; cl
7、asg Jazz: public Music public: void set(char*str) strcpy(type, “Jazz“); strcpy(title, str); ; 下列叙述中正确的是 ( )。 ( A)程序编译正确 ( B)程序编译时语句 出错 ( C) 程序编译时语句 出错 ( D)程序编译时语句 和 都出错 36 有如下程序: #include using namespace std; class Book public: Book(char*t=“ “)strcpy(title, t); private: char title40; ; class Novel:
8、public Book public: Novel(char*t=“ “): Book(t) char*Category()constreturn“文学 “; ; int main() Book*pb; pb=new Novel(); coutCategory(); delete pb; return 0; 若程序运行时输出结果是 “文学 ”,则横线处缺失的语句是 ( )。 ( A) char*Category(); ( B) char*Category()const; ( C) virtual char*Category()const; ( D) virtual char*Category(
9、)const=0; 37 如下函数模板: templateT square(T x)return x*x; 其中 T是 ( )。 ( A)函数形参 ( B)函数实参 ( C)模板形参 ( D)模板实参 38 下列函数模板的定义中,合法的是 ( )。 ( A) templateT abs(T X) return xT abs(T X)return xabs(T x)return x using namespace std; class MyClass int value; public: ERROR * found * void MyClass(int val): value(val) int
10、GetValue()constreturn value; void SetValue(int val); ; ERROR * found * inline void SetValue(int val)value=val; int main() MyClass obj(0); obj SetValue(10); ERROR * found * 下列语句功能是输出 obj的成员 value的值 cout class vehicle private: int MaxSpeed; int Weight; public: *found* vehicle(int maxspeed, int weight)
11、: _ vehicle(); int getMaxSpeed()return MaxSpeed; int getWeight()return Weight; ; *found* class bicycle: _public vehicle f private: int Height; public: bicycle(int maxspeed, int weight, int height): vehicle maxspeed, weight),Height(height) int getHeight()return Height; ; ; *found* class motorcar: _pu
12、blic vehicle private: int SeatNum; public: motorcar(int maxspeed, int weight, int seatnum): vehicle(maxspeed, weight),SeatNum(seatnum) int getSeatNum()return SeatNum; ; ; *found* class motorcycle: _ public: motorcyele(int maxspeed, int weight, int height): Vehicle(maxspeed, weight),bicYcle maxspeed,
13、 weight, height), motorcar(maxspeed, weight, 1) ; void main() motorcycle a(80, 150, 100); cout #include using namespaee std; class MiniString public: friend ostream&operator(istream&input, MiniString&s)重载流提取运算符 char temp100; 用于输入的临时数组 temp0= 0;初始为空字符串 inputsetw(100)temp; int inLen=strlen(temp);输入字符串
14、长度 if(inLen!=0) s length=inLen;赋长度 if(S sPtr!=0)deletes sPtr;避免内存泄漏 s sPtr=new chars length+1; strepy(S sPtr, temp);如果 s不 是空指针,则复制内容 else s sPtr0= 0;如果 s是空指针,则为空字符串 return input; void modString(const char*string2)更改字符串内容 if(string2 !=0)如果 string2不是空指针,则复制内容 if(strlen(stringe2)!=length) length=strlen
15、(string2); deletesPtr; sPtr=new charlength+1;分配内存 strcpy(sPtr, string2); else sPtr0= 0;如果 string2是空指针,则为空字符串 MiniString&operator=(const MiniString&otherString); MiniString(const char *s=“): length(s!=0)?strlen(s): 0)构 造函数 sPtr=0; if(length!=0) setString(s): MiniString()析构函数 deletesPtr; private: int
16、length;字符串长度 char*sPtr;指向字符串起始位置 void setString(const char * string2)辅助函数 sPtr=new charstden(string2)+1;分配内存 if(string2 !=0)strcpy(sPtr, string2);如果 string2不是空指针,则复制内容 else sPtr0= 0;如果 string2是空指针,则为空字符串 ; proj3 cpp #include #include using namespace std; #include“proj3 h“ MiniString&MiniString: oper
17、ator=(eonst MiniString&otherString) 重载赋值运算符函数。提示:可以调用辅助函数 setString *333* *666* int main() MiniString strl(“Hello!“), str2; void writeToFile(eonst char *); str2=strl;使用重载的赋值运算符 str2 modString(“Happy new year!“); coutoperator-(className&);后置 +运算符的重载的一般格式为: mend0perator-(ClassName, int)。所以答案为 D。 20 【正
18、确答案】 C 【试题解析】 函数参数的 3种传递方式: 将变量名作为形参和实参 ,即传值方式; 传递变量指针; 引用形参。本题中实参 x为传值方式,所以 x的值不会改变; y为引用形参,所以会改变。故本题答案为 C。 21 【正确答案】 C 【试题解析】 C+不能重载的运算符只有 5个,即 “ ”、 “*”、 “: ”、 “?: ”、“sizeof”,故本题答案为 C。 22 【正确答案】 C 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先
19、级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故本题答案为 C。 23 【正确答案】 A 【试题解析】 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。 24 【正确答案】 B 【试题解析】 本题考查构造函数,本题中对类中的 a数据成员先是赋值为 0,当定义了对象 obj时,执行构造 函数,将 a的值变为了 1,所以输出 1。 25 【正确答案】 B 【试题解析】 类的成员访问权限有 3种: public(公用 )、
20、 protected(保护 )、private(私有 )。 26 【正确答案】 D 【试题解析】 在销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。 27 【正确答案】 C 【试题解析】 本题考查 3种继承方式,其中,基类的私有成员始终为基类私有。所以派生类无法访问基类的私有成员。本题答案为 C。 28 【正确答案】 B 【试题解析】 本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即 a
21、为私有变量。所以本题答案为 B。 29 【正确答案】 D 【试题解析】 本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象 A(3),对象带着参数,所以执行带参数的构造函数,输出 3,然后执行析构函数,输出 destructor。所以本题答案为 D。 30 【正确答案】 B 【试题解析】 本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a以及对象数组 b2,共执行 3次构造函数,对象指针不调用构造函数。所以本题答案为 B。 31 【正确答案】 C 【试题解析】 本题考查默认构造函数,题目中定义一个对象 A、 B以及对象数组Point3,又定义了对象 C,共执行
22、6次构造函数, number变为了 6,所以本题答案为 C。 32 【正确答案】 C 【试题解析】 本题考查默认构造函数, 当 i=0、 1时, fun(Sample(i)为 1;当 i=2时, fun(Sample(i)为 2;当 i=3时, fun(Sample(i)为 6;当 i=4时, fun(Sample(i)为 24;当 i=5时, fun(Sample(i)为 120。所以总和为 154。 33 【正确答案】 C 【试题解析】 本题考查公用继承和保护继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。在受保护继承中,
23、基类的公用成员和保护成员在派生类中成了保护成员 ,其私有成员仍为基类私有。本题中 Derivedl公用继承 Base,所以 编译正确, Derived2保护继承 Base,所以 编译不正确。 34 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和基类的构造函数。本题中类 B继承类 A,定义了一个类 B的对象并初始化 b(2),此时会执行类 B的构造函数,执行的结果是继承类 A中的私有成员赋值了 12,给类 B自身的数据成员 x赋值了 2,执行 b dispb()后,输出类 A的私有成员 x,输出类 B自身的数据成员,所以答案为 C。 35 【正确答案】 C 【试题解析】 本题考查公用
24、继承和保护继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。保护成员不能被类外访问,但是可以被派生类的成员函数访问。 Type成为派牛类的保护成员,可以被派生类访问, title仍为基类私有,派生类不能直接访问。所以答案为 C。 36 【正确答案】 D 【试题解析】 本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被 “初始化 ”为 0的函数,包含纯虚函数的类为抽象类,抽象类是不能被实例化的,但是可以定义指向抽象类 数据的指针变量,当派生类成为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态性的操作
25、。所以本题答案为 D。 37 【正确答案】 C 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义, T是模板形参,所以答案为 C。 38 【正确答案】 A 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义,所以答案为A。 39 【正确答案】 B 【试题解析】 本题考查流对象 cin,属于基础知识, cin是输入流对象,负责从键盘获取数据,然后送到内 存。本题答案为 B。 40 【正确答案】 A 【试题解析】 iomanip中定义的操纵符包括: setfiU(ch)用 ch填充空白、setprecision(n)将浮点精度置为 n、 setw(w)、读写 w个字符的值 s
26、howpoint设置小数点。 二、基本操作题 41 【正确答案】 (1)MyClass(int val): value(val) (2)void MyClass: SetValue(int val)value=val; (3)cout“The Value is“obj GetValue()endl: 【试题解析】 (1)考查构造函数,定义构造函数时不能使用 void,直接使用Myclass(int val)即可。 (2)主要考查成员函数定义,类的成员函数定义时要使用前缀 Myclass,而 inline是内联函数的关键字,在此是错误的,应该删掉 inline并在函数名前加上前缀MyClass,
27、即 Void MyClass: SetValue(int val)value=val; 。 (3)考查成员函数调用, value是私有成员,在主 函数中不能直接调用 value,可以使用成员函数 GetValue()来得到 value的值。 三、简单应用题 42 【正确答案】 (1)MaxSpeed(maxspeed), Weight(weigrht); (2)virtual (3)virtual (4)public bicycle, public motorcar 【试题解析】 (1)主要考查考生对构造函数的掌握,构造函数使用初始化列表来对私有成员 MaXspeed和 weight初始化。
28、(2)主要考查考生对派生 类的掌握,题目要求将 vehicle作为虚基类,避免二义性问题。因此在这里添加 virtual使 vehicle成为虚基类。 (3)主要考查考生对派生类的掌握,题目要求以 motorCaur和 bicycle作为基类,再派生出 motorcycle类。在主函数中可以看到 motorcycle类的实例 a调用getHeight函数和 getSeatNum函数,由此可知这两个基类都是公有继承,因此得出语句: public bicycle, public motorcar。 四、综合应用题 43 【正确答案】 length=otherString length; 把对象字符
29、串 otherstring的长度赋值给变量 length setString(otherString sptr); 调用函数 setstring,实现给类变量 sptr分配空间,以及逐个把对象otherstring字符串的值复制到 sptr中 return*this; 返回被赋值的对象 【试题解析】 主要考查考生对运算符重载的掌握,题目要求重载赋值运算符函数。要重载的运算符是 “=”,即赋值的意思。提示:可以 调用辅助函数 setString。该函数的功能是复制形参的字符串到 sPtr中,因此,首先复制 length,其次通过函数 setString复制 sPtr,最后按要求返回 *this;。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1