1、国家二级 C+机试(操作题)模拟试卷 285及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,此工程包含一个源程序文件 proj1 cpp。其中位于每个注释 “ ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: You are right 注意:只修改注释 “ ERROR *found*”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include iostream using namespace std; class MyClass public: MyClass(int
2、 x): number(x) ERROR *found* MyClass(int x) ERROR *found* void Judge(MyClass &obj); private: int number; ; void Judge(MyClass &obj) if(obj number 10) cout “You are right “ end1; else cout “Sorry“ end1; int main() ERROR *found* MyClass obj ect; Judge(object); return 0; 二、简单应用题 2 请使用 VC6或使用【答题】菜单打开考生文
3、件夹 proj2下的工程 proj2,此工程中包含一个头文件 shape h,其中包含了类 Shape、 Point和 Triangle的声明;包含程序文件 shape cpp,其中包含了类 Triangle的成员函数和其他函数的定义;还包含程序文件 proj2 cpp,其中包含测试类 Shape、 Point和 Triangle的程序语句。请在程序中的横线处填写适当的代码并删除横线,以实现上述功能。此程序的正确输出结果应为: 此图形是一个抽象图形,周长 0,面积 0 此图形是一个三角形,周长 6 82843,面积 2 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移
4、动 “ *found*”。 shape h class Shape public: virtual double perimeter() const return 0; 返回形状的周长 virtual double area()constreturn 0; 返回形状的面积 virtual const char * name() const return“抽象图形 “)返回形状的名称 ; class Point表示平面坐标系中 的点的类 double x; double y; public: *found* Point(double x0, double y0): _用 x0、 y0初始化数据成
5、员 x、 y double getX () constreturn x, double gety () constreturn y; ; class Triangle: public Shape *found*_; 定义 3个私有数据成员 public: Triangle(Point p1, Point p2, Point p3): pointl(p1), point2 (p2), point3(p3) double perimeter()cons t; double area()const; const char *name()constreturn“三角形 “; ; shape cpp #
6、include“shape h“ #include cmath double length(Point p1, Point p2) return sqrt(p1 getX() p2 getX() * (p1 getX() p2 getX() (p1 getY()p2 getY() * (p1 getY() p2 getY(); double Triangle perimeter ()const 一个 return语句,它利用 length函数计算并返回三角形的周长 *found* _; double Triangle area()const double s perimeter() 2 0;
7、return sqrt(s * (s length (point1, point2)* (s length(point2, point3)* (s length(point3, point1); proj2 cpp #include“shape h“ #include iostream using namespace std; *found* _ show函数的函数头 (函数体以前的部分 ) cout “此图形是一个 “ shape name() “,周长 “ shape perimeter() “,面积 “ shape area() end1; int main() Shape s; Tri
8、angle tri(Point(0, 2), Point(2, 0), Point(0, 0); show(s); show(tri); return 0; 三、综合应用题 3 请使用【答题】菜单命令或直接用 VC6打开考生文件夹下的工程 proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在 main函数中给出了一组测试数据,此种情况下程序的输出应该是: Zhang 20 Tsinghua。 注意:只能在函数 address_change的 “ *333*”和“*666*”之间填入若干语句,不要改动程序中的其他内容。 程序最后将结果输出到文件 out dat中。输出函数 wr
9、iteToFile已经编译为 obj文件,并且在本程序中调用。 proj3 h #include iostream #include string using namespace std; class Person char name20; int age; char * address; public: Person() age 0; address 0; void name_change(char * _name); 名字修改函数 void age_change(int_age); 年龄修改函数 void address_change(char*_ add); 地址修改函数 void in
10、fo display(); 人员信息显示 Person(); 析构函数 ; void wrriteToFile(const char * path); proj3 cpp #include iostream #include string #include“proj3 h“ using namespace std; void Person name change(char * _name 1 strcpy(name, name); void PeEson age_change(int_age) age _age; void PeEson address_change (char *_add)
11、if(address! NULL)deleteaddress; *333* *666* void Person info_display() cout name t age t; if(address! NULL) cout address end1; tout end1; Person PeEson() if(address! NULL) deleteaddress; void main() PeEson p1; p1 name_change(“Zhang“); p1 age_change(20); p1 address_change(“Tsinghua University“); p1 a
12、ddress change(“Tsinghua“); p1 info display(); writeToFile(“); 国家二级 C+机试(操作题)模拟试卷 285答案与解析 一、基本操作题 1 【正确答案】 (1) MyClass() (2)friend void Judge(MyClass &obj); (3)MyClass object(10); 【试题解析】 (1)主要考查考生对析构函数 的掌握,析构函数是没有形参的,因此把形参去掉即可,因为该类没有动态分配空间,所以不需要使用 delete语句释放空间。 (2)主要考查考生对友元函数的掌握,在函数定义中有语句 void Judge
13、(MyClass&obj),在 main函数中有语句 Judge(object);,即 Judge函数是可以被类外函数调用的,并且定义时没有加上类名和作用域,因此可以知道 Judge函数是友元函数,需要在类型前加上 friend。 (3)主要考查考生对构造函数调用的掌握,题目要求输出结果为: You are right,在 Judge函数体内有语句: if(obj number 10) cout “You are right “ end1; 要想使屏幕输出语句: You are right,就必须使 obj number的值为 10,因此要使用构造函数语句 MyClass object(10)
14、;。 二、简单应用题 2 【正确答案】 (1)x(x0), Y(y0) (2)Point point1, point2, point3 (3)return length(point1, point2) length(point1, point3) length(point2, point3) (4)void show(Shape&shape) 【试题解析】 (1)主要考查考生对构造函数的掌握,题目要求用 x0、 y0初始化数据成员 x、 y,因此在这里使用成员列表初始化,即 Point(double x0, double y0):x(x0), y(yo)。 (2)主要考查考生对构造函数的掌握,
15、题目要求定义 3个私有数据成员。由构造函数可知 3个私有数据成员的类型都是 Point,名称分别为 point1、 point2和point3,因此空格处填写: Point point1, point2, point3。 (3)主要考查:考生对成员函数的掌握,题目要求使用 return语句,利用 length函数计算并返回三角形的周长。 length函数返回的是两点间的距离,因此 return语句只要返回三角形三条边的距离和,即为三角形的周长。 (4)主要考查考生对成员函数的掌握,这里要定义 show函数的函数头 (函数体以前的部分 )。由主函数 main中 show函数的使用情况 show(
16、s)和 show(tri)可知 , s是Shape类, tri是 Triangle类,因为 Triangle是 Shape类的派生类,所以可知 show函数的参数是 Shape类型,无返回值,得出语句 void show (Shape&shape)。 三、综合应用题 3 【正确答案】 address new charstrlen(_add) 1; 给类成员变量动态分配空间 strcpy(address, _add);把字符 _add复制给 address 【试题解析】 函数 address_change(char*_add)的功 能是地址修改,也就是说通过该函数把类的地址修改为 add字符串。类的私有成员 address是字符指针,因此首先要给 address分配空间,通过 new语句来实现: addressnewcharstrlen(_add) 1;。接下来就是要复制字符串,使用系统函数 strcpy,其用法为 strcpy(参数 1,参数 2),将参数 2的内容复制到参数 1中。