1、二级 C+机试-61 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test13_1,此工程包含一个源程序文件 test13_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:n=2n=5n=7源程序文件 test13_1 清单如下:#includeiostream.hclass Sampleint n;public:/* found *+*/Sample()Sample(int i)n=i;/* found *+*/void add(Sample s1,Sample s2)
2、/* found */this.n=s1-n+s2.n;void disp()cout“n=“nendl;void main()Sample s1(2),s2(5),s3;s3.add(&s1,s2);s1.disp();s2.disp();s3.disp();(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int fun (int nFirst, int nSecond),求两个数的最小公倍数并返回这个值。注意:部分源程序已存在文件 test13_2.cpp 中。如输入 7 和 8 时,结果是 56。请勿修改主函数 main 和其他函数中的任何内容,
3、仅在函数 fun 的花括号中填写若干语句。文件 test13_2 的内容如下;#includeiostream.hint fun(int nFirst,int nSecond);void main()int nFirst,nSecond;cout“Please input the first one“;cinnFirst;cout“ Please input the second one“;cinnSecond;cout“最小公倍数:“fun(nFirst,nSecond)endl;int fun(int nFirst,int nSecond)(分数:33.00)_三、综合应题(总题数:1,分
4、数:34.00)3.b. display();(分数:34.00)_二级 C+机试-61 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test13_1,此工程包含一个源程序文件 test13_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:n=2n=5n=7源程序文件 test13_1 清单如下:#includeiostream.hclass Sampleint n;public:/* found *+*/Sample()Sample(int i)n=i;/* found
5、*+*/void add(Sample s1,Sample s2)/* found */this.n=s1-n+s2.n;void disp()cout“n=“nendl;void main()Sample s1(2),s2(5),s3;s3.add(&s1,s2);s1.disp();s2.disp();s3.disp();(分数:33.00)_正确答案:(1)错误:Sample()正确:Sample()(2)错误:void add(Sample s1,Sample s2)正确:void add(Sample *s1,Sample s2)(3)错误:this.n=s1-n+s2.n;正确:t
6、his-n=s1-n+s2.n;)解析:解析(1)主要考查考生对于类的成员函数定义的掌握,应该使用 1)作为空的函数体,这是不能省略的;(2)主要考查考生对于指针调用的掌握,根据函数体中对于 s1 的使用可以看出,它是一个指针类型的变量,调用时实参应该使用“*”,形参使用“&”;(3)主要考查 this 指针的使用,this 是指向当前对象的指针,应该使用“-”访问成员。二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int fun (int nFirst, int nSecond),求两个数的最小公倍数并返回这个值。注意:部分源程序已存在文件 test13_2.cpp 中
7、。如输入 7 和 8 时,结果是 56。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填写若干语句。文件 test13_2 的内容如下;#includeiostream.hint fun(int nFirst,int nSecond);void main()int nFirst,nSecond;cout“Please input the first one“;cinnFirst;cout“ Please input the second one“;cinnSecond;cout“最小公倍数:“fun(nFirst,nSecond)endl;int fun(int
8、 nFirst,int nSecond)(分数:33.00)_正确答案:(int fun(int nFirst,int nSecond)int nMax,nMin;if (nFirstnSecond)nMin = nFirst;nMin = nSecond;elsenMax=nSecond;nMin=nFirst;int nMod=nMax % nMin;while(nMod)nMax=nMin;nMin=nMod;nMod=nMax % nMin;int nMultiple=nFirst*nSecond/nMin;return nMultiple;)解析:解析本题考查的是考生利用基本的控制语
9、句解决实际问题的能力。注意算法的设计,其中%是取余操作。三、综合应题(总题数:1,分数:34.00)3.b. display();(分数:34.00)_正确答案:(1)size=s;buffer=new intsize;(2)size=v.size;buffer=new intsize;(3)if(ndxO|ndx=size)(4)cout“d“endl;deletebuffer;)解析:解析本题主要考查考生对于类的构造函数与成员函数定义的掌握,注意(2)中赋值的应用,为了防止重复删除,不能直接将指针赋值,必须使用动态申请 new 建立一块新的空间,并且将原来对象的成员全部复制到新的空间中:(4)中对动态一维数组空间删除的时候,应该使用 delete 关键字,并不管原数组大小是多少,一律只写一对中括号“”加上变量名。