1、国家二级 C+机试(操作题)模拟试卷 453及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 proj1,该工程中含有一个源程序文件 proj1 cpp。其中位于每个注释 “ ERROR *found *”之后的一行语句有错误。请改正这些错误,使程序的输出结果为: 1 2 3 4 5 6 7 8 9 10 注意:只能修改注释 “ ERROR*found*”的下一行语句,不要改动程序中的其他内容。 /proj1 cpp #include using namespace std; class MyClass public: MyClass(int
2、 len) array=new intlen; arraySize=len; for(int i=0; i using namespace std; class VectorBase向量基类,一个抽象类 int len; public: VectorBase (int len): len(len) int length()constreturn len; ) 向量长度,即向量中元素的个数 virtual double getElement(int i)const=0;取第 i个元素的值 virtual double sum()const=0;求所有元素的和 void show()const显示
3、向量中所有元素 coutshow(); delete V; v=new ZeroVector(6); v-show(); delete v; return 0; 三、综合应用题 3 请使用 VC6或使用【答题】菜单打开考生文件夹 proj3下的工程 proj3,其中定义的 Matrix是一个用于表示矩阵的类。成员函数 max_value的功能是求出所有矩阵元素中的最大值。例如,若有 33矩阵 则调用 max_value函数,返回值为 3。请编写成员函数 max_value。 要求: 补充编制的内容写在 “*333*”与 “ *666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到
4、文件 out dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。 Matrix h#include#includeusing namespace std; const int M=18; const int N=18; class Matrixint arrayMN;public: Matrix() int getElement(int i, int j)constreturn arrayij; void setElement(int i, int j, int value)arrayij=value; int max value()const; void
5、show(const char * s)const coutvoid readFromFile(const char*f, Matrix&m) ifstream infile(f); if(infile fail()cerrk; m setElement(i, j, k); int Matrix: max value()const *333* *666*int main() Matrix m; readFromFile(“, m); m show(“Matrix: “); cout 国家二级 C+机试(操作题)模拟试卷 453答案与解析 一、基本操作题 1 【正确答案】 deletearray
6、; coutvar;。其中, var代表一个变量, “”称为提取运算符,该语句的含义是,将用户输入的数据保存到 var中。 (3)考查语句的初始化,我们来看 MyClass类的构造函数: MyClass(int fen) array=new int1en; 给数组动态分配空间,大小为 len arraySize=len; 赋值 for(int i=0; iarraySize; i+) i=i+1=i+1; 循环给数组赋值,从 1到 10 请注意:形参 len没有定义默认值,因此要想使 array动态数组里依次存放 1,2, 3, 4, 5, 6, 7, 8, 9, 10,就是要给 len赋值为
7、 10。 二、简单应用题 2 【正确答案】 (1)getElement(length()-1) (2)deleteval (3)s+=vali (4)return 0 0: 【试题解析】 (1)主要考查考生对成员函数的掌握,题目要求显示最后一个元素。前面有纯虚函数 virtual doublegetElement(int i)const=0,因此可以直接调用getElement函数来取得最后一个元素,注意最后一个元素位置是 Length()-1而不是 Length()。 (2)主要考查考生对析构函数的掌握,前面定义了类的私有成员 *val,因此析构函数要释放 val,使用 de1ete语句完成
8、。 (3)主要考查考生对 for循环的掌握,由函数名 double sum()const可知,该函数要求元素之和, for循环语句的作用是遍历整个数组,在此使用语句 s+=vali完成程序。 (4)主要考查考生对成员函数的掌握,由该类的注释:零向量类,可以了解到该类的元素都为零,因此无论要取第几个元素都返回 0,由于数据类型为 double,所以为 return0 0。 三、综合应用题 3 【正确答案】 int temp=0; 定义整数变量 temp,并赋值为零 for(int i=0; iM; i+) 遍历矩阵的行 for(int j=0; jN; j+) 遍历短 阵的列 if(temparrayij) 如果 temp小于 arrayij temp=arrayij; 把 arrayij赋值给 temp return temp; 返回 temp 【试题解析】 主要考查考生对二维数组的掌握,题目要求成员函数 max_value的功能是求出所有矩阵元素中的最大值。因此只要逐个元素比较即可,下标 i和 j作为矩阵行和列的标记,使用双层 for循环来遍历数组中的所有元素。