1、国家二级 C+机试(操作题)模拟试卷 322及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序的执行结果为: 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 注意:错误的语句在 *error*的下面,修改该语句即可。 #include #include Void main() int i, j, k; for(i=5; i=1; i-) *error* for(j=1; j=i; k+) cout0; k+) cout #define M
2、AXLINE 1000 Void fun(char*s1, char*s2) Void main() char s1MAXLINE; char s2256; cout #include #define PI 3 1415926 class CMyPoint public: int x, y; CMyPoint(int tx, int ty): x(tx), y(ty) ); class CMyShape public: CMyShape()coutGetArea() GetGirth()GetArea() GetGirth()0; k-) 【试题解析】 (1)分析可知,两个循环负责输出两半数值
3、,刚开始还有空 格,而且空格书逐行增加,因此也必须用循环来实现输出空格,即内层第一个小循环负责输出空格,因此 for(j=1; j=i; k+)应改为 for(k=1: k0; k+)应改为 for(k=i-1;k0; k-)。 二、简单应用题 2 【正确答案】 int i=0; for(i=0; s1i!=0; i+); 指向第一个串尾 for(int j=0; s2j!=0; j+)利用循环将第二个串拷贝到第一个串尾 s1i+=s2j; s1i=0; 加尾符 【试题解析】 (1)首先利用循环指向第一个串尾。 (2)然后利用 for循环将第二个串连接到第 一个串尾。 (3)最后在新生成的串尾
4、加尾符号。 三、综合应用题 3 【正确答案】 (1)添加语句: virtual double GetArea()=0; (2)添加语句: virtual double GetGirth()=0; (3)添加语句: myShape=mycircle; (4)添加语句: myshape=myRectangle; 【试题解析】 (1)第 1个标识下声明纯虚函数,纯虚函数的定义格式为: virtual()=0,由程序 后面的函数体实现可知求面积纯虚函数的函数名为 GetArea0,因此第 1个标识下应添加 “virtual double GetArea0=0; ”。 (2)声明格式和 (1)相同,由求
5、周长的函数具体实现可知该函数的名为GetGirth0,因此第 2个标识下应添加 “virtual double GetGirth()=0; ” (3)主函数中定义了 CMyShape类对象指针 myShape, CMyCircle类对象指针myCircle, CMyRectangle类对象指针 myRectangle,由类继承关系知, 在调用子类的构造函数的时候,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类 CMyRectangle和类 CMyCircle的实例的时候,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出 “在 CMyShape类构函数造内 ”
6、,然后输出 “在 CMyCircle类构造函数内 ”,实例化 CMyRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但是通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访 问子类的成员函数, myShape是基类指针,其虚函数 GetArea0和 GetGirth()没有实现,要求程序输出面积值和周长值,只可能是 myShape指向子类对象,调用子类的函数 GetArea()和 GetGirth()打印输出,显然第 3个标识下是 myShape指向子类 CM: yCircle对象,即myShape=myCircle;。 (4)同理第 4个标识下 myShape指向子类 CMyRectangle对象,即第 4个标识下应添加 “myShape=myRectangle; ”。