1、国家二级 C+机试(操作题)模拟试卷 491及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,其中:有点类 Point和线段类 Line和主函数 main的定义,程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出应为: p1=(8, 4)p2=(3, 5) 注意:只修改两个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #inclucle iostream #include cmath using namespace std; class Point double x, y; public: P
2、oint(double x=0 0, double y=0 0) ERROR*found* x=x; y=y; double getX( )constreturn x; double getY( )constreturn y; ERROR*found* void show( )constcout ( x , y ) ; class Line Point; p1, p2; public: Line(Point; pt1, Pointpt2) ERROR*found* pt1=p1; pt2=p2; Point getP1( )constreturnp1; Point getP2( )constr
3、eturnp2; ; int main( ) Line line(Point: (8, 4), Point(3, 5); cout “p1=“; line getP1( ) show( ); cout “p2=“; line getP2( ) show( ); tout endl; return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 proj2,该工程中包含程序文件main cpp,其中有类 Mammal(“哺乳动物 ”)、类 Elephant(“大象 ”)、类 Mouse(“老鼠 ”)的定义和主函数 main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程
4、序的正确输出结果应为: ELEPHANT MOUSE 注意:只能在横线处填写适当的代码,不要改动程序 中的其他内容,也不要删除或移动 “ *found*”。 #include iostream using namespace std; enum categoryENPTY, ELEPHANT, NOUSE); char*output =“ENPTY“, “ELEPHANT“, “NOUSE“; class Marrlitlal public: Nammal(char*str) *found* name=new_ strcpy(name, str); virtual char*WhoAmI( )
5、=0; virtual Nammal( ) delete name; void Print( )cout WhoAmI( ) endl; private: char*name; ; class Elephant: public Nammal public: *found* Elephant(char*str): _ char*WhoAmI( )return outputELEPHANT; ; class Nouse: public Nammal public: Mouse(char*str): Mammal(str) *found* char*WhoAml( )_ ; int main( )
6、*found* Mammal*pm=new_(“Huanhuan“); pm- Print: ( ); delete pm; pm=newNouse(“Micky“); pm- Print( ); delete pm; return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中声明了 ValArray类,该类在内部维护一个动态分配的整型数组。 ValArray类的复制构造函数应实现对象的深层复制。请编写 ValArray类的复制构造函数。在 main函数中给出了一组测试数据,此种情况下程序的输出应该是: ValArray v1=1, 2, 3, 4, 5 ValA
7、rray v2=2, 2, 2, 2, 2 要求: 补充编制的内容写在 “ *333*”与 “ *666*”之间。不要修改程序的其他部分。 注意: 相关文件包括: main cpp、 ValArray h。 程序最后调用 writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件 out dat中。输出函数 writeToFile已经编译为 obj文件。 ValArray h #include iostream using namespace std; class ValArray int*v; int size; public: ValArray(const int*p
8、, intn): size(n) v=new intsize; for(int i=0; i Size; i+) vi=pi; ValArray(const ValArray&other); ValArray( )delete v; void setElement(int i, int val) vi=val; void print(ostream&out)const out ; for(int i=0; i size-1; i+) out vi “, “; out vsize-1 ; ; void writeToFile(const char*); main cpp #include“Val
9、Array h“ ValArray: ValArray(const ValArray&other) *333* *666* int main( ) const int a =1, 2, 3, 4, 5; ValArray v1(a, 5); ValArray v2(v1); for(int i=0; i 5; i+) v2 setElement(i, 2); cout “ValArray v1=“; v1 print(cout); cout endl; cout “ValArray v2=“; v2 print(cout); cout endl; writeToFile(“ “); retur
10、n0; 国家二级 C+机试(操作题)模拟试卷 491答案与解析 一、基本操作题 1 【正确答案】 (1): x(x), y(y)或 this- x=x, this- y=y; (2)void show( )consteout ( x , y ); (3): p1(pt1), p2(pt2)或 p1=pt1; p2=pt2 【试题解析】 (1)主要考查考生对构造函数的掌握,因为形参名和私有成员名称一样,因此不能直接赋值,在这里使用成员列表初始化,也可以使用 this指针赋值。 (2)主要考查考生对语句基本语法的掌握,根据语句: void show( )consttout ( x , y )。可看
11、出函数体内并没有 “; ”作为 tout语句的结束符,因此程序错误。 (3)主要考查考生对构造函数的掌握,形参是 pt1和 pt2,这里写反了,也可以他用成员列太表初始化法,可以避免这种错误。 二、简单应用题 2 【正确答案】 (1)charstrlen(str)+1; (2)Mammal(str) (3)return outputMOUSE; (4)Elephant 【试题解析】 (1)主要考查分配空间,程序要给 name分配空间,由下一条语句中strcpy(name, str)可知 程序要把字符串 str复制给 name,因此要分配的空间大小为 strlen(str)+1。 (2)主要考查
12、考生对构造函数的掌握,因为 Elephant类是 Mammal类的派生类,所以其构造函数要使用成员列表先对 Mammal类初始化。 (3)主要考查考生对枚举类型的掌握,先看程序: enum categoryEMPTY,ELEPHANT, MOUSE。再参考 Elephant类中的 WhoAmI函数:char*WhoAmI( )return outputELEPHANT; 。可知这里要填写的返回语句为: return outputMOUSE;。 (4)主要考查考生对派生类的掌握,题目要求输出: ELEPHANT MOUSE 可知,要先调用 Elephant类的 WhoAmI函数,因此给指针 pm
13、分配 Elephant类空间。 三、综合应用题 3 【正确答案】 size=other size;把对象数组的大小赋值给 size v=new intother size;根据对象数组的大小动态分配数组 v for(int i=0; i size; +i) vi=other vi;遍历整个对象的数组把值 other vi放到数组 v中 【试题解析】 主要考查考生对复制构造函数的掌握。由函数名: ValArray:ValArrav(const ValArray&other),知道要复制的对象是 other,对由 ValArray类的成员: int*v; int size;知道要复制的内容是动态数组 v及整型变量 size。动态数组要使用 new语句分配内存,最后利用 for循环语句来完成复制过程。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1