1、国家二级 C+机试(操作题)模拟试卷 4及答案与解析 一、基本操作题 1 使用 VC+6 0打开考生文件夹下的源程序文件 1 cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行,并且使程序输出的结果为 OK 注意:错误的语句在 *error*的下面,修改该语句即可。 试题程序: #include class TC public: TC() a=b=0: private: int a, b; ; class TC1: public TC public: TC1() *error* virtual void func(); ; class TC2: public TC1 public:
2、TC2() a=0; b=0; void func() *error* coutrune(); 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 2 cpp。阅读下列函数说明和代码,补充空出的代码。函数 sum(int n)返回 1, 2, 3, , n的和。其中 n大于 0。 程序要求使用递归实现上述功能。 注意:不能修改程序的其他部分,只能补充 sum函数。 试题程序: #include #include(cmath) int sum(int n) void main() tout #include #include #include using namespace std;
3、void WriteFile(int c) ofstream out1; out1 open(“3 txt“, ios_base: app); out1)=0”,因此第 1处的语句应为 “virtual void func()=0; ”。 func函数没有参数表。编译程序后发现第 2处的语句有错误, cout流中的数据是用流插入运算符 “”顺序加入的,因此 “”不正确,应改成“cout“OK“end1; ”。函数的调用方式有 2种:非多态调用和多态调用,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用。在主函数中定义了 TC1*p, p是指向基类 TC1的指针,
4、因此是多态调用方式,即通过对象的指针来调用,应该把派生类对象的地址赋给 p,而不是对象名,因此第 3处的语句应改为 “TC1*p=(TC1*)&obj; ”。 二、简单应用题 2 【正确答案】 return(n=1)?1: n+sum(n-1); 【试题解析】 本题主要考查三目运算符 ?:的使用和递归函数的编制 。程序功能是计算前 n个自然数的和, n为参数。程序的运算过程如下,不是一般性,假设 n为 3,首先执行 sum(3),因为 3不等于 1,所以 return语句返回的值为 3+sum(3-1),然后执行 sum(3-1)即 sum(2), 2不等于 1,所以 return语句返回的值
5、为2+sum(2-1),然后执行 sum(2-1)即 sum(1),因为 1等于 1,所以 return语句返回的值为 1,即问号后的值,所以最终结果为 3+2+1=6,而题中 n为 100,所以结果为 5050。 三、综合应用题 3 【正确答案】 (1)应添加 “year=y; month=m; day=d; ”。 (2)应添加 “Date & operator+=(int m)”。 (3)应添加 “int year, month, day; ”。 (4)应添加 “coutyear“年 “month“月 “day“日 “end1; ”。 【试题解析】 本题中第 3处要求 “定义私有成员变量
6、year、 month、 day”。在C+程序的 private区域中添加变量 year、 month、 day的定义,即在第 3处添加“int year, month, day; ”。 第 1处要求 “完成构造函数,分别给 year、 month、 day赋值 ”。在程序中“Date(int y, int m, int d)”的构造函数中添加给 year、 month、 day赋值的语句,即在第 1处添加 “year=y; month=m; day=d; ”。第 2处要求 “完成重载符号 +=的定义 ”。在 C+中,运算符重载的定义方法是定义一个重载运算符的函数,格式为函数 operator+重载运算符号 +,所以这里补全 “Date&operator+=(int m)”。 第 4处要求 “完成函数 print()打印函数 ”。在 C+中的 print函数中补全其打印功能,即在第四个标识下添加 “coutyear“年 “month“月 “day“日“end1; ”。