1、国家二级 C+机试(操作题)模拟试卷 289及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1。其中有线段类 Line的定义。程序中位于每个 “ ERROR *found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: End point 1 (1, 8), End point 2 (5, 2), length 7 2111。 注意:只修改每个 “ ERROR *found*水 ”下的那一行,不要改动程 序中的其他内容。 #include iostream #include cmath using namespac
2、e std; class Line; double length(Line); class Line 线段类 double x1, y1;线段端点 1 double x2, y2;线段端点 2 public: ERROR *found* Line(double x1, double y1, double x2, double y2)const this x1 x1; this y1 y1; this x2 x2; this y2 y2; double getXl()constreturnx1; double getYl()constreturny1; double getX2()constre
3、turnx2; ) double getY2()constreturny2; ) void show()const cout “End point 1 (“ x1 “, “ y1; cout “), End point 2 (“ x2 “, “ y2; ERROR *found* cout “), length “ length(this) “。 “ end1; ; double length(Line 1) ERROR *found* return sqrt(1 xl 1 x2)* (1 x1 1 x2) (1 y1 1 y2)*(1 y1 1 y2); int main() Line r1
4、(1 0, 8 0, 5 0, 2 0); r1 show(); return 0; 二、简单应用题 2 请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2。其中有向量基类 VectorBase、向量类 Vector和零向量类 ZeroVector的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。该程序正确输出结果应为: (1, 2, 3, 4, 5) (0, 0, 0, 0, 0, 0) 注意:只能在横线处填写适当的代码,不要改动程序 中的其他内容,也不要删除或移动 “ *found*”。 #include iostream using namespa
5、ce std; class VectorBase向量基类,一个抽象类 int len; public: VectorBase (int fen): len(len) int length()constreturnlen; ) 向量长度。即向量中元素的个数 virtual double getElement(int i)const 0,取第 i个元素的值 virtual double sum()const 0;求所有元素的和 void show()const显示向量中所有元素 cout “(“; for(int i 0; i length() 1; i ) cout getElement(i)
6、“,“ *found* cout _ “)“ end1;显示最后一个元素 ; class Vector: public VectorBase向量类 double *va1; public: Vector(int len, double v NULL): VectorBase(len) val new doublelen; for(int i 0; i len; i ) vali (v NULL?0 0: v i ); *found* Vector()_; double getElement(int index) constreturn valindex; ) double sum()const
7、 double s 0 0; *found* for(int i 0, i length(); i )_; return s; ; class ZeroVector: public VectorBase零向量类 public: ZeroVector(int len): VectorBase(len) *found* double getElement(int index)const_; double sum()constreturn 0 0; ; int main() VectorBaSe *v; double d 1, 2, 3, 4, 5); V new Vector(5, d); V s
8、how(); delete v; v new ZeroVector(6); v show(); delete v; return 0; 三、综合应用题 3 请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 proj3,其中声明了 SortedList类,是一个用于表示有序数据表的类。其成员函数 insert的功能是将一个数据插入到一个有序表中,使得该数据表仍然保持有序。请编写这个 insert函数。程序的正确输出应为: 插入前: 1, 2, 4, 5, 7, 8, 10 插入 6和 3后: 1, 2, 3, 4, 5, 6, 7, 8, 10 要求 : 补充编制的内容写在 “
9、 *333*”与 “ *666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。 SortedList h #include iostream using namespace std; class sortedList 有序数据表类 int len; double, *d; public: SortedLiSt(int fen, doubledata NULL); SortedList()deleted; int length()constreturnlen; 有序数据表长度 (即元
10、素的个数 ) double getElement (int i)constreturn di; void insert(double data); void show ()const;显示有序数据表 ; void writeToFile (char *, const sortedLiSt ); main cpp #include“SortedList h“ SortedList SortedLiSt(int len, double data): len(len) d new doublelen; for(int k 0; k len; k ) dk (data NULL?0 0: datak)
11、; for(int i 0; i len 1; i ) int m i; for(int j i; j len; j ) if(dj dm)m j; if(m i) double t dm; dm di; di t; void SortedList insert(double data) *333* *666* void SortedList show()const 显示南序数据表 for(int i 0; i len 1; i ) cout di “, “; cout dlen 1 end1; int main() double s 5, 8, 1, 2, 10, 4, 7); Sorted
12、List list(7, s); cout “插入前: “ end1; list show(); list insert(6 0); list insert(3 0); cout “插入 6和 3后: “ end1; list show(); writeToFile(“, list); return 0; 国家二级 C+机试(操作题)模拟试卷 289答案与解析 一、基本操作题 1 【正确答案】 (1)Line(double x1, double y1, double x2, double y2) (2)eout “), length “ length(*this) “。 “ end1: (3)
13、retum sqrt(1 getXl() 1 getX2() * (1 getX1() 1 getX2() (1 getY1() 1 getY2() * (1 getY1() 1 getY2(); 【试题解析】 (1)主要考查考生对构造函数的掌握,构造函数要给私有成员赋初始值,因此不能使用 const来限制。 (2)主要考查考生对 this指针的掌握,由函数 length的声明 double length(Line);可知, length函数的形参是 Line类,在 void show()eonst函数里,this指针指向的是当前 Line类,因此可以用 *this表示当前 Line类。 (3
14、)主要考查考生对成员函数的掌握, length函数是类外函数,不能直接调用 类的私有成员,因此要通过成员函数取得对应的值。 二、简单应用题 2 【正确答案】 (1)getElement(length() 1) (2)deleteval (3)s vali (4)return 0 0: 【试题解析】 (1)主要考查考生对成员函数的掌握,题目要求显示最后一个元素。前面有纯虚函数 virtual double getElement(int i)const 0,因此可以直接调用getElement函数来取得最后一个元素,注意最后一个元素位置是 Ungth() 1而不是 length()。 (2)主要考
15、查考生对析构函数的掌握,前面定义了类的私有成员 *val,因此析构函数要释放 val,使用 delete语句完成。 (3)主要考查考生对 for循环的掌握,由函数名 double sum()const可知,该函数要求元素之和, for循环语句的作用是遍历整个数组,在此使用语句 s: vali完成程序。 (4)主要考查考生对成员函数的掌握,由该类的注释:零向量类,可以了解到该类的元素都为零,因此无论要取第几个元素都返回 0,由于数据类型为 double,所以为 return0 0。 三、综合应用题 3 【正确答案】 for(int i 0; 1 len; i) 遍历数组 d if(data di
16、) 如果 data小于 di len;数组 d的长度自加 1 double *dd new doublefen; 分配长度为 len空间 for(int k len; k i; k ) 在数组 d中从 k等于 len到 i做遍历 ddk dk 1; 把 dk 1赋值给 ddk ddi data; 把 data赋值给 ddi for(int j 0; j i, j ) 把数组 d从 0到 i做遍历 ddj dj; 把 dj赋值给 ddj deleted;删 d分配的空间 d new doublelen; 给 d分配长度为 len的空间 for(int index 0; index len; index) 遍历数组 dd从 0到 len dindex ddindex; 地 ddindex赋值给 dindex deletedd; 删 dd分配的空间 break;跳出循环
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1