1、国家二级 C+机试(操作题)模拟试卷 3及答案与解析 一、基本操作题 1 使用 VC+6 0打开考生文件夹下的源程序文件 1 cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出为 10 TC1 注意:不要改动 main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在 * * * * * * * * error* * * * * * * *的下面。 试题程序: #include(iostream) class TC1 public: TC1() * * * * * * * * error* * * * * * * * private: virtual TC1() using
2、namespace std; cout void func(int d, int num) int main() int Data=2, 15, 6, -3, 8, -11, 9, 24, 50); func(Data, 9); for(int i=0; i(sizeof(Data) sizeof(int); i+) cout class CRect private: *1* public: *2* *3* void SetPoints(double, double, double, double); void SetLeftPoint(double m)1eftPoint=m; void S
3、etRightPoint(double m)rightPoint=m; ) void SetTopPoint(double m)topPoint=m; void SetBottomPoint(double m)bottomPoint=m; void Display(); ; CRect: CRect(double 1, double t, double r, double b) leftPoint=1; topPoint=t; rightPoint=r; bottomPoint=b; void CRect: SetPoints(double 1, double t, double r, dou
4、ble b) leftPoint=1; topPoint=t; rightPoint=r; bottomPoint=b; void CRect: Display() cout“left-top point is(“1eftPoint“, “topPoint “)“ n; cout“right-bottom point is(“rightPoint“, “ bottomPoint“)“ n; void main() CRect rectO; rect0 Display(); rect0 SetPoints(20, 20 6, 30, 40); rect0 Display(); CRect rec
5、t1(O, 0, 150, 150); rect1 SetTopPoint(10 5); rect1 SetLeftPoint(10 5); *4* rect2 Display(); 国家二级 C+机试(操作题)模拟试卷 3答案与解析 一、基本操作题 1 【正确答案】 (1)删除 “private: ”语句。 (2)应改为 “TC2(int i)”。 (3)应改为 “std: coutm_istd: end1; ”。 【试题解析】 本题中第 1处的 “virtualTC1()”语句是 TC1析构函数,不是私有函数,所以删除 “private: ”。 “explicit TC2(int i)”构
6、造函数语句中的 “explicit”是禁止隐式转 换。程序中无法实现对类 TC2的直接使用,所以这里应该将其删除。即“TC2(int i)”o在第 3处实现 fun函数中 m_i的标准输出,即在屏幕上输出 10。在程序中用到 C+标准库时,要使用 std标准命名空间进行限定。 cout为标准库函数,所以要声明 cout是在命名空间 std中定义的流对象,即 “std: coutm istd: end1; ”或者添加 “using namespace std; ”。 二、简单应用题 2 【正确答案】 for(int i=0; i(num; i+) if(di 2 !=o) di=2*di; 【试
7、题解析】 由审题分析可知,利用循环来逐个判断 d中的元素, d中元素个数为 num,因此循环变量从 0变化至 num。在循环内,用 if语句判断该元素是不是奇数,即 if(di 2 !=0),将满足条件的 di扩大一倍。 三、综合应用题 3 【正确答案】 (1)应添加 “double leftPoint, topPoint, rightPoint,bottomPoint; ”。 (2)应添加 “CRect(double leftPoint=0, double topPoint=0, double rightPoint=0,double bottomPoint=0); ”。 (3)应添加 “CR
8、ect()”。 (4)应添加 “CRec reet2(rect1); ”。 【试题解析】 本题在第 1处完成私有数据成员 leftPoint、 topPoint、 rightPoint、bottomPoint的定义,均为 double型的变量,故第 1处应添加 “double leftPoint,topPoint, rightPoint, bottomPoint; ”。 构造函数完成成员变量的初始化,类 CRect的默认构造函数初始化 double型私有数据成员 leftPoint、 topPoint、 rightPoint、 bottomPoint为 0,故第 2处应添加“CRect(double leftPoint=0, double topPoint=0, double rightPoint=0, double bottomPoint=0); ”。 析构函数名和类名一致,并在前面加 “ ”以和构造函数区别,该析构函数体为空,故第 3处应添加 “CRect()”,虽然该 函数体为空,但 “”必须保留。主函数中类 CRect的对象 rect2是通过复制构造函数将 rect1的值赋值给它实现初始化的,而 rect1的初始化直接调用自定义构造函数,第 4处应添加 “CRect rect2(rect1); ”。