1、国家二级 C+机试(操作题)模拟试卷 336及答案解析(总分:8.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 pmj1,其中有点类 Point和线段类Line和主函数 main的定义,程序中位于每个“ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出应为: p1=(8,4)p2=(3,5) 注意:只修改两个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostream#includecmathusing namespace std;c
2、lasS Point double x,Y;public: Point(double x=00,double Y=00)ERROR*found* X=x;Y=Y;) double getX()const(return X;) double getY()constreturn y;ERROR*found* void show()constcout(X,Y);clasS Line Point p1,p2;public: Line(Point pt1,Point pt2) ERROR*found* pt1=p1;pt2=p2; Point getP1()constreturn p1; Point g
3、etP2()constreturn p2;) ; int main() Line line(Point(8,4),Point(3,5); cout”p1=”; linegetP1()show(); cout”p2=”; linegetP2()show(); coutendl; return 0; (分数:2.00)_二、简单应用题(总题数:2,分数:4.00)2.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,其中有矩阵基类 MatrixBase、矩阵类 Matrix和单位阵 UnitMatrix的定义,还有 main函数的定义。请在横线处填写适当的代码并删除横
4、线,以实现上述类定义。此程序的正确输出结果应为: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 1 0 0 0 0 0 0 1 0 0 0 0 O 0 1 0 0 O 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。#includeiostreamusing namespace std;矩阵基础类,一个抽象类 class MatrixBase int rows,cols;public: MatrixBase(int rows, int cols):rows(ro
5、ws),cols(cols) int getRows()const return rows; 矩阵行数 int getCols()constreturn cols; 矩阵列数 virtual double getElement(int r,int C)const=0;取第 i个元素的值 void show()const分行显示矩阵中所有元素 for(int i=0;irows;i+) coutendl; for(int j=0;jcols;j+) *found*WW* cout_”; /矩阵类 class Matrix:public MatrixBase double*val;public:*
6、found* Matrix(int rOWS,int cols,double m=NULL):_*found*val=_;for(int i=0;irows*cols;i+) vali=(m=NULL?00:mi); 一 Matrix()deleteval;) double getElement(int r,int C)constreturn valr*getCols()+C;);单位阵(主对角线元素都是 1,其余元素都是 0的方阵)类class UnitMatrix:public MatrixBasepublic: UnitMatrix(int rows):MatrixBase(rows,r
7、ows)单位阵行数列数相同 double getElement(int r,int C)const* found*if(_)return 10;return 00; ; int main() MatrixBase*m; double d5=1,2,3,4,5),2,3,4,5,6),3,4,5,6,7); m=new Matrix(3,5,(double*)d);m-show(); delete m; coutendl;m=new UnitMatrix(6);m-show();delete m;return 0;(分数:2.00)_3.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2
8、下的工程 proj2,此工程包含一个源程序文件proj2cpp。其中定义了 Score类。 Score 是一个用于管理考试成绩的类。其中,数据成员一 s指向存储成绩的数组,_n 表示成绩的个数;成员函数 Sort使用冒泡排序法将全部成绩按升序进行排列。 请在程序中的横线处填写适当的代码,然后删除横线,以实现 Score类的成员函数 Sort。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。proj2cpp#includeiostream#includecstdlib#includectimeusing namespace std;clasS Sc
9、orepublic: Score(double*S,int n):_S(S),_n(n) double GetScore(int i)constreturn Si;) void Sort();private: double* S; int n; ; void Score:Sort() *found* for(int i=0;i n 一 1; *found* for(int j= ;ji;j 一一) if(_Sj_Sj 一 1) 交换_sj和_sj 一 1 double t=Sj; /* found* _;: /* found* _; int main() const int NUM=10; d
10、ouble SNUM; srand(time(0); for(int i=0;iNUM;i+) Si=double(rand()RAND MAX*100; Score SS(S,NUM); SSSort(); for(int J=0;jNUM;j+) coutSSGetScore(j)endl; return 0; (分数:2.00)_三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 oroj3下的工程 proj3,其中声明了 SortedList类,是一个用于表示有序数据表的类。其成员函数 insert的功能是将一个数据插入到一个有序表中,使得该
11、数据表仍然保持有序。请编写这个 insert函数。程序的正确输出应为: 插入前: 1,2,4,5,7,8,10 插入 6和 3后: 1,2,3,4,5,6,7,8,10 要求: 补充编制的内容写在“*333*”与“*666*”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 wfiteToFfle已经编译为 obj文件,并且在本程序中调用。/SortedList,h#includeiostreamusing namespace std;class SortedList有序数据表类 int len; double*d;public: SortedList(
12、int len,double data=NULL); 一SortedList()deleted;) int length()constreturn len;)有序数据表长度(即元素的个数) double getElement(int i)cons treturn di; void insert(double data); void show()const;显示有序数据表;void writeToFile(char*,const Sort edLiSt);maincpp#include”SortedListh”SortedLiSt: SortedList (int len,double data
13、):len(len)( d=new doublelen; for(int k=0;klen;k+) dk=(data=NULL?00:datak); for(int i=0;ilen 一 1;i+) int m=i; for(int j=i;jlen;j+) if(djdm)m=j; if(mi) double t=dm; dm=di; di=t; void SortedList:insert(double data)*333*666*void SortedList:show()const显示有序数据表 for(int i=0;ilen 一 1;i+) coutdi”,”; coutd1en1
14、endl;int main()double S=5,8,1,2,10,4,7;SortedList list(7,S);cout“插入前:”endl;listshow();listinsert(60);liStinsert(30);cout“插入 6和 3后:”endl;listshow();writeToFile(”,list);return 0;(分数:2.00)_国家二级 C+机试(操作题)模拟试卷 336答案解析(总分:8.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使用 VC6或使用【答题】菜单打开考生文件夹 proj1下的工程 pmj1,其中有点类
15、 Point和线段类Line和主函数 main的定义,程序中位于每个“ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出应为: p1=(8,4)p2=(3,5) 注意:只修改两个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostream#includecmathusing namespace std;clasS Point double x,Y;public: Point(double x=00,double Y=00)ERROR*found* X=x;Y=Y;) double getX()const(return X;) do
16、uble getY()constreturn y;ERROR*found* void show()constcout(X,Y);clasS Line Point p1,p2;public: Line(Point pt1,Point pt2) ERROR*found* pt1=p1;pt2=p2; Point getP1()constreturn p1; Point getP2()constreturn p2;) ; int main() Line line(Point(8,4),Point(3,5); cout”p1=”; linegetP1()show(); cout”p2=”; lineg
17、etP2()show(); coutendl; return 0; (分数:2.00)_正确答案:(正确答案:(1):x(x),y(y)或this 一x=x,this 一y=y; (2)void show()constcout(x,y解析:解析:(1)主要考查考生对构造函数的掌握,因为形参名和私有成员名称一样,因此不能直接赋值,在这里使用成员列表初始化,也可以使用 this指针赋值。 (2)主要考查考生对语句基本语法的掌握,根据语句: void show()eonsteout(x,y二、简单应用题(总题数:2,分数:4.00)2.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工
18、程 proj2,其中有矩阵基类 MatrixBase、矩阵类 Matrix和单位阵 UnitMatrix的定义,还有 main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 1 0 0 0 0 0 0 1 0 0 0 0 O 0 1 0 0 O 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。#includeiostreamusing namespace std;矩阵基础
19、类,一个抽象类 class MatrixBase int rows,cols;public: MatrixBase(int rows, int cols):rows(rows),cols(cols) int getRows()const return rows; 矩阵行数 int getCols()constreturn cols; 矩阵列数 virtual double getElement(int r,int C)const=0;取第 i个元素的值 void show()const分行显示矩阵中所有元素 for(int i=0;irows;i+) coutendl; for(int j=0
20、;jcols;j+) *found*WW* cout_”; /矩阵类 class Matrix:public MatrixBase double*val;public:*found* Matrix(int rOWS,int cols,double m=NULL):_*found*val=_;for(int i=0;irows*cols;i+) vali=(m=NULL?00:mi); 一 Matrix()deleteval;) double getElement(int r,int C)constreturn valr*getCols()+C;);单位阵(主对角线元素都是 1,其余元素都是 0
21、的方阵)类class UnitMatrix:public MatrixBasepublic: UnitMatrix(int rows):MatrixBase(rows,rows)单位阵行数列数相同 double getElement(int r,int C)const* found*if(_)return 10;return 00; ; int main() MatrixBase*m; double d5=1,2,3,4,5),2,3,4,5,6),3,4,5,6,7); m=new Matrix(3,5,(double*)d);m-show(); delete m; coutendl;m=n
22、ew UnitMatrix(6);m-show();delete m;return 0;(分数:2.00)_正确答案:(正确答案:(1)getElement(i,j) (2)MatrixBase(rows,cols) (3)new doublerows*cols (4)r=c)解析:解析:(1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为 i、列为 j的元素,使用纯虚函数 getElement(i,j)实现,输出语句为 coutgetElement(i,j)3.请使用 VC6或使用【答题】菜单打开考生文件夹 proj2下的工程 proj2,此工程包含一个
23、源程序文件proj2cpp。其中定义了 Score类。 Score 是一个用于管理考试成绩的类。其中,数据成员一 s指向存储成绩的数组,_n 表示成绩的个数;成员函数 Sort使用冒泡排序法将全部成绩按升序进行排列。 请在程序中的横线处填写适当的代码,然后删除横线,以实现 Score类的成员函数 Sort。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“*found*”。proj2cpp#includeiostream#includecstdlib#includectimeusing namespace std;clasS Scorepublic: Score(d
24、ouble*S,int n):_S(S),_n(n) double GetScore(int i)constreturn Si;) void Sort();private: double* S; int n; ; void Score:Sort() *found* for(int i=0;i n 一 1; *found* for(int j= ;ji;j 一一) if(_Sj_Sj 一 1) 交换_sj和_sj 一 1 double t=Sj; /* found* _;: /* found* _; int main() const int NUM=10; double SNUM; srand(
25、time(0); for(int i=0;iNUM;i+) Si=double(rand()RAND MAX*100; Score SS(S,NUM); SSSort(); for(int J=0;jNUM;j+) coutSSGetScore(j)endl; return 0; (分数:2.00)_正确答案:(正确答案:(1)i+ (2)_n1 (3)_sj =_sj 一 1 (4)_sj-1=t)解析:解析:(1)主要考查 for循环语句,从题目要求可知循环变量 i要从 0到_n-2,因此 i要递增操作,即 i+。 (2)主要考查考生对冒泡排序的掌握,这里要求从后往前扫描,比较相邻两个元素
26、,若后者小则交换,因此在这里下标 j要从最后开始,即 int j=_n一 1。 (3)考查交换算法,在 if语句中_sj三、综合应用题(总题数:1,分数:2.00)4.请使用 VC6或使用【答题】菜单打开考生文件夹 oroj3下的工程 proj3,其中声明了 SortedList类,是一个用于表示有序数据表的类。其成员函数 insert的功能是将一个数据插入到一个有序表中,使得该数据表仍然保持有序。请编写这个 insert函数。程序的正确输出应为: 插入前: 1,2,4,5,7,8,10 插入 6和 3后: 1,2,3,4,5,6,7,8,10 要求: 补充编制的内容写在“*333*”与“*6
27、66*”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件 outdat 中。输出函数 wfiteToFfle已经编译为 obj文件,并且在本程序中调用。/SortedList,h#includeiostreamusing namespace std;class SortedList有序数据表类 int len; double*d;public: SortedList(int len,double data=NULL); 一SortedList()deleted;) int length()constreturn len;)有序数据表长度(即元素的个数) double getElem
28、ent(int i)cons treturn di; void insert(double data); void show()const;显示有序数据表;void writeToFile(char*,const Sort edLiSt);maincpp#include”SortedListh”SortedLiSt: SortedList (int len,double data):len(len)( d=new doublelen; for(int k=0;klen;k+) dk=(data=NULL?00:datak); for(int i=0;ilen 一 1;i+) int m=i;
29、for(int j=i;jlen;j+) if(djdm)m=j; if(mi) double t=dm; dm=di; di=t; void SortedList:insert(double data)*333*666*void SortedList:show()const显示有序数据表 for(int i=0;ilen 一 1;i+) coutdi”,”; coutd1en1endl;int main()double S=5,8,1,2,10,4,7;SortedList list(7,S);cout“插入前:”endl;listshow();listinsert(60);liStinse
30、rt(30);cout“插入 6和 3后:”endl;listshow();writeToFile(”,list);return 0;(分数:2.00)_正确答案:(正确答案:for(int 1=0 ; ilen;+i) 遍历数组 d if(datadi) 如果 data小于 di len+; 数组 d的长度自加 1 double*dd =new double len; 分配长度为 len空间 for(int k=len;ki ; k 一一) 在数组 d中从 k等于 len到 i做遍历 ddk=dk 一 1; 把dk一 1赋值给 ddk ddi=data; 把 data赋值给 ddi for(
31、int J=0;ji;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; 跳出循环 )解析:解析:主要考查考生对插入算法的掌握,题目要求 insert函数的功能是将一个数据插入到一个有序表中,使得该数据表仍保持有序。可以知道数据表 d是一组有序的数组,那么就采取先比较再插入的步骤完成即可。 要注意动态数组 d的长度是确定的,要添加元素,就要重新分配空间。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1