1、国家二级 C+机试(操作题)模拟试卷 105及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果: (4, 5) 7, 8 (4, 8) 注意:错误的语句在 *error*的下面,修改该语句即可。 #include clasS Cobj 0 public: cobj 0(int i, int j) x=i ; y=j ; *4* virtual void move(int a;int b) x+=a; y+=b; void print() cout int amicableNum(
2、int n) int sum=0; for(int i=1; i #include class Rectangle public: int left t right l top l bottom; *1* left=1; right=r; top=t ; bottom=b; *2* 1eft=rc 1eft; right=rc right; top =rc top ; bottom=rc bottom; float Diagonal() *3* return int Girth() *4* return ; int main() Rectangle rect(20, 50, 40, 80);
3、Rectangle rect2(rect); cout(),参数表中各参数之间应该用 “, ”隔开,因此第 1个标识下应改为 “virtual void move(int a, int b)”0 (2)在主函数里 “CObjl objl(1, 3,7, 8); ”,可知构造函数 CObjl()有四个参数,完成变量 m、 n、 x和 Y的初始化, k和 l赋值给 m和 n, i和 j赋值给 X和 Y, X和y的初始化可通过基类构造函数来完成对 X和 Y的初始化,第 2个标识下应改为CObj 1(int i,int j, int k, int 1): CObjO(id)。 (3)由程序运行结果可知
4、标识 3下调用的是基类的 print()数,而 “print(); ”是调用的派生类的 print()函数,因此此时只能通过类名来直接调用 print()函数,即第 3个标识下应改为 “CObj0: print(); ”0 二、简单应用题 2 【正确答案】 if(amicableNum(m)=n return 0; 【试题解析】 (1)程序中定义了两个 amicableNumO函数,由于参数个数不同重载了 amicableNumO函数,函数 amicableNum(intn)返回 n的因子和,而函数amicableNum(int in, int n)lJ是判断 m和 n是不是亲和数,两个函数功
5、能并不相同。 (2)在 amicableNum(int m, int n)函数中,可调用 amicableNum(hat n)函数求 m和11的凶子和,然后比较两个因子和,如果两个因子和相同则返回真,否则返回假。 三、综合应用题 3 【正确答案】 (1)添加语句: Rectangle(int 1, int r, intt, int b) (2)添加语句: Rectangle(Rectangle解题思路 (1)构造函数函数名和类名一致,构造函数可以重载,即多个构造函数有相同的名字不同的参数,显然题目当中两个构造函数均有参数,由函数体体内 “left=1;right=r; top=t; botto
6、m=b; ”,说明 l, r, t, b为构造函数的参数,因此第 1标识处应添加 “Rectangle(int 1, int r,int t,int b)”。 (2)和题目 1一样,构造函数名和类名一致,函数体内: “left: re 1eft;right=re right; top=rc top; bottom=rc bottom; ”,显然 re是 Rect对象,故该构造函数的参数为 re对象,故第 2标识处应添加 “Rectangle(Rectangle&rc)”。 (3)由对象的 left、 fight、 top、 boaom值可以求得矩形的长和宽,因此可采用勾股定理计算对角线长度,即第 3标识处补充完整为: return sqrt(rightleft)*(rightleft)+(bottom-top)*(bottom-top)。 (4)同样的周长可由长和宽的数值计算得到,长和宽之和的两倍即周长,第 4标识处补充完整为: return 2木 (rightleft)+rbottomtop)。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1