1、二级 C+-52及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,其中在编辑窗口内显示的主程序文件中定义有类 AAA和主函数 main。程序文本中位于每行“/ERROR*found*”下面的一行有错误,请加以改正。改正后程序的输出结果应该是: sum=60 注意:只修改每个“/ERROR*found*”下面的一行,不要改动程序中的其他任何内容。 #include iostream using namespace std; class AAA int a10;
2、int n; /ERROR * found* private: AAA(int aa, int nn): n(nn) /ERROR * found* for(int i=0; in; i+) aai =ai; int Geta(int i) return ai; ; int main() int a6 = 2, 5, 8, 10, 15, 20; AAA x(a, 6); int sum = 0; /ERROR * found* for (int i=0; i6; i+) sum+ =x.ai; cout “sum = “ sum endl; return 0; (分数:30.00)_二、B简
3、单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类 Set和用于测试该类的主函数 main。类 Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为 100。为该类实现一个构造函数 Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数 InSet(char c),用于测试一个字符 c是否在一个集合中,若在,则返回 true;否
4、则返回 false。 构造函数 Set和成员函数 InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“/TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。 提示:在实现构造函数时,可以调用 InSet函数来判断一个字符是否已经在集合中。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 / proj2.cpp #include iostream using namespace std; const int MAXNUM = 100; class Set private: int num; /元素个数 cha
5、r setdataMAXNUM; /字符数组用于存储集合元素 public: Set(char* s); /构造函数,用字符串 bool InSet (char c); /判断一个字符 c是否在集合中,若在,返回 true,否则返回 false void Print () const; /输出集合中所有元素 ; Set:Set(char * s) num= 0; while (* s) /*found* if (_) / TODO: 添加代码,测试元素在集合中不存在 /* found* _; / TODO: 添加一条语句,加入元素至集合中 s+; bool Set:InSet (char c)
6、 for (int i = 0; inum; i+) /*found* if (_) / TOD0: 添加代码,测试元素 c是否与集合中某元素相同 /*found* _; /TODO: 添加一条语句,进行相应处理 return false; void Set:Print() const cout “Set elements: “ endl; for(int i = 0; i num; i+) cout setdatai “; cout endl; int main ( ) char s MAXNUM; cin.getline (s, MAXNUM -1) ; /从标准输入中读入一行 Set s
7、etobj (s); /构造对象 setobj setobj.Print() ; /显示对象 setobj return 0; (分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明了 MiniComplex是一个用于表示复数的类。请编写这个 operator+运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例如,(23+34i)+(56+35i)等于(79+69i)。 要求: 补充编制的内容写在“/*333*”
8、与“/*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out.dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。 /Minicomplex.h #include iostream using namespace std; class MiniComplex /复数类 public: /重载流插入和提取运算符 friend ostream return osObject; friend istream isObject complex.realPart ch complex.imagPart ch; return isObject;
9、 MiniComplex(double real = 0, double imag = 0); /构造函数 MiniComplex operator + ( constMiniComplex /重载运算符+ private: double realPart; /存储实部变量 double imagPart; /存储虚部变量 ; voidwriteToFile(char * ); /main.cpp #include “MiniComplex.h“ MiniComplex:MiniComplex(double real, double imag) realPart = real; imagPar
10、t = imag; MiniComplex MiniComplex: operator + (constMiniComplex MiniComplex numl (23, 34), num2 (56, 35); cout “Initial Value of Num1 = “numl “/nInitial Value of Num2 =“ num2 endl; cout num1 “ + “ num2 “ = “num1 + num2 endl; /使用重载的加号运算符 writeToFile (“); return 0; (分数:40.00)_二级 C+-52答案解析(总分:100.00,做题
11、时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,其中在编辑窗口内显示的主程序文件中定义有类 AAA和主函数 main。程序文本中位于每行“/ERROR*found*”下面的一行有错误,请加以改正。改正后程序的输出结果应该是: sum=60 注意:只修改每个“/ERROR*found*”下面的一行,不要改动程序中的其他任何内容。 #include iostream using namespace std; class AAA int a10; int n; /ERROR * found* pri
12、vate: AAA(int aa, int nn): n(nn) /ERROR * found* for(int i=0; in; i+) aai =ai; int Geta(int i) return ai; ; int main() int a6 = 2, 5, 8, 10, 15, 20; AAA x(a, 6); int sum = 0; /ERROR * found* for (int i=0; i6; i+) sum+ =x.ai; cout “sum = “ sum endl; return 0; (分数:30.00)_正确答案:(1)public: (2)for(int j=0
13、; in; i+) ai=aai; (3)for(int i=0; i6; i+) sum+=x.Geta(i);)解析:考点 本题考查 AAA类,其中涉及数组、构造函数和成员函数。 解析 (1)构造函数肯定是公有成员,所以应使用 public。 (2)主要考查考生对赋值语句的掌握,因为数组 a是私有成员,因此 a应该在左边,而数组 aa是形参,要赋值给数组 a。 (3)主要考查考生对成员函数调用的掌握,数组 a是类的私有成员,因此不能被 main函数直接调用,要通过成员函数 Geta来调用数组 a。 主要考查考生对公有成员的掌握,构造函数只能是公有成员,而私有成员不能被类外函数调用。二、B简
14、单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类 Set和用于测试该类的主函数 main。类 Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为 100。为该类实现一个构造函数 Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数 InSet(char c),用于测试一个字符 c是否在一个集合中,若在,则返回 true;否
15、则返回 false。 构造函数 Set和成员函数 InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“/TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。 提示:在实现构造函数时,可以调用 InSet函数来判断一个字符是否已经在集合中。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 / proj2.cpp #include iostream using namespace std; const int MAXNUM = 100; class Set private: int num; /元素个数 cha
16、r setdataMAXNUM; /字符数组用于存储集合元素 public: Set(char* s); /构造函数,用字符串 bool InSet (char c); /判断一个字符 c是否在集合中,若在,返回 true,否则返回 false void Print () const; /输出集合中所有元素 ; Set:Set(char * s) num= 0; while (* s) /*found* if (_) / TODO: 添加代码,测试元素在集合中不存在 /* found* _; / TODO: 添加一条语句,加入元素至集合中 s+; bool Set:InSet (char c)
17、 for (int i = 0; inum; i+) /*found* if (_) / TOD0: 添加代码,测试元素 c是否与集合中某元素相同 /*found* _; /TODO: 添加一条语句,进行相应处理 return false; void Set:Print() const cout “Set elements: “ endl; for(int i = 0; i num; i+) cout setdatai “; cout endl; int main ( ) char s MAXNUM; cin.getline (s, MAXNUM -1) ; /从标准输入中读入一行 Set s
18、etobj (s); /构造对象 setobj setobj.Print() ; /显示对象 setobj return 0; (分数:30.00)_正确答案:(1)!InSet(*s) (2)setdatanum+=*s (3)c=setdatai (4)return true)解析:考点 本题考查 Set类,其中涉及 const变量、构造函数、const 函数和 bool函数。 解析 (1)主要考查考生对成员函数的掌握,题目要求:添加代码,测试元素在集合中不存在,由类的定义可知函数bool InSet(char c)可以测试字符 c是否在集合中,因此这里直接调用函数 bool InSet(
19、char c)即可。 (2)题目要求:添加一条语句,加入元素至集合中,集合用数组 setdata表示,直接把元素添加到数组中即可。 (3)主要考查考生对 if语句的掌握,题目要求:测试元素 c是否与集合中某元素相同。前一条语句是个 for循环,利用下标 i遍历整个集合,通过 if语句中的判断条件判断 c是否在集合中,用“=”判断。 (4)主要考查考生对成员函数的掌握,先看函数的注释:判断一个字符 c是否在集合中,若在,返回 true,否则返回 false。if 语句成立时,说明字符 c存在于集合中,因此应该返回 true。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或
20、使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明了 MiniComplex是一个用于表示复数的类。请编写这个 operator+运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例如,(23+34i)+(56+35i)等于(79+69i)。 要求: 补充编制的内容写在“/*333*”与“/*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out.dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。 /Minicomplex.h #includ
21、e iostream using namespace std; class MiniComplex /复数类 public: /重载流插入和提取运算符 friend ostream return osObject; friend istream isObject complex.realPart ch complex.imagPart ch; return isObject; MiniComplex(double real = 0, double imag = 0); /构造函数 MiniComplex operator + ( constMiniComplex /重载运算符+ private
22、: double realPart; /存储实部变量 double imagPart; /存储虚部变量 ; voidwriteToFile(char * ); /main.cpp #include “MiniComplex.h“ MiniComplex:MiniComplex(double real, double imag) realPart = real; imagPart = imag; MiniComplex MiniComplex: operator + (constMiniComplex MiniComplex numl (23, 34), num2 (56, 35); cout
23、“Initial Value of Num1 = “numl “/nInitial Value of Num2 =“ num2 endl; cout num1 “ + “ num2 “ = “num1 + num2 endl; /使用重载的加号运算符 writeToFile (“); return 0; (分数:40.00)_正确答案:(MiniConmplex sum; /定义复数对象 Sum sum.imagPart = this-imagPart + otherComplex.imagPart; /把 this中的虚部(this-imagPart)和 othercomplex虚部相加赋值
24、给 Sum虚部 sum.realPart = this-tealPart + otherComplex.realPart; /把 this中的实部(this-reapart)加上 othercomplex 实部赋值给 Sum实部 return sum; /返回对象 Sum)解析:考点 本题考查 MiniComplex类,其中涉及友元函数、运算符重载和构造函数。运算符重载首先要理解被重载的运算符的含义,其次要掌握类的定义。 解析 主要考查考生对运算符重载的掌握,题目要求编写 operater+运算符函数,以实现复数的求和与运算。复数的和的实部等于两个复数的实部之和,虚部等于两个复数的虚部之和。函数要返回的类型是 MiniComplex,因此要先定义一个 MiniComplex类型变量 sum,然后对它们的实部和虚部各自求和,返回 sum即可。