1、国家二级 C+机试(操作题)模拟试卷 313及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。 本程序完成以下功能: (1)获得输入的两个数字 x1,x2(例如 x1=4,x2=2); (2)输出两个中较小的一个(例如输出 2); (3)计算 x1x2 如果 x2等于 0,返回1(输出结果 2); (4)输出 x1+x2的结果(输出结果 6); (5)输出 x1+1的结果(输出结果 5); (6)
2、输出 x2-1的结果(输出结果 1)。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostreamhvoid main() int x1; int x2; int x3; cout“please input two number:“endl; Cinx1x2; *error* x3=(x1x2)?x1:x2; cout“Min number is :“x3endl;计算 x1x2 如果 x2等于 0,返回-1 *error* x3=(x2)?x1x2=-1; cout“xlx2= “x3endl; *error* x3
3、= (-x1) + (x2+);cout“xl+x2= “x3endl; cout“xl+1= “x1endl; cout“x21= ”x2endl; return;(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。请完成以下两个函数: (1)fun1(int n1;求出n的阶乘,必须使用递归调用。 (2)fun2(int n);求出 n的阶乘,不能使用递归调用。 如果 n小于 1则返回 0。 注意:请勿改动主函数 main与其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。#includeios
4、treamh必须使用递归 int funl(int n);不能使用递归 int fun2(int n)void main() int i; cout“请输入一个整数:“endl; cini; tout“输入数字的阶乘是:“fun1(i)endl; cout“输入数字的阶乘是:“fun2(i)endl, return; (分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp,其中定义了用于表示坐标的类 TestClass1,但类 TestClass1的定义并不完整,按要求完成下列操作,将类的定义补充完整。 (1)声明 Tes
5、tClass2类为TestClass1类的友元类,请在注释*1*后添加适当的语句。 (2)完成类的构造函数,分别对成员变量赋值,请在注释*2*后添加适当的语句。 (3)完成类的构造函数,分别对成员变量赋值,请在注释*3*后添加适当的语句。 (4)完成计算平面上两点之间的距离函数 Distance,计算的方法如下:X 坐标之差的平方与 Y坐标之差的平方之和的开方。请在注释*4*后添加适当的语句。 注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。#includeiostream#includecmathusing namespace std;Class TestCl
6、ass1*1*public: *2* X=a; Y=b; *3* X=a; Y=0; Void print() cout“x=“Xendl; cout“y=“Yendl; private: float X , Y;Class TestClass2public: float Distance(TestClaSslp,TestClass1q);float TestClass2:Distance(TestClass1p,TestClass1q) float result; *4* coutresultendl; return result ;int main() TestClassl p(10,10
7、),q(20); TestClass2 d; dDistance(p,q); return 0;(分数:2.00)_国家二级 C+机试(操作题)模拟试卷 313答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。 本程序完成以下功能: (1)获得输入的两个数字 x1,x2(例如 x1=4,x2=2); (2)输出两个中较小的一个(例如输出 2); (3)计算 x1x2 如果 x2等于 0,返回1(输出
8、结果 2); (4)输出 x1+x2的结果(输出结果 6); (5)输出 x1+1的结果(输出结果 5); (6)输出 x2-1的结果(输出结果 1)。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。#includeiostreamhvoid main() int x1; int x2; int x3; cout“please input two number:“endl; Cinx1x2; *error* x3=(x1x2)?x1:x2; cout“Min number is :“x3endl;计算 x1x2 如果 x2等于 0,返回-
9、1 *error* x3=(x2)?x1x2=-1; cout“xlx2= “x3endl; *error* x3= (-x1) + (x2+);cout“xl+x2= “x3endl; cout“xl+1= “x1endl; cout“x21= ”x2endl; return;(分数:2.00)_正确答案:(正确答案:(1)x3 = (x1x2)?x1:x2; (2)x3 = (x2)?x1x2:-1; (3)x3 = (x1+) + (x2-);)解析:解析:(1)第 1个标识下“x3=(x1x2)?x1:x2;”语句是判断 x1与 x2其中哪个相对较小,并将其赋值给 x3。条件运算符的格
10、式:表达式 1 7表达式 2:表达式 3。执行顺序是先求解表达式 1,若非则求解表达式 3,此时表达式 3的值就作为整个条件表达式值。所以求 x1和 X2中较小的一个,如果 x1x2为真,那么 x1的值赋给 x3,否则 x2的值赋给 x3,即第 1个标识下为“x3:(x1x2)?x1:x2;”。 (2)同理,第 2个标识下计算 x1x2 如果 x2等于 0,返回-1。即“x3=(x2)?x1x2:-1;”。 (3)题干中求x1+1,而-x1 是 x1-1,所以改为 x1+。同理 x2+改为 x2-。即“x3=(x1+)+(x2-);”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC
11、6打开考生文件夹下的源程序文件 modi2cpp。请完成以下两个函数: (1)fun1(int n1;求出n的阶乘,必须使用递归调用。 (2)fun2(int n);求出 n的阶乘,不能使用递归调用。 如果 n小于 1则返回 0。 注意:请勿改动主函数 main与其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。#includeiostreamh必须使用递归 int funl(int n);不能使用递归 int fun2(int n)void main() int i; cout“请输入一个整数:“endl; cini; tout“输入数字的阶乘是:“fun1(i)endl
12、; cout“输入数字的阶乘是:“fun2(i)endl, return; (分数:2.00)_正确答案:(正确答案:int funl(int n)使用递归计算阶乘 if(n=0)n 小于等于 0,直接返回 0 return 0; if(n=1) n 等于 1直接返回 1 return 1; return n*funl(n-1);n 大于等于1,通过递归计算 n! j; 不使用递归计算阶乘 int fun2(int n) if(n=0)n 小于 0,直接返回 0 return 0; int res=1; 初始化阶乘存放变量 res for(int i=1;i=n;i+) 通过循环计算 n! r
13、es*=i; return res; )解析:解析:(1)进入 fun1函数,根据前面的定义,它对阶乘算法的实现可以分为三种情况,一是当 n小于或等于 0时,返回 0即可;二是当 n大于 1时应该用什么程序来实现阶乘的计算:三是当 n=1时,函数直接返回 1即可。 (2)计算 n!的值,先定义一个放阶乘值的变量 res,初值为 1,通过循环的方法,用累乘器“res*=i;”实现 n!。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp,其中定义了用于表示坐标的类 TestClass1,但类 TestClass1的定义并不完整,按要求完成下
14、列操作,将类的定义补充完整。 (1)声明 TestClass2类为TestClass1类的友元类,请在注释*1*后添加适当的语句。 (2)完成类的构造函数,分别对成员变量赋值,请在注释*2*后添加适当的语句。 (3)完成类的构造函数,分别对成员变量赋值,请在注释*3*后添加适当的语句。 (4)完成计算平面上两点之间的距离函数 Distance,计算的方法如下:X 坐标之差的平方与 Y坐标之差的平方之和的开方。请在注释*4*后添加适当的语句。 注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。#includeiostream#includecmathusing na
15、mespace std;Class TestClass1*1*public: *2* X=a; Y=b; *3* X=a; Y=0; Void print() cout“x=“Xendl; cout“y=“Yendl; private: float X , Y;Class TestClass2public: float Distance(TestClaSslp,TestClass1q);float TestClass2:Distance(TestClass1p,TestClass1q) float result; *4* coutresultendl; return result ;int m
16、ain() TestClassl p(10,10),q(20); TestClass2 d; dDistance(p,q); return 0;(分数:2.00)_正确答案:(正确答案:(1)添加语句:friend class TestClass2; (2)添加语句:TestClass1(float a,float b) (3)添加语句:TestClass1(float a) (4)添加语句: result=sqrt(pXqX)*(pXqX)+(pYqY)*(pYqY);)解析:解析:(1)题目 1要求“声明 TestClass2类为 TestClass1类的友元类”。C+中声明友元类的一般形
17、式为 friend类名;,所以这里补全“friend classTestClass2;”。 (2)题目 2要求“完成类的构造函数,分别对成员变量赋值”。程序中 TestClass1类的构造函数缺少定义,构造函数首部的一般格式为:构造函数名(类型 1形参 1,类型 2形参 2,),所以在第 2个标识下补全“TestClass1(float a,float b)”。 (3)题目 3要求“完成类的构造函数,分别对成员变量赋值”。同理,第三个标识下补全“TestClass1(float a)”。 (4)题目 4要求“完成计算平面上两点之间的距离函数 Distance”。题目中已经给出了计算方法,X 坐标之差的平方与 Y坐标之差的平方之和的开方。利用 C+中的开方函数 sqrt补全函数中的两点之间的距离。即:result=sqrt(pXqX)*(pX-qX)+(pY-qY)*(pYqY);