1、国家二级( C+)机试模拟试卷 92及答案与解析 一、选择题 1 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)事件驱动 ( C)模块调用 ( D)数据流 2 在下列原型所示的 C+函数中,按 “传值 “方式传递参数的是 ( )。 ( A) voidf1(intx); ( B) voidf2(int*x); ( C) voidf3(constint*x); ( D) voidf4(int 3 有如下程序: #include using namespace std; class Part public: Part(int x=0):val(x) cout using nam
2、espace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) protected: void SetXY(int xx,int yy) x=xx; y=yy; private: int x,y; ; class Circle:public Point public: Circle(int r):radius(r) void Set(int r,int x,int y) radius=r; SetXY(x,y); / void Print() const cout #include using namespace std
3、; class Animal public: virtual string GetType() const return “Animal“; virtual string GetVoice() const return “Voice“; ; class Dog:public Animal public: string GetType() const return “Dog“; string GetVoice() const return “Woof“; ; class Cat:public Animal public: string GetType() const return “Cat“;
4、string GetVoice() const return “Miaow“; ; void Type(Animal a) cout using namespace std; class GA public: virtual int f() return 1; ; class GB: public GA public: virtual int f() return 2; ; void show(GA g) cout #include using namespace std; class Animal public: virtual string GetType() const return “
5、Animal“; virtual string GetVoice() const return “Voice“; ; class Dog:public Animal public: string GetType() const return “Dog“; string GetVoice() const return “Woof“; ; class Cat:public Animal public: string GetType() const return “Cat“; string GetVoice() const return “Miaow“; ; void Type(Animal a)
6、coutTabs(Tx)returnxTabs(Tx)returnxabs(Tx)returnx using namespace std; class TV public: TV(int s=41):size(s) void Print() coutTfun(Tx)returnx*x; ( B) templateTfun(Tx,intn)returnx+n; ( C) templateTfun(T*p)return*p; ( D) templateTfun()returnT; 二、基本操作题 41 请使用 VC6或使用【 答题】菜单打开考生文件夹 pmjl下的工程 proj1,此工程中含有一个
7、源程序文件 proj1 cpp。 其中位于每个注释 “ ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Constructorcalled Thevalueis10 Maxnumberis20 Destructorcalled 注意:只能修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include usingnamespacestd; classMyClass public: ERROR*found* voidMyClass(inti) value=i; couty? X: y; )求两个整数的最
8、大值 ERROR*found* intMax(intx, inty, intz=0) 求三个整数的最大值 if(xy) returnxz?x: z; else returnyz?y: z; intGetValue()constreturnvalue; MyClass()cout usingnamespacestd; classShape public: Shape() Shape() *found* _floatGetArea()=0; *found* _floatGetPerim()=0; ; classCircle: publicShape public: Circle(floatradi
9、us): itsRadius (radius) Circle() floatGetArea()return3 14*itsRadius*itsRadius; floatGetPerim() return6 28*itsRadius, private: floatitsRadius; ; classRectangle: publicShape public: *found* Rectangle(floatlen, floatwidth): _; Rectangle(); virtualfloatGetArea() returnitsLength*itsWidth; floatGetPerim()
10、 return2*itsLength+2*itsWidth; virtualfloatGetLength()return itsLength; virtualfloatGetWidth()returnitsWidth; private: floatitsWidth; floatitsLength; ; intmain() *k*found* sp=newCircle(5); coutGetArea()GetPerim()GetArea()GetPerim()data=newchar100; this-createSeptinary(num); Septinary: Septinary() if
11、(data!=NULL) deletedata; voidSeptinary: createSeptinary(int num) *333* *666* charSeptinary: numberToChar(int num) if(num7) cout #include usingnamespacestd; classSeptinary七进制类 private: char*data; public: Septinary(intnum); Septinary(); voidcreateSeptinary(intnum); charnumberToChar(intnum); voidshow()
12、; ; voidwriteToFile(constchar*path); 国家二级( C+)机试模拟试卷 92答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 数据流图中带箭头的线段表示的是数据 流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。 2 【正确答案】 A 【试题解析】 函数参数的 3种传递方式: 将变量名作为形参和实参,即传值方式; 传递变量指针; 引用形参。其中 B、 C选项都是传递变量指针, D选项为引用形参,所以本题答案为 A。 3 【正确答案】 B 【试题解析】 本题考查带参数的构造函数。本题中定义了一个对象 obj,那么执行其构造函数,初始化 p1,p2
13、的顺序是由声明这两个成员的顺序决定的,而不是由参数化列表顺序决定,所以本题中,会先执行 p1,输出 2,然后执行 p2输出 1,然后输出 3,最后一次输出 312。所以本题答案为 B。 4 【正确答案】 D 【试题解析】 程序调试的任务是诊断和改正程序中的错误。 5 【正确答案】 A 【试题解析】 本题考查函数重载相关知识,重载函数是函数的一种特殊情况,为方便使用, C+允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。 A选项的形参都与原函数相同,所以不能作为重载函数。 6 【正确答案】 B
14、 【试题解 析】 本题考查对象成员的引用,派生类公用继承基类,但是不能继承基类的私有成员,所以执行 voidPrint()constcout85,不满足条件,不是堆,故正确答案为 C选项。 16 【正确答案】 D 【试题解析】 该题是隐式类型转换。首先 2/3会按照 int型来计算,结果自然是0,由于赋值运算符左操作数对象是 double型,所以需要将 int型结果转换为double型 0.0,答案为 D。 17 【正确答案】 A 【试题解析】 C+的输入输出体系中,从流中获取数 据的操作称为提取操作,向流中添加数据的操作称为插入操作,选项 B、 D错误; cin是一个预定义的输入流对象,选项
15、 D错误,答案为 A。 18 【正确答案】 D 【试题解析】 选项 A中, “+“运算符作为一元运算符,应该放在操作数之前,返回操作数本身;作为二元运算符,必须作用于两个操作数;选项 B 中, “+“运算符是一元运算符,只能作用于一个操作数;选项 C中, 3是常量,不能用作赋值操作符的左值;选项 D正确, “-“操作符作为一元运算符,放在操作数之前,对其操作数取负;答案为 D。 19 【正确答案】 D 【试题解析】 多继承机制中,派生类可以继承多个基类,选项 A正确;派生类构造函数通常在初始化列表中调用基类构造函数,选项 B正确;虚基类就是为了解决多继承产生的二义性问题而设计的,选项 C正确;
16、派生类继承基类的所有成员,选项 D错误;答案为 D。 20 【正确答案】 D 【试题解析】 冒泡排序与简单插入排序与简单选择排序法在最坏情况下均需要比较 n(n 1)/2次,而堆排序在最坏情况下需要比较的次数是 nlog2n。 21 【正确答案】 A 【试题解析】 运算符重载为成员函数时,会省略一个参数,如果无参数 ,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。 C+有 5个运算符不能重载,它们是: .(成员访问运算符 )、 .*(成员指针访问运算符 )、: (域运算符 )、 sizeof(长度运算符 )
17、和 ?: (条件运算符 )。故本题答案为 A。 22 【正确答案】 C 【试题解析】 本题主要考察虚函数。虚函数指在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,本题中定义类 GA 的对象 a,执行show(a)、 display(a),输出 11,定义了类 GB 的对象 b,执行 show(b),仍然输出1, display(b)执行会调用派生类的 f函数,因为 f 函数为虚函数,输出 2,所以本题答案为 C。 23 【正确答案】 A 【试题解析】 本题考查二维字符数组, a0=“AAA“中 a0表示一个地址,不能将字符串直接赋值给指针,所以 A选项错误。 24
18、 【正确答案】 B 【试题解析】 在类体中定义的成员函数, C+系统会自动将它们作为内联函数处理,而在类外定义的成员函数,系统并不把它们默认为内联函数,使用 inline也是内联函数,所以共有 2个内联函数 GetLength 和 GetWidth, B 选项正确。 25 【正确答案】 B 【试题解析】 白盒测试法主要有逻辑覆盖、基本路径测试等。逻辑覆盖测试包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断 -条件覆盖,选择 B。其余为黑盒测试法。 26 【正确答案】 A 【试题解析】 本题考查类型转换函数,其一般形式如下: operator 类型名 () 实现转换的语句 在函数名前面不能指定函
19、数类型,函数没有参数,所以 A选项正确。 27 【正确答案】 C 【 试题解析】 本题考查虚函数的运用,本题中定义 Dogd;Type(d)时,执行基类的 Type函数,输出 Animal,然后输出 speak,然后执行基类的 Speak 函数输出Voice,最后输出 -,同理 cat输出类似,所以结果为 C选项正确。 28 【正确答案】 B 【试题解析】 程序首先在 main 函数之前定义两个 int型全局变量 i、 j,并赋予初始值 i=1, j=4;在 main 函数中又定义了两个 int型局部变量 i、 j,并使用全局变量 i初始化局部变量 j,使用数值 8初始化局部变量 i,所以局部
20、变量 j=1,局部变量 i=8;由于在命名空间中,局部变量会覆盖同名的全局变量,所以输出的 i、 j都是局部变量,输出结果为 81,答案为 B。 29 【正确答案】 A 【试题解析】 C+中,实现运行时多态性必须满足两个条件: 1、被调用的成员函数为虚函数; 2、调用必须通过基类类型的引用或指针。选项 B、 C、 D正确;多态性是虚函数在运行时期绑定,而重载的函数是在编译期绑定,重载主要是为了 C+的代码复用,与多态性没有关系;答案为 A。 30 【正确答案】 D 【试题解析】 false是逻辑常量, A选项错误; 0是字符常量, 字符串常量是用双引号括起来的若干字符序列, B选项错误; 11
21、是一个整型常量, C选项错误;1.1是浮点型常量,一般按双精度处理,是 double型常量,答案为 D。 31 【正确答案】 B 【试题解析】 class 关键字定义的类,成员默认的访问级别是私有的,所以类What中公有成员有 d,私有成员有 n, c;答案为 B。 32 【正确答案】 B 【试题解析】 软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保 证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。 33 【正确答案】 C 【试题解析】
22、重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+的标准类型。故 本题答案为 C。 34 【正确答案】 A 【试题解析】 本题考查模板函数的基本概念,根据模板函数的定义,所以答案为A。 35 【正确答案】 A 【试题解析】 const是一个 C+语言的关键字,它限定一个变量不允许被改变。使用 const在一定程
23、度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。 A选项没有初始化, B、 C、 D选项都正确。 36 【正确答案】 A 【试题解析】 本题考查构造函数相关知识,本题中定义一个对象 room1,执行room1.Print时执行构 造函数给 size赋值为 41,然后执行voidPrint()couty?x: y; 中两个形参变量都是 int型,而语句 intMax(intx, inty, intz=0)的前两个形参也都是 int型,第三个形参定义默认值,那么这两个 Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把 intz
24、=0改为 intz,才能构成函数重载。 (3)主要考查成员函数的调用,因为 value是私有成员,所以不能被类外函数直接调用,而且 value()的用法也是错误的,可以使用成员函数 obj GetValue()得到value的值。 三、简单应用题 42 【正确答案】 (1)virtual (2)virtual (3)itsLength(len), itsWidth(width) (4)Shape* sp; 【试题解析】 (1)和 (2)主要考查考生对纯虚函数定义的掌握 ,纯虚函数前要添加关键字 virtual。 (3)主要考查考生对构造函数的掌握 ,使用成员列表初始化。 (4)主要考查考生对指
25、针的掌握 ,由下一条语句 :sp = new Circle(5),可知 sp 为 Shape型指针。 四、综合应用题 43 【正确答案】 intindex=0; chartempi00; while(num) tempindex+=numberToChar (num 7); num =7; dataindex=- 0; inti=0; while(index) data-index=tempi+; 【试题解析】 主要考查考生对对象成员数据处理的掌握。函数 createSeptinary的功能,是将参数十进制整数 num转化为七进制数,并将七进制数的每一位存入data数组中。由于转换得到的数是逆序的,这里需要临时数组 temp,用来暂时存放逆序的七进制数。首先 nnm对 7求余,通过成员函数 numberToChar 将余数转换为 char类型,保存在 temp 中, num除以 7后重新赋值为除数,继续执行求余操作,直到 num为 0,此时七进制数已经逆序保存在 temp 中,最后将 temp 翻转保存到 data中。由于在成员函数 show 中,可以直接将数组 data当字符串输出,所以需要在 data 末尾添加 0,来标识字符串结束。