1、国家二级 C+机试(操作题)模拟试卷 334及答案解析(总分:10.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 pmj1,此工程包含一个源程序文件proj1epp。文件中将表示数组元素个数的常量 Size定义为 4,并用 int类型对类模板进行了实例化。文件中位于每个注释“ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 注意:模板参数名用 T。只修改注释“ERROR*found*”的下一行语句,不要改动程序中的其他内容。proj1cpp#
2、includeiostreamusing namespace std;将数组元素个数 Size定义为 4ERROR*found*const int Size;templatetypename Tclass MyClasspublic: MyClass(T*P) for(int i=0;iSize;i+) arrayi=pi; void Print();private: T arraySize; ; templatetypename T ERROR*found* void MyClass:Print() for(int i=0;iSize;i+) coutarrayit; int main()
3、int intArraySize=1,2,3,4; ERROR*found* MyClassdoubleobj(intArray); objPrint(); coutendl; return 0; (分数:2.00)_2.请使用 VC6或使用【答题】菜单打开考生文件夹 projl下的工程 projl,此工程中含有一个源程序文件projlcpp。其中位于每个注释“ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: Constructor called The value is 10 Max number is 20 Destructor called 注意:只
4、能修改注释“ERROR*found*”的下一行语句,不要改动程序中的其他内容。projlcpp#includeiostreamUSing namespace std;class MyClasspublic:ERROR*found* void MyClass(int i) value=i;cout”Constructorcalled”endl; int Max(int X,int Y)return xY?x:y;)求两个整数的最大值ERROR*found* in=Max(int x,int Y, nt Z=0)求三个整数的最大值 if(xy) return XZ?x:Z; else return
5、 yZ?Y:z; int GetValue()constreturn value; 一 MyClass()cout”Destructorcalled”endl;)Frivate: int value; ; int main() MyClass obj(10);ERROR*found* cout”The value is”value()endl; cout”Max number is”objMax(10,20)endl; return 0; (分数:2.00)_二、简单应用题(总题数:2,分数:4.00)3.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,该工程中
6、包含一个程序文件maincpp,其中有坐标点类 point、线段类 Line和三角形类 Triangle的定义,还有 main函数的定义。程序中两点间距离的计算是按公式 实现的,三角形面积的计算是按公式 实现的,其中 (分数:2.00)_4.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,该工程中含有一个源程序文件pmj2cpp,其中定义了 CharShape类、Triangle 类和 Rectangle类。 CharShape 是一个抽象基类,它表示由字符组成的图形(简称字符图形),纯虚函数 Show用于显示不同字符图形的相同操作接口。Triangle和 Re
7、ctangle是 CharShape的派生类,它们分别用于表示字符三角形和字符矩形,并且都定义了成员函数 Show,用于实现各自的显示操作。程序的正确输出结果应为: * * * * # # # 请阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码并删除横线。 (1)将 Triangle类的成员函数 Show补充完整,使字符三角形的显示符合输出结果。 (2)将Rectangle类的成员函数 Show补充完整,使字符矩形的显示符合输出结果。 (3)为类外函数 fun添加合适的形参。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。/proj
8、2cpp#includeiostreamusing namespace std;class CharShapepublic: CharShape(char ch):一 ch(ch); virtual void Show()=0;protected: char ch;组成图形的字符 ; class Triangle:public CharShape public: Triangle(char ch,int r):CharShape(ch),一 rows(r) void Show();private: int rows;行数 ; class Rectangle:publ ic CharShape
9、public: Rectangle(char ch,int r,int c):CharShape(ch),_rows(r),_cols(c) voio Show();private: int rows,cols;行数和列数 ; void Triangle:Show() 输出字符组成的三角形 for(int i=1;i= rows;i+)*found*for(int j=1;j=_;j+) cout ch; coutendl; void Rectangle:Show() 输出字符组成的矩形 *found*for(int i=1;i=_;i+ *found* for(int j=1;j=_;j+)
10、 cout ch;coutendl; *found* 为 fun函数添加形参 VOid fun(_)CSShow();)int main()Triangle tri(*,4);Rectangle rect(#,3,8);fun(tri);fun(rect);return 0;(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)5.请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 proj3,其中声明 IntSet是一个用于表示正整数集合的类。IntSet 的成员函数 Intersection的功能是求当前集合与另一个集合的交集。请完成成员函数 Intersecti
11、on。在 main函数中给出了一组测试数据,此时程序的输出应该是: 求交集前: 1 2 3 5 8 10 2 8 9 11 30 56 67 求交集后: 1 2 3 5 8 10 2 8 9 11 30 56 67 2 8 要求: 补充编制的内容写在“*333*”与“*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 outdat 中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。/Intseth#includeiostreamusing namespace std;const int Max=100;ClaSS IntSetpublic:
12、 IntSet()构造一个空集合 end=一 1; IntSet(int a,int size)构造一个包含数组 a中 size个元素的集合 if(Size=Max) end=Max 一 1; else end=Size一 1; for(int i=0;i=end;i+) elementi=ai; bool IsMemberOf(int a)判断 a是否为集合中的一个元素 for(int i=0;i=end;i+) if(elementi=a) return true; return false; int GetEnd()return end;返回最后一个元素的下标 int GetElemen
13、t(int i)return elementi;)返回下标为 i的元素 IntSet Intersection(IntSetset);求当前集合与集合 set的交 void Print()输出集合中的所有元素 for(int i=0;i=end;i+) if(i+1)20=0) coutelementiendl; else coutelementi; coutend1; private: int elementMax; int end; ; VOid writeToFile(const char*); maincpp #include”IntSeth” IntSet IntSet:Inters
14、ection(IntSet set) int aMax,size=0; /*333* *666* return IntSet(a,size); int main() int a=1,2,3,5,8,i0; int b=2,8,9,11,30,5 6,67); IntSet setl(a,6),set2(b,7),set3; cout”求交集前:”endl; set1Print(); set2Print(); set3Print(); set3=setlIntersection(set2); coutendl”求交集后:”end1; set1Print(); set2Print(); set3P
15、rint(); wtiteToFile(”); return 0; (分数:2.00)_国家二级 C+机试(操作题)模拟试卷 334答案解析(总分:10.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 pmj1,此工程包含一个源程序文件proj1epp。文件中将表示数组元素个数的常量 Size定义为 4,并用 int类型对类模板进行了实例化。文件中位于每个注释“ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 注意:模板参数名用 T。只修改注释
16、“ERROR*found*”的下一行语句,不要改动程序中的其他内容。proj1cpp#includeiostreamusing namespace std;将数组元素个数 Size定义为 4ERROR*found*const int Size;templatetypename Tclass MyClasspublic: MyClass(T*P) for(int i=0;iSize;i+) arrayi=pi; void Print();private: T arraySize; ; templatetypename T ERROR*found* void MyClass:Print() for
17、(int i=0;iSize;i+) coutarrayit; int main() int intArraySize=1,2,3,4; ERROR*found* MyClassdoubleobj(intArray); objPrint(); coutendl; return 0; (分数:2.00)_正确答案:(正确答案:(1)const int Size=4; (2)void MyClassT:Print() (3)MyClassintobj(intArray);)解析:解析:(1)主要考查考生对 const变量的掌握,因为 const变量不能修改,所以在定义的同时必须初始化。 (2)主要
18、考查考生对模板类的成员函数定义的掌握,因为 MyClass类是模板类,所以在定义该函数时要加上模板标识符“T”,即语句 void MyClassT:Print()。 (3)主要考查考生对模板类构造函数的调用的理解,从上一条语句 int intArraySize=1,2,3,4;中可以知道 intArray为 int型,因此定义 obj时要使用int,即 MyClassintobj(intArray);。2.请使用 VC6或使用【答题】菜单打开考生文件夹 projl下的工程 projl,此工程中含有一个源程序文件projlcpp。其中位于每个注释“ERROR*found*”之后的一行语句存在错误
19、。请改正这些错误,使程序的输出结果为: Constructor called The value is 10 Max number is 20 Destructor called 注意:只能修改注释“ERROR*found*”的下一行语句,不要改动程序中的其他内容。projlcpp#includeiostreamUSing namespace std;class MyClasspublic:ERROR*found* void MyClass(int i) value=i;cout”Constructorcalled”endl; int Max(int X,int Y)return xY?x:y
20、;)求两个整数的最大值ERROR*found* in=Max(int x,int Y, nt Z=0)求三个整数的最大值 if(xy) return XZ?x:Z; else return yZ?Y:z; int GetValue()constreturn value; 一 MyClass()cout”Destructorcalled”endl;)Frivate: int value; ; int main() MyClass obj(10);ERROR*found* cout”The value is”value()endl; cout”Max number is”objMax(10,20)
21、endl; return 0; (分数:2.00)_正确答案:(正确答案:(1)MyClass(int i) (2)int Max(int x,int y,int Z) (3)coutY?x:y;中两个形参变量都是 int型,而语句 int Max(int x,int y,int z=0)的前两个形参也都是 int型,第三个形参定义默认值,那么这两个 Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把 int z=0改为 int z,才能构成函数重载。 (3)主要考查成员函数的调用,因为 value是私有成员,所以不能被类外函数直接调用,而且 v
22、alue()的用法也是错误的,可以使用成员函数objGetValue()得到 value的值。二、简单应用题(总题数:2,分数:4.00)3.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,该工程中包含一个程序文件maincpp,其中有坐标点类 point、线段类 Line和三角形类 Triangle的定义,还有 main函数的定义。程序中两点间距离的计算是按公式 实现的,三角形面积的计算是按公式 实现的,其中 (分数:2.00)_正确答案:(正确答案:(1)const Point class Rectangle:publ ic CharShape public
23、: Rectangle(char ch,int r,int c):CharShape(ch),_rows(r),_cols(c) voio Show();private: int rows,cols;行数和列数 ; void Triangle:Show() 输出字符组成的三角形 for(int i=1;i= rows;i+)*found*for(int j=1;j=_;j+) cout ch; coutendl; void Rectangle:Show() 输出字符组成的矩形 *found*for(int i=1;i=_;i+ *found* for(int j=1;j=_;j+) cout
24、ch;coutendl; *found* 为 fun函数添加形参 VOid fun(_)CSShow();)int main()Triangle tri(*,4);Rectangle rect(#,3,8);fun(tri);fun(rect);return 0;(分数:2.00)_正确答案:(正确答案:(1)i*2 一 1 (2)_rows (3)_cols (4)CharShape for(int i=0;i=end;i+) elementi=ai; bool IsMemberOf(int a)判断 a是否为集合中的一个元素 for(int i=0;i=end;i+) if(element
25、i=a) return true; return false; int GetEnd()return end;返回最后一个元素的下标 int GetElement(int i)return elementi;)返回下标为 i的元素 IntSet Intersection(IntSetset);求当前集合与集合 set的交 void Print()输出集合中的所有元素 for(int i=0;i=end;i+) if(i+1)20=0) coutelementiendl; else coutelementi; coutend1; private: int elementMax; int end;
26、 ; VOid writeToFile(const char*); maincpp #include”IntSeth” IntSet IntSet:Intersection(IntSet set) int aMax,size=0; /*333* *666* return IntSet(a,size); int main() int a=1,2,3,5,8,i0; int b=2,8,9,11,30,5 6,67); IntSet setl(a,6),set2(b,7),set3; cout”求交集前:”endl; set1Print(); set2Print(); set3Print(); s
27、et3=setlIntersection(set2); coutendl”求交集后:”end1; set1Print(); set2Print(); set3Print(); wtiteToFile(”); return 0; (分数:2.00)_正确答案:(正确答案:for(int i=0;i=setGetEnd();i+ +) 遍对象 set数组 if (IsMemberOf(setGetElement (i) 判断对象 set数组第 i个值是不是集合中的值,如果是则把它插入到 a中 asize+ =setGetElement (i);)解析:解析:主要考查考生对数组的掌握,根据 IntSet类的构造函数: IntSet(int a,int size) 构造一个包含数组 a中 size个元素的集合 if(size=Max) end=Max 一 1; else end=size 一 1; for(int i=0;i=end;i+) elementi=ai; 可知数组 element用来装载集合,end 表示数组长度,因此调用函数 IsMemberOf来判断 set中的元素是否存在于集合中,如果存在则放入数组 a中。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1