1、国家二级 C+机试(操作题)模拟试卷 10及答案与解析 一、基本操作题 1 使用 VC+6 0打开考生文件夹下的源程序文件 1 cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为 TC1 TC2 注意:不要改动 main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在 *error*的下面。 试题程序: #include #include struct TC0 *error* virtual void fun(); ; class TC1: public TC0 void fun() cout #include(cmath) using namespac
2、e std; void WriteFite(char*s) void fun(char*s) void ClearFile() ofstream out1; out1 open(“2 txt“); out1 close(); int main() ClearFile(); char s102; cout class Date public: *1* Date(int Y, int m, int d) *2* void print()const; private: data member *3* ; void Date: print()const *4* int main() Date Olym
3、pic_BJ(2008, 8, 8); Olympic_BJ print(); return 0; 国家二级 C+机试(操作题)模拟试卷 10答案与解析 一、基本操作题 1 【正确答案】 (1)应改为 “virtual void fun()=0; ”。 (2)应改为 “p=&obj1; ”。 (3)应改为 “p=&obj2; ”。 【试题解析】 如果在基类中不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数 fun应该是纯虚函数,也就是声明虚函数时初始化为 0的函数。即第 1处的 “virtual void fun()=0; 99。第 2处的 P为指针变量,将对象 o
4、bj1赋值给 p,实际上是 P指向对象 obj1的地址,所以将 “p=*obj1; ”修改为 “p=&obj1; ”。第 3处的 “p=*obj2; ”修改为 “p=&obj2; ”。 二、简单应用题 2 【正确答案】 (1)void WriteFile(char*s)中的命令语句: ofstream out1; out1 open(“2 txt“, ios_base: binary ios_base: app);打开文件 2 txt out1s; 写入字符串 s out1 close(); (2)void fun(char*s)中的命令语句: for(int i=0; si!=0; i+)
5、循环判断每一个字符 if(si)=A&si(=Z) 如果是大写字符,则转换为小写字符 si=si-A+a; si-A+a等于字符 si+32 else if(si)=a &si(=z) 如果是小写字符,则转换为大写字符 si=si-a+A; si-a+A等于字符 si-32 writeFile(s): 【试题解析】 在 WriteFile(char*s)函数中,利用标准流 ofstream实现字符串写入文件 2 txt。在 fun函数中,利用 for循环逐个判断字符是大写还是小写。如果是大写,那么加上 32实现大 -g转换为小写。否则就减去 32,实现小写到大写的转换。最后调用前面实现的 Wr
6、iteFile函数,将字符串写入文件。 三、综合应用题 3 【正确答案】 (1)应添加 “Date()year=1; month=1; day=1; ”或 “Date():year(1), month(1), day(1)”。 (2)应添加 “year=y; month=m; day=d; ”。 (3)应添加 “int year, month, day; ”。 (4)应添加 “coutyear“-“month“-“dayend1;或 tout(year-month-dayend1; ”。 【试题解析】 本题考查了类的定义。根据题意,此处应定义 3个 int型数据成员year、 month和 day。根据题意,第 2处应添加默认构造函数,并初始化 3个变量,这里既可以使用赋值语句来实现,也可以使用初始化列表。第 3处只能通过赋值语句初始化 3个成员,因为注释 3位于函数中,无法在此处使用初始化列表。添加输出语句,注意题目头包含的头文件是 iostream h,不能添加 std:前缀。