1、二级 C+-55及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,其中有枚举 PetType、宠物类Pet和主函数 main的定义。程序中位于每个“/ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: There is a dog named Doggie There is a eat named Mimi There is an unknown animal named Puppy 注意:只修改每个“/ERROR*foun
2、d*”下的那一行,不要改动程序中的其他内容。函数 strcpy(char*p,const char*q)的作用是将 q指向的字符串复制到 p指向的字符数组中。 #include iostream using namespace std; enum PetType DOG, CAT, BIRD, FISH, REPTILE, INSECT, OTHER; class Pet /宠物类 PetType type; /类别 char name20; /名字 public: Pet(PetType type, char name) this -type =type; /将参数 name中的字符串复制到
3、作为数据成员的 namer数组中 / ERROR * found* this -name =name; / ERROR * found* PetType getType () const return PetType; const char* getName () const return name; const char* getTypeString()const switch (type) case DOG: return “a dog“; case CAT: return “a cat“; case BIRD: return “a bird“; case FISH: return “a
4、fish“; case REPTILE: return “a reptile“; case INSECT: return “an insect“; / ERROR * found* return OTHER; void show () const cout “There is“ getTypeString() “named“ name endl; ; int main () Pet a_dog (DOG, “Doggie“); Pet a_cat (CAT, “Mimi“); Pet an_animal (OTHER, “Puppy“); a_dog, show (); a_cat.show(
5、); an_animal, show (); return 0; (分数:30.00)_二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2,该工程中包含一个源程序文件proj2.cpp。其中定义了模板函数 insert(T dataset,int /请在该部分插入 insert函数模板的实现 template typename T void insert(T setdata, int i size; i+) /*found* if (_) /TODO: 添加代码,判断查找元素的插入位置 for (int j = i
6、; j size; j+) /*found* _; /TODO: 添加一条语句,将插入位置后的所有元素往后移动一个位置 /提示:移动元素应从最后一个元素开始移动 setdatai = item; /插入该元素 size +; return; /* found* _; /TODO: 添加一条语句,将元素加到最后一个位置上 size +; return; int main () int idata10 = 22, 35, 56, 128 ,iitem, isize = 4, dsize = 4, i; double ddata10 = 25.1, 33.5, 48.9, 75.3, ditem;
7、cout “Please input one integer number for inserting:“; cin iitem; insert(idata, isize, iitem); for (i = 0; i isize; i+) cout idatai “; cout endl; cout “Please input one doublenumber for inserting:“; cin ditem; insert(ddata, dsize, ditem); for (i = 0; i dsize; i+) cout ddatai “; cout endl; return 0;
8、(分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程文件 proj3,此工程中包含一个源程序文件 proj3.cpp,其中定义了用于表示平面坐标系中的点的类 MyPoint和表示线段的类 MyLine;程序应当显示:(0,0)(1,1)1.41421,1但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“/*1* *found*”的下方是构造函数的定义,它用参数提供的两个端点对 point1和point2进行初始化。(2)在“/*2* *found*”的下方是成员函数 length的定义,返回
9、线段的长度。(3)在“/*3* *found*”的下方是成员函数 slope的定义中的一条语句。函数 slope返回线段的斜率,方法是:若线段的两个端点分别是(x 1,y 1)和(x 2,y 2),则斜率 k为:(分数:40.00)_二级 C+-55答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,其中有枚举 PetType、宠物类Pet和主函数 main的定义。程序中位于每个“/ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应
10、为: There is a dog named Doggie There is a eat named Mimi There is an unknown animal named Puppy 注意:只修改每个“/ERROR*found*”下的那一行,不要改动程序中的其他内容。函数 strcpy(char*p,const char*q)的作用是将 q指向的字符串复制到 p指向的字符数组中。 #include iostream using namespace std; enum PetType DOG, CAT, BIRD, FISH, REPTILE, INSECT, OTHER; class
11、Pet /宠物类 PetType type; /类别 char name20; /名字 public: Pet(PetType type, char name) this -type =type; /将参数 name中的字符串复制到作为数据成员的 namer数组中 / ERROR * found* this -name =name; / ERROR * found* PetType getType () const return PetType; const char* getName () const return name; const char* getTypeString()const
12、 switch (type) case DOG: return “a dog“; case CAT: return “a cat“; case BIRD: return “a bird“; case FISH: return “a fish“; case REPTILE: return “a reptile“; case INSECT: return “an insect“; / ERROR * found* return OTHER; void show () const cout “There is“ getTypeString() “named“ name endl; ; int mai
13、n () Pet a_dog (DOG, “Doggie“); Pet a_cat (CAT, “Mimi“); Pet an_animal (OTHER, “Puppy“); a_dog, show (); a_cat.show(); an_animal, show (); return 0; (分数:30.00)_正确答案:(1)strcpy(this-name, name); (2)PetType getType()constreturn type; (3)return “an unknown animal“;)解析:考点 本题考查 Pet类,其中涉及 enum类型、构造函数、const
14、 函数和成员函数。 解析 (1)主要考查字符串复制函数 strcpy(),其格式为:strcpy(字符串 1,字符串 2)或 strcpy(指向字符串 1的指针,指向字符串 2的指针),功能是将字符串 2复制到字符串 1中,本题使用第二种格式。 (2)主要考查考生对成员函数的掌握,根据私有成员的定义类型 PetType type,可知要返回的是 type。 (3)主要考查考生对 switch语句的掌握,当在 switch语句体中找不到相应的字段时,跳出 switch语句,程序返回“an unknown animal“。二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用
15、答题菜单打开考生文件夹 proj2下的工程 proj2,该工程中包含一个源程序文件proj2.cpp。其中定义了模板函数 insert(T dataset,int /请在该部分插入 insert函数模板的实现 template typename T void insert(T setdata, int i size; i+) /*found* if (_) /TODO: 添加代码,判断查找元素的插入位置 for (int j = i; j size; j+) /*found* _; /TODO: 添加一条语句,将插入位置后的所有元素往后移动一个位置 /提示:移动元素应从最后一个元素开始移动 s
16、etdatai = item; /插入该元素 size +; return; /* found* _; /TODO: 添加一条语句,将元素加到最后一个位置上 size +; return; int main () int idata10 = 22, 35, 56, 128 ,iitem, isize = 4, dsize = 4, i; double ddata10 = 25.1, 33.5, 48.9, 75.3, ditem; cout “Please input one integer number for inserting:“; cin iitem; insert(idata, is
17、ize, iitem); for (i = 0; i isize; i+) cout idatai “; cout endl; cout “Please input one doublenumber for inserting:“; cin ditem; insert(ddata, dsize, ditem); for (i = 0; i dsize; i+) cout ddatai “; cout endl; return 0; (分数:30.00)_正确答案:(1)itemsetdatai (2)setdatasize+i-j=setdatasize+i-j-1 (3)setdatasiz
18、e=item)解析:考点 本题考查模板函数 insert,其中涉及 for循环、数组和排序。 解析 (1)主要考查考生对 if语句的掌握,题目要求判断查找元素的插入位置。因为要插入的序列是升序排列的,当itemsetdatai时,即为要插入的位置。 (2)主要考查考生对 for循环的掌握,因为要在第 i个位置外插入元素,所以将插入位置后的所有元素往后移动一个位置,移动时应从最后一个位置开始,因此使用语句 setdatasize+i-j=setdatasize+i-j-1;。 (3)主要考查考生对成员函数的掌握,题目要求将元素加到最后一个位置上。size 表示数组的长度,因为数组下标是从 0开始
19、的,所以最后一个位置为 size,即 setdatasize=item;。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程文件 proj3,此工程中包含一个源程序文件 proj3.cpp,其中定义了用于表示平面坐标系中的点的类 MyPoint和表示线段的类 MyLine;程序应当显示:(0,0)(1,1)1.41421,1但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“/*1* *found*”的下方是构造函数的定义,它用参数提供的两个端点对 point1和point2进行初始化。(2)在“/*2* *fo
20、und*”的下方是成员函数 length的定义,返回线段的长度。(3)在“/*3* *found*”的下方是成员函数 slope的定义中的一条语句。函数 slope返回线段的斜率,方法是:若线段的两个端点分别是(x 1,y 1)和(x 2,y 2),则斜率 k为:(分数:40.00)_正确答案:(1)point1(p1),point2(p2) (2)length()const (3)point2.getY()-point1.getY()解析:考点 本题考查 MyPoint类和 MyLine类,其中涉及构造函数、const 函数和成员函数。 解析 (1)主要考查考生对构造函数的掌握,这里使用成员列表初始化给 point1和 point2赋初始值。 (2)主要考查考生对成员函数的掌握,由类的定义中函数的声明:double length()const;/返回线段的长度,可知这里要输入 length()const。 (3)主要考查考生对成员函数的掌握,由函数声明:double slope()const;/返回直线的斜率,可知返回语句要返回直线的斜率,因此要输入:point2.getY()-point1.getY()。