1、二级 C+-57及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: False 注意:请勿更改参数名。只修改注释“/ERROR *found*”的下一行语句,不要改动程序中的其他内容。 /proj1.cpp #include iostream using namespace std; class MyClas
2、s public: / ERROR * found* void MyClass (int x):flag(x) void Judge (); private: int flag; ; / ERROR * found* void Judge () switch (flag) case 0: cout “False“ endl; / ERROR* found* exit; default: cout “True“ endl; break; int main ( ) MyClass obj (0); obj. Judge (); return 0; (分数:30.00)_二、B简单应用题/B(总题数
3、:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,此工程中含有一个源程序文件proj2.cpp,请编写一个函数 int Invert(char*str),其作用是将一个表示整数的字符串转换为相应整数。注意:请勿修改主函数 main和其他函数中的任何内容,只在横线处编写适当代码,也不要删除或移动“/*found*”。 /proj2.cpp #include iostream #include cstring using namespace std; int Invert(char * str) /* found* _; while(* str
4、!=/0) /* found* int digital = num=num* 10 +digital; /* found* _ return num; int main() char * str=new char10; cout “Please input the integerstring:“; cin str; cout Invert(str) endl; return 0; (分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生目录 proj3下的工程文件 proj3,此工程中包含一个源程序文件proj3.cpp,其中定义了用于
5、表示日期的类 Date、表示人员的类 Person和表示职员的类 Staff;程序应当显示: 张小丽 123456789012345 但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在“/*1* *found*”的下方是构造函数的定义中的一个语句,它用参数提供的身份证号id_card_no对数据成员 idcardno进行初始化。 (2)在“/*2* *found*”的下方是构造函数定义的一个组成部分,其作用是利用参数表中的前几个参数对基类 Person进行初始化。 (3)在“/*3* *found*”的下方定义了一个 Staff对象,其中: 身份证号:1234567890123
6、45 姓名:张三 出生日期:1979 年 5月 10日 性别:女 工作部门:人事部 工资:1234.56 元 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。填写的内容必须在一条语句中完成,否则评分将产生错误。 /proj3.cpp #include iostream using namespace std; class Date public: int year; int month; int day; Date():year(0), month(0), day(0) Date (int y, int m, int d) :year (y), m
7、onth (m), day (d) ; class Person char idcardno16; /身份证号 char name20; /姓名 Date birthdate; /出生日期 bool ismale; /性别:true 为男, false 为女 public: Person(const char * pid, const char* pname, Date pdate, bool pmale); const char * getIDCardNO () const return idcardno; const char * getName () const return name;
8、 void rename(const char * new_name); Date getBirthDate () const return birthdate; bool isMale()const return ismale; ; class Staff: public Person char department20; /工作部门 double salary; /工资 public: Staff (const char * id_card_no, const char * p_name, Date birth_date,bool is_male, const char * dept, d
9、ouble sal); const char * getDepartment()constreturn department; void setDepartment(const char * d); double getSalary () const return salary; void setSalary(double s) salary =s; ; Person:Person(const char * id_card_no, const char * p_name, Date birth_date, bool is_male) :birthdate (birth_date), ismal
10、e (is_male) /*1* * found* _; strcpy(name, p_name); void Person:rename(const char * new_name) strcpy(name, new_name); Staff:Staff (const char * id_card_no, const char * p_name, Date birth_date, bool is_male, /*2* *found* const char * dept, double sal):_ setDepartment(dept); setSalary(sal); void Staff
11、: setDepartment (const char * dept) strcpy(department, dept); int main() /*3* * found* Zhangsan. rename (“张小丽“); cout Zhangsan.getName () Zhangsan.getIDCardNO () endl; return 0; (分数:40.00)_二级 C+-57答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中含有一个源程序
12、文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: False 注意:请勿更改参数名。只修改注释“/ERROR *found*”的下一行语句,不要改动程序中的其他内容。 /proj1.cpp #include iostream using namespace std; class MyClass public: / ERROR * found* void MyClass (int x):flag(x) void Judge (); private: int flag; ; / ERROR * found* voi
13、d Judge () switch (flag) case 0: cout “False“ endl; / ERROR* found* exit; default: cout “True“ endl; break; int main ( ) MyClass obj (0); obj. Judge (); return 0; (分数:30.00)_正确答案:(1)MyClass(int x):flag(x) (2)void MyClass:Judge() (3)break;)解析:考点 本题考查 MyClass类,其中涉及构造函数、成员函数和 switch语句。 解析 (1)主要考查考生对构造函
14、数定义的掌握,构造函数前不能有返回类型。 (2)类的成员函数在类外定义时要加上类名和作用域符。 (3)主要考查考生对 switch语句的掌握,在 switch语句中,使用 break跳出。二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,此工程中含有一个源程序文件proj2.cpp,请编写一个函数 int Invert(char*str),其作用是将一个表示整数的字符串转换为相应整数。注意:请勿修改主函数 main和其他函数中的任何内容,只在横线处编写适当代码,也不要删除或移动“/*found*”。 /proj2
15、.cpp #include iostream #include cstring using namespace std; int Invert(char * str) /* found* _; while(* str!=/0) /* found* int digital = num=num* 10 +digital; /* found* _ return num; int main() char * str=new char10; cout “Please input the integerstring:“; cin str; cout Invert(str) endl; return 0;
16、(分数:30.00)_正确答案:(1)int num=0 (2)*str (3)str+;)解析:考点 本题考查 Invert函数,其中涉及 while循环和字符数组。 解析 (1)主要考查考生对成员函数的掌握,num 用于存放累加值,因此这里要定义 num同时初始化为 0。 (2)主要考查考生对指针的掌握,对整型变量 digital赋值字符串 str的第一个字符,即将第一个字符的 ASCII码赋给 digital。 (3)考查指针的操作,while 循环要累加代表整数的字符,因此这里指针要指向下一个字符。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开
17、考生目录 proj3下的工程文件 proj3,此工程中包含一个源程序文件proj3.cpp,其中定义了用于表示日期的类 Date、表示人员的类 Person和表示职员的类 Staff;程序应当显示: 张小丽 123456789012345 但程序中有缺失部分,请按照以下提示,把缺失部分补充完整: (1)在“/*1* *found*”的下方是构造函数的定义中的一个语句,它用参数提供的身份证号id_card_no对数据成员 idcardno进行初始化。 (2)在“/*2* *found*”的下方是构造函数定义的一个组成部分,其作用是利用参数表中的前几个参数对基类 Person进行初始化。 (3)在
18、“/*3* *found*”的下方定义了一个 Staff对象,其中: 身份证号:123456789012345 姓名:张三 出生日期:1979 年 5月 10日 性别:女 工作部门:人事部 工资:1234.56 元 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。填写的内容必须在一条语句中完成,否则评分将产生错误。 /proj3.cpp #include iostream using namespace std; class Date public: int year; int month; int day; Date():year(0), mon
19、th(0), day(0) Date (int y, int m, int d) :year (y), month (m), day (d) ; class Person char idcardno16; /身份证号 char name20; /姓名 Date birthdate; /出生日期 bool ismale; /性别:true 为男, false 为女 public: Person(const char * pid, const char* pname, Date pdate, bool pmale); const char * getIDCardNO () const return
20、 idcardno; const char * getName () const return name; void rename(const char * new_name); Date getBirthDate () const return birthdate; bool isMale()const return ismale; ; class Staff: public Person char department20; /工作部门 double salary; /工资 public: Staff (const char * id_card_no, const char * p_nam
21、e, Date birth_date,bool is_male, const char * dept, double sal); const char * getDepartment()constreturn department; void setDepartment(const char * d); double getSalary () const return salary; void setSalary(double s) salary =s; ; Person:Person(const char * id_card_no, const char * p_name, Date bir
22、th_date, bool is_male) :birthdate (birth_date), ismale (is_male) /*1* * found* _; strcpy(name, p_name); void Person:rename(const char * new_name) strcpy(name, new_name); Staff:Staff (const char * id_card_no, const char * p_name, Date birth_date, bool is_male, /*2* *found* const char * dept, double s
23、al):_ setDepartment(dept); setSalary(sal); void Staff: setDepartment (const char * dept) strcpy(department, dept); int main() /*3* * found* Zhangsan. rename (“张小丽“); cout Zhangsan.getName () Zhangsan.getIDCardNO () endl; return 0; (分数:40.00)_正确答案:(1)strcpy(idcardno, id_card_no) (2)Person(id_card_no,
24、 p_name, birth_date, is_male) (3)Staff Zhangsan(“123456789012345“, “张三“, Date(1979, 5, 10), false, “人事部“, 1234.56)解析:考点 本题考查 Date类、Person 类及其派生类 Staff类,其中涉及构造函数、const 函数、bool函数和成员函数。 解析 (1)主要考查考生对 strcpyr函数的掌握,复制字符串要使用 strepy函数,其格式为:strcpy(字符串 1,字符串 2);。 (2)主要考查考生对构造函数的掌握,派生类的构造函数要使用成员列表初始化先调用基类的构造函数。 (3)主要考查考生对构造函数的掌握,由题目要求可知要将对象初始化为:Zhangsan(“123456789012345“,“张三“,Date(1979,5,10),false,“人事部“,1234.56);。