1、国家二级 C+机试(操作题)模拟试卷 205及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1。该工程中包含程序文件 main cpp,其中有类 CDate(“日期 ”)和主函数 main的定义。程序中位于每个 “ ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 原日期: 2005-9-25 更新后的日期: 2006-4-1 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 1 #iFtC2ude 2 #iD Clude 3 usingr namespac
2、e std; 4 5 class CDate日期类 6 7 ERROR * found* 8 protected: 9 CDate(); 10 CDate(int d, int m, int y) 11 12 ERROR *found* 13 SetDate(int day=d, int month=m, int year=y); 14 ; 15 void Di splay();显示日期 16 void Set: Date(int day, int month, int year) 17 设置日期 18 m_nDay=day;m nMonth=month; mnYear=year; 19 pr
3、ivate: 20 intm_nDay;日 21 int_m nMonth;月 22 int m_nYear;年 23 ; 24 25 void CDate: Display()显示日期 26 27 ERROR *found* 28 cout 2 using namespace std; 3 class Date 日期类 4 int year,month,day;年、月、日 5 public: 6 Date(int year, int month, int day): year(year), month(month), day(day) 7 int getYear()constreturn y
4、ear; 8 int getMonth()constreturn month; 9 int getDay()constreturn day; 10 ; 11 class Person 人员类 12 char name14;姓名 13 bool is male;性别,为 true时表示男性 14 Date birth date;出生日期 15 public: 16 Person(char*name, bool is_male, Date birth_date) 17 *found* 18 : _ 19 20 strcpy(this-name, name); 21 22 const char*ge
5、tName()constre-turn name; 23 bool isMale()constreturn is male; 24 Date getBirthdate()const return birth_date; 25 利用 strcmp()函数比较姓名,返回一个正数、 0或负数,分别表示大于、等于、小于 26 int compareName(const Person p)const 27 *found* 28 _; 29 void show() 30 couti) 46 Person p=psm; 47 psm=psi; 48 psi=P; 49 50 51 52 53 int mai
6、n() 54 Person staff= 55 Person(“张三 “, true, Date(1978, 4, 2 0), 56 Person(“王五 “, false, Date(1965, 8, 3), 57 Person(“杨六 “, false, Date(1965, 9, 5), 58 Person(“李四 “, true, Date(1973, 5, 3 0) 59 ; 60 const int size=sizeof(staff) si-zeof(staff0); 61 int i; 62 cout 3 using namespace std; 4 class Person
7、5 6 char*idcardno;用动态空间存储的身份证号 7 char*name; 用动态空间存储的姓名 8 bool ismale; 性别: true为男, false为女 9 public: 10 Person(const char*pid, const char*pname, bool pmale); 11 Person() 12 *1* *found* 13 _; 14 15 const char*getIDCardNO()constreturn idcardno ; 16 const char*getName()constre-turn name; 17 void rename(
8、const char水 new name); 18 bool isMale()constreturn ismale; ; 19 class Staff: public Person 20 21 char * department; 22 double salary; 23 public: 24 Staff(const char*id_card_no, const char*p_name, bool is_male, const char*dept, double sal; 25 Staff()deletedepartment; 26 const char*getDepartment()cons
9、treturn department ;) 27 void setDepartment(const char*d); 28 double getSalary()constreturn salary; 29 void setSalary(double s)salary=s; 30 ; 31 Person: Person(const char*id card 32 no, const char*p_name, bool is male): ismale(is_male) 33 34 idcardno=new charstrlen(id_card_no)+1; 35 strcpy(idcardno,
10、 id card no); 36 name=new charstrlen(p_name)+1; 37 strcpy(name, p_name); 38 39 void Pemson: rename(const char*new_name) 40 41 deletename; 42 *2* *found* 43 _; 44 strcpy(name, new_name); 45 46 Staff: Staff(const char*id cardno, const char*p_name, bool is_male, 47 *3* *found* 48 const char*dept, doubl
11、e sal): _ 49 50 department=new charstrlen(dept)+1; 5l strcpy(department, dept); 52 salary: sal; 53 54 void Staff: setDepartment (const char*dept) 55 56 deletedepartment; 57 department: new charstrlen(dept)+1; 58 strcpy(department, dept); 59 60 int main() 61 62 Staff Zhangsan(“123456789012345“, “张三 “
12、, false, “人事部 “, 1234 56); 63 Zhangsan rename(“张小丽 “); 64 coutname, name);可知,要使用成员列表初始化的成员为 is_male和 birth_date。 (2)主要考查考生对 strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、 0或负数,分别表示大于、等于、小于。因为 trcmp()函数的功能是比较字符串大小,因此可以直接被 return语句调用:return strcmp(name, p getName();。 (3)主要考查考生对成员函数的掌握,程序的注释为:显示出
13、生月,由此可以知道这里要输出出生月份,直接调用函数 getMonth()即可。 三、综合应用题 3 【正确答案】 (1)deleteidcardno, name (2)name=new charstrfen(new_name)+1 (3)Person(id_card_no, p_name, is-male) 【试题解析】 (1)主要考查考生对析构函数的掌握,题目要求释放两个指针成员所指向的动态空间。释放动态空间应 使用 delete语句,因为要释放两个指针,使用语句: deleteidcardno, name;实现。注意当释放多个指针时,中间用逗号隔开。 (2)考查动态数组分配空间,题目要求指针 name指向申请到的足够容纳字符串new_name的空间。使用 strlen(new_name)得到字符串 new_name的长度,但是这里要注意加 1。 (3)主要考查考生对派生类构造函数的掌握,题目要求利用参数表中前几个参数对基类 Person进行初始化。派生类的构造函数要使用成员列表初始化法对基类初始化,因此为 const char*dept, double sal): Person(id_card_no, p_name,is_male)。