1、国家二级 C+机试(操作题)模拟试卷 150及答案与解析 一、基本操作题 1 请使用 ”答题 ”菜单或使用 VC6打开考生文件夹 pmjI下的工程 pmjl,程序中位于每个 ERROR*found*水下的语句行有错误,请加以更正,不得修改程序的其他部分。更正后程序的输出应该是: A Tme 注意:只能修改每个 ERROR*found*下的那一行,不要改动程序中的其他内容。 #include using namespace std; class Choice private: const char answer, public: ERROR*found* Choice(char C)answer
2、=C; ) 一 Choice() void check(char x) coutcheck(A); delete C; return 0; 二、简单应用题 2 请使用 ”答题 ”菜单或使用 VC6打开考生文件夹 proj2下的工程 proj2,本程序中有两个类:一是日期类 (Date),用于表示一天的日期 (年、月、日 );另一个是截止日期类 (Dead 1ine),用于表示一个任务的截止日期,超过该日期即为超时。Deadline类 中有 Date类的数据成员。这里对 Deadline类的数据成员和成员函数做一下说明: int id;截止日期的 id Date enddate;截止日期,表示允
3、许完成该任务的最后一天 void finish(Date date); date未超过截止日期时,输出 ”Finished!”,否则输出 ”Time out ” bool check(Date date); date未超过截止日期时返回 true,否则返回 false。 程序正确情况下输出: Finished! Time out 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动 “ *found*”。 #include using namespace std; class Date( private: int year; int month; int day of
4、month; public: Date(int Y, int m, int d) this一 year=Y; this一 month: m; this一 day Of month=d; bool operatoryearyear=dt year & this一 monthyear=dt year this一 month=dt month this一 dayofmonthid=id; void finish(Date date) if(check(date) *found* coutfinish(current time); d2一 finish(current time); delete d1
5、, delete d2; return 0; 三、综合应用题 3 请使用 “答题 ”菜单或使用 VC6打开考生文件夹 proj3下的工程 proj3,其中定义了 BaseX类 (X进制整数类 ),其中成员函数 print输出该整数指定数制的表示形式。使用展转相除法,可从低位到高位逐位求出所需要的表示形式,例如,求十制数 231的四进制表示形式,方法如下: 231 4=573 57 4=141 14 4=32 结果是: 3213 在 main函数中给出了一组测试数据,正确的输出是: 2001 注意:只需在 *333*和 *666*,之间填入所编写的若干语句,不要改动程序中的其他内容。 #incl
6、ude #include #include”BaseX h” using namespace std; BaseX: BaseX(int n)( thiS一 num=n; BaseX:一 BaseX() void BaseX: print(int x) 输出整数 num的 X进制表示形式 int arr1 00; 存放转换结果, arr0存放最低位 int index=0; 当前数组 arr中元素的个数 *333* *666* for(int i=、 index一 1; i=0; i一 ) 从高位到低位输出所需表示形式 coutarri; coutendl; int main() BaseX
7、b(12 9); b print(4); writeToFile(”C: test、 -), return 0; proj3 BaseX h class BaseX int num; public: BaseX(int n); 一 BaseX(); void print int x); ; void writeToFile(const char*path); 国家二级 C+机试(操作题)模拟试卷 150答案与解析 一、基本操作题 1 【正确答案】 (1)Choice(char c): answer(c) (2)if(answer=: x) (3)Choice*c=new Choice(A);
8、【试题解析】 主要考查类中 const成员变量的初始化,容易出错的是 =与 =运算符,以及指针的使用。 【解题思路】 (1)C+约定:初始化 eonst对象或引用类型的对象,但不能对他们赋值。在开始执行构造函数的函数体之前,必须完成初始化。初始化 const或引用类型数据成员的唯一机会是在构造函数初始化列表中。 (2)判断相等使用 =运算符,不是赋值号 “=”。 (3)new操作符返回的是一个指针,因此使用指针变量来接收。 二、简单应用题 2 【正确答案】 (1)return true (2): enddate(year, month, day-0f_month) (3)”Finshed” (
9、4)(enddate=date)?false: true 【试题解析】 主要考查类构造函数定义,初始化列表;条件运算符的使用。 【解题思路】 (1)根据题设可知比较两个日期的大小,由 if语言的判断,可知 this的日期大于date,返回真。 (2)构造函数的初始化列表,使用基类的构造函数完成子类成员的初始化。 (3)根据题意可知,没有超过 deadline,故输出 “Finshed”。 (4)检查当前日期是否超过截止时间。超过 deadline,返回 false,否则返回 true。 三、综合应用题 3 【正确答案】 while(aura) artindex+=num x; Bum =x; 【试题解析】 主要考查将一个数转化为 x进制,使用辗转相除法来处理。 【解题思路】 将一个数转化为 x进制,使用辗转相除法,将余数放在 arr数组中,对商继续使用辗转相除法来处理,直到商为 0。 最后反向输出数组中的值,即为 x进制的数。