1、国家二级 C+机试(操作题)模拟试卷 65及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为: Hello Visual C+! Hello Visual C+! 注意:错误的语句在 *error*的下面,修改该语句即可。 1 #include 2 class CMyObj ect 3 4 public: 5 CMyObj ect() 6 7 *error* 8 cout 2 #include 3 int convert(char*strOct) 4 5 6 7 int ma
2、in () 8 9 cout 2 class TestClasSl 3 f 4 int a ; 5 public: 6 *1* 7 8 9 return a=x; 10 11 void showa() 12 13 coutaendl; 14 15 ; 16 Class TestClass2 17 18 int b ; 19 public: 20 void Setb(int x) 21 22 b=x ; 23 24 void showb() 25 26 coutbendl ; 27 28 ; 29 *2* 30 31 32 private: 33 *3* 34 35 public: 36 voi
3、d setc(int X, int Y, int Z) 37 38 c=z; 39 *4* 40 41 setb(y); 42 43 void showc() 44 45 coutCendl; 4 6 47 ; 48 void mein() 49 50 TestClass3 C ; 51 C seta(5); 52 C showa(); 53 C setC(5, 7, 4); 54 C showc(); 55 国家二级 C+机试(操作题)模拟试卷 65答案与解析 一、基本操作题 1 【正确答案】 (1)cout“HelIo, “ (2)cout“Hello, (3) CMyObject() 【
4、试题解析】 程序当中定义了类 CMyObject,含有两个构造函数和一个析构函数,在构造函数内部均使用 COU输出一段字符。 解题思路 (1)由程序的运行结果可知,语句 CMyObject objl;定义 obj l对象调用默认的构造函数,此时屏幕上输出 “HelloVisual C+!”, cout流中的数据是用流插入运算符“”顺序加入的,第 1个标识下 “Hello, ”字符串插在输出流中,因此必须加双引号引用起来,即第 1个标识下应该为 “cout“Hello, “”。 (2)第 2个标识下 “ n”表示换行,与要求的输出结果不同,因此第 2个标识下应改为 “cout”Hello ”。
5、(3)析构函数是一个特殊的函数,其函数名与类名相同,并在其名加 “ ”,用来与构造函数加以区 别,因此第 3个标识下应改为 “ CMyObject()”。 二、简单应用题 2 【正确答案】 1 int re=0 ; 2 while (*stroct) 3 4 re=re*8+(*Stroct) - 0; 5 StrOct+; 6 7 return re ; 【试题解析】 函数 convert(char*stroct)的功能是将八进制转换为十进制,将八进制转换成十进制的方法是按权展开,即八进制数 第 0位的权值为 8的 0次方,第 1位权值为 8的 1次方,第 2位权值为 8的 2次方,依次将各
6、位数乘上其权值,然后求和即得到相应的十进制数。 解题思路 (1)定义整型变量变量 re, re记录求得的 10进制数。 (2)convert(char*strOct)的输入参数为字符指针,而不是整形数据指针,因此需要将 ASCII码转换成相应的数字量,即 (*strOct)-0。 (3)按权展开可采用循环迭代的方法,如: (123)8=(18)+2)8+3,即迭代过程为上一次运算得到的结果再乘 以 8加现在的元素值,即 re=re*8+(*strOct)-0。 三、综合应用题 3 【正确答案】 (1)添加语句: int seta(int x) (2)添加语句: class TestClass3
7、: public Testclassl, private TestClass2 (3)添加语句: int c ; (4)添加语句: seta(x); 【试题解析】 本题的功能是利用类中的成员函数设置数值,并将其输出。在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释 下的内容逐个补全或修改。从已定源程序的 main主函数开始入手,可以看出程序通过调用类TestClass实现各种输出操作。 解题思路 (1)题目 l要求 “完成类 TestClassl的成员函数 seta定义,定义 seta对象 x为 int类型 ”。类的成员函数是函数的一种,它与一般函数的区别只是,它是一个类的
8、成员,出现在类体中。所以类 TestClassl中的成员函数,就是在 TestClassl中定义题目中要求的参数为 int x的 seta函数,即 “int seta(int x)”。 (2)题目 2要求 “完成类 TestClassl(公有 )和类 TestClass2(私有 )派生类 TestClass3的定义 ”。从已有的类产生一个新的子类,称为类的派生。声明派生类的一般形式为: class派生类名: 继承方式 基类名。根据声明派生类的一般形式,这里补全“classTestClass3: public TestClassl, privateTestClass2”。 (3)题目 3要求 “定义类 TestClass3中的私有成员 c为 int”。在类 TestClass3中的private数据成员区域,定义 int c,即在 第 3个标识下补全 “int c; ”。 (4)题目 4要求 “完成 setc中对基类的变量 a的赋值 ”。基类为 TestClassl, setc对于该类 a的赋值,是 int seta(int x)函数的赋值,即 “seta(x); ”