1、国家二级 C+机试(操作题)模拟试卷 17及答案与解析 一、基本操作题 1 使用 VC+6 0打开考生文件夹下的源程序文件 1 cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在屏幕输出以下类似内容: 0012FF68 1 OOl2FF3C 5 0012FF6C 2 0012FF44 4 0012FFT0 3 0012FF4C 3 0023FF74 4 0012FF54 2 0012FF78 5 0012FF5C 1 006AFDCC 006AFDEF数据可能因为机器的不同,程序输出的内容会有差异。只要相差为 4的连续地址即可。 注意:不要改动 main函数,不能增加或删除
2、行,也不能更改程序的结构,错误的语句在 *error*的下面。 试题程序: #include using namespace std; int main() int*p, a5=1, 2, 3, 4, 5; double*q, b5=5 0, 4 0, 3 0, 2 0, 1 0; int x; P=a: q=b; *error* for(x=0; x #include #define PI 3 1415926 class CMyPoint public: int x, y; CMyPoint(int tx, int ty): x(tx), y(ty) ; class CMyShape pub
3、lic: CMyShape()coutGetGirth ()()=0”,由程序后面的函数体实现可知求面积纯虚函数的函数名称为 GetArea,因此第 1处应添加 “virtual double GetArea()=0; ”。声明 格式和 1)相同,由求周长的函数具体实现可知该函数的名称为 GetGirth,因此第 2处应添加 “virtual double GetGirth()=0; ”。 主函数中定义了 CMyShaPe类对象指针 myShape, CCircle类对象指针myCircle, CRectangle类对象指针 myRectangle。由类继承关系知,在调用子类的构造函数时,编译
4、器会自动调用父类的默认构造函数来初始化父类,因此在实例化类 CRectangle和类 CCircle的实例时,抽象父类 CMyShape的默认构造函数会先被调用 ,因此在屏幕上先输出 “在 CMyShape类构造函数内 ”,然后输出 “在CCircle类构造函数内 ”,实例化 CRectangle对象的过程也是如此。同时由纯虚函数的性质知抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但通过周子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数, myShape是基类指针,其虚函数 GetArea和GetGirth没有实现,要求程序输出的面积值和周长值,只可能是 myShape指向子类对象,调用子类的函数 GetArea和 GetGirth打 印输出,显然在第 3处是myShape指向子类 CCirele对象,即 “myShape=myCircle; ”。同理第 4处myShape指向子类 CRectangle对象,即第 4处应添加“myShape=myRectangle; ”。