1、国家二级 C+机试(操作题)-试卷 139及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi lcpp,该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为: ABCDEF ABCDEF ABCDEF 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。 #include void main() *error* char S1=“ABC ”DEF”; *error* char s2=”ABC DEF”; *error* char S
2、3=”ABC”+ ”DEF”; couts1s2S3_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。完成 fun()函数,其功能是:求出 M行 N列二维数组每行元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。 注意:不能修改程序的其他部分,只能修改 fun()函数。 #include #define M 2 #define N 4 void fun(int aMN,int*sum) void main() int xMN=7,6,5,2,4,2,8,3); int s; fun(x, C1ass TestClassl
3、*1* public: *2* X=a; Y=b: *3* X=a ; Y=0 ; void print() coutXYresult_国家二级 C+机试(操作题)-试卷 139答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi lcpp,该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为: ABCDEF ABCDEF ABCDEF 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。 #include void main() *e
4、rror* char S1=“ABC ”DEF”; *error* char s2=”ABC DEF”; *error* char S3=”ABC”+ ”DEF”; couts1s2S3_正确答案:(正确答案:(1)char sl=“ABC” (2)char s2=“ABC (3)char S3=“ABC”)解析:解析:程序要求输出字符串数组的值。从已定源程序的 main 主函数开始入手,可以看出程序通过输出函数 cout实现三个字符串数组值的输出。 解题思路 (1)字符串数组以“:”结束赋值语句,所以“ABC“DEF”应该是字符串数组 sl的赋值语句,它的错误提示“modilcpp(5):e
5、rror C2001:newline in constant liPIt说明“DEF”被认为是新的值,根据题目要求它其实应该是与 ABC是一个数组串的,所以应该在”ABC 后面添加“”,即第 1个标识下修改为“char s1=”ABC”“。 (2)根据题目中给出的输出结果,知道 s2的输出也是 ABCDEF,那么说明第 2个标识下的 s2值应该是 ABCDEF,第一行与第二行是一个字符串。在 C+中,在一个字符串中最后一个字符为“”则标识它是续行符,下一行的字符是该字符串的一部分,所以在第一行的 ABC后面添加“”即“char s2=“ABC”。 (3)字符串数组 s3的赋值语句,错误提示“m
6、odilcpp(12):error C2110:cannot add two pointers”不能添加两个指针,不是用“+”来连接的,两个字符串变量之间不可以用“+”连接,所以这里删除“+”,即第 3个标识下修改为“char s3=“ABC”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。完成 fun()函数,其功能是:求出 M行 N列二维数组每行元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。 注意:不能修改程序的其他部分,只能修改 fun()函数。 #include #define M 2 #define N 4
7、 void fun(int aMN,int*sum) void main() int xMN=7,6,5,2,4,2,8,3); int s; fun(x, C1ass TestClassl *1* public: *2* X=a; Y=b: *3* X=a ; Y=0 ; void print() coutXYresult_正确答案:(正确答案:(1)添加语句:friend class TestClass2; (2)添加语句:TestClassl(float a,float b) (3)添加语句:TestClassl(float a) (4)添加语句:result=sqrt(pX-qx)*(
8、pXqX)+(pYqY)*(pYqY);)解析:解析:在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的 main主函数开始入手,可以看出程序通过调用类 TestClass实现各种输出操作。 解题思路 (1)题目 l要求“声明 TestClass2类为 TestClassl类的友元类”。C+中声明友元类的一般形式为 friend类名;,所以这里补全“friend class TestClass2;”。 (2)题目 2要求“完成类的构造函数,分别对成员变量赋值”。程序中 TestClassl类的构造函数缺少定义,构造函数首部的一般格式为:构造函数名(类型 1形参 l,类型 2形参 2,),所以在第 2个标识下补全“TestClassl(floata,floatb)”。 (3)题目 3要求“完成类的构造函数,分别对成员变量赋值“。同理,第三个标识下补全“TestClassl(float a)”。 (4)题目 4要求“完成计算平面上两点之间的距离函数Distance”。题目中已经给出了计算方法,X 坐标之差的平方与 Y坐标之差的平方之和的开方。利用 C+中的开方函数 sqrt补全函数中的两点之间的距离。即“result=-sqrt(pX-qX)*(pXqx)+(pY-qY)*(pY-qY);”。