1、二级 C+机试-181 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevProj3。此工程包含一个源程序文件 RevMain3.cpp。阅读文件中的程序代码,找出程序中的错误,并改正。源程序文件 RevMain3.cpp 清单如下:/RevMain3.cpp#includeiostreamusing namespace std;class MyClasspublic:/* * * * * * * * *found * * * * * * * * * */void MyClass(int a) va
2、lue=a;int Max(int x,int y)if(xy)return xy?x:y;elsereturn yvalue?y:value;/* * * * * * * * *found * * * * * * * * * */MyClass(int a)value=a;private:int value;int main()MyClass my(10);coutmyMax(20,30)end1;return 0;(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 void fun(int aa,int n,int x),其中 n 表示数组 aa 中元
3、素的个数,函数的功能是:计算前 x 项的和并放在 aax中,aa 数组中的元素值和 x 的值由主函数通过键盘读入。注意:用循环和数组实现。部分源程序已存在文件 PROC3.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 resort()的花括号中填写若干语句。文件 PROC3.cpp 中的程序清单如下:/PROC3.CPP#include iostreamusing namespace std;#define MAX 100int main ()void fun(int aa,int n, int x);int bbMAX,i,x,n;cout“Please enter the c
4、ounter of the number:/n“;cinn;cout“Please enter the number:/n“;for(i=0;in;i+)cinbbi;cout“Input the x:/n“;cinx;fun(bb, n,x);cout“The data after total: “bbxend1;return 0;void fun(int aa,int n, int x)/*(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj3。此工程包含一个源程序文件 MyMain3.cpp,其中定义的类并不完整。请
5、按要求完成下列操作,将类的定义补充完整。定义类 Planet 的保护数据成员 distance 和 revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance 为 double 型,revolve 为 int 型。请在注释“/*1*”之后添加适当的语句。定义类 Earth 的构造函数 Earth(double d,int r),并在其中计算地球绕太阳公转的轨道周长。假定:circumference=2*d*3.1416。请在注释“/*2*”之后添加适当的语句。定义类 Earth 的成员 show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太
6、阳公转的轨道周长。请在注释“/*3*”之后添加适当的语句。文件 MyMain3.cpp 中源程序如下:/MyMain3.cpp#includeiostreamusing namespace std;class Planetprotected:/* * 1 * *public:Planet(double d, int r)distance = d;revolve = r;class Earth:public Planetprivate:double circumference;public:/* * 2 * */* * 3 * *;int main ( )Earth obj (9300000,
7、365);obj. show;return 0;(分数:34.00)_二级 C+机试-181 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevProj3。此工程包含一个源程序文件 RevMain3.cpp。阅读文件中的程序代码,找出程序中的错误,并改正。源程序文件 RevMain3.cpp 清单如下:/RevMain3.cpp#includeiostreamusing namespace std;class MyClasspublic:/* * * * * * * * *found * * * *
8、* * * * * */void MyClass(int a) value=a;int Max(int x,int y)if(xy)return xy?x:y;elsereturn yvalue?y:value;/* * * * * * * * *found * * * * * * * * * */MyClass(int a)value=a;private:int value;int main()MyClass my(10);coutmyMax(20,30)end1;return 0;(分数:33.00)_正确答案:(正确的类 MyClass 定义为:class MyClasspublic:M
9、yClas(int a) value=a;int Max(int x,int y)if (xy)return xy?x:y;elsereturn ya?y:a;MyClass() private:value;)解析:解析 本题考核类的定义。程序中出现了 2 个出错标识符,说明此程序有 2 处错误。第 1 处错误:类的构造函数没有返回类型,而程序中将类的构造函数设为 void 型,显然是错误的。第 2 处错误:C+中类的析构函数中不能带有行参,所以程序中析构函数的定义是错误的。二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 void fun(int aa,int n,int
10、x),其中 n 表示数组 aa 中元素的个数,函数的功能是:计算前 x 项的和并放在 aax中,aa 数组中的元素值和 x 的值由主函数通过键盘读入。注意:用循环和数组实现。部分源程序已存在文件 PROC3.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 resort()的花括号中填写若干语句。文件 PROC3.cpp 中的程序清单如下:/PROC3.CPP#include iostreamusing namespace std;#define MAX 100int main ()void fun(int aa,int n, int x);int bbMAX,i,x,n;cout“
11、Please enter the counter of the number:/n“;cinn;cout“Please enter the number:/n“;for(i=0;in;i+)cinbbi;cout“Input the x:/n“;cinx;fun(bb, n,x);cout“The data after total: “bbxend1;return 0;void fun(int aa,int n, int x)/*(分数:33.00)_正确答案:(函数 fun()的实现如下:void fun(int aa,int n, int x)int i=0,sum=0;for (i=0;
12、 ix; i+)sum=sum+aa i;aa x =sum;)解析:解析 根据题意分析可得:本题要求考生统计一个数组中前 x 项的和。本题主要考查考生对数组作为形参的应用能力。计算数组 aa中前 x 项的和可以用循环语句 for 来实现。三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj3。此工程包含一个源程序文件 MyMain3.cpp,其中定义的类并不完整。请按要求完成下列操作,将类的定义补充完整。定义类 Planet 的保护数据成员 distance 和 revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distan
13、ce 为 double 型,revolve 为 int 型。请在注释“/*1*”之后添加适当的语句。定义类 Earth 的构造函数 Earth(double d,int r),并在其中计算地球绕太阳公转的轨道周长。假定:circumference=2*d*3.1416。请在注释“/*2*”之后添加适当的语句。定义类 Earth 的成员 show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释“/*3*”之后添加适当的语句。文件 MyMain3.cpp 中源程序如下:/MyMain3.cpp#includeiostreamusing names
14、pace std;class Planetprotected:/* * 1 * *public:Planet(double d, int r)distance = d;revolve = r;class Earth:public Planetprivate:double circumference;public:/* * 2 * */* * 3 * *;int main ( )Earth obj (9300000, 365);obj. show;return 0;(分数:34.00)_正确答案:(见解析。)解析:解析 本题主要考核类的继承与派生。第 1 处是完成类 Planet 的保护数据成员 distance 和 revolve 的定义,根据题意可填入:double distance;int revolve;第 2 处是定义类 Earth 的构造函数 Earth(double d,int r),并在其中计算地球绕太阳公转的轨道周长。由此可填入:Earth(double d,int r):Planet(d,r)circumference=2*d*3.1416;第 3 处是定义类 Earth 的成员 show(),用于显示所有信息。根据要求可填入:oid show()coutdistance“,“revolve“,“circumferenceend1;