1、二级 C+机试-86 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test27_1,此工程包含一个源程序文件 test27_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为;100源程序文件 test27_1.cpp 清单如下:#include iostream.htemplate class Tclass pairT valuel, value2;public:pair (T first, T second)valuel=first; value2=second;/* fo
2、und */char getmax ();/* found */T pairT:getmax ()T retval;/* found */retval = valuelvalue2? value1 : value2;return retval;void main ()pair int myobject (100, 75);cout myobject.getmax()end1;(分数:30.00)填空项 1:_二、2简单应用题(总题数:1,分数:40.00)2.请编写函数 fun(),其功能是将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除。字符串
3、中剩余的字符所形成的一个新的字符串放在 t 所指的数组中。例如:s 所指字符串中的内容为 ABCDEFG12345,其中字符 A,的 ASCII 码值虽为奇数,但元素所在的下标为偶数,因此必需删除;字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数,不删除,最后 t 所指的数组中的内容应是 135。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 su 的花括号中填写若干语句。文件 test 27_2.cpp 的内容如下;#include conio.h#include stdio.h#include iostream.h#include string.hvoid fun
4、(char *s,char t )void main ( )char s100,t100;cout“Please enter string S: “end1;gets(s);fun(s, t);puts(t);(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.(分数:30.00)_二级 C+机试-86 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)1.使用 VC6 打开考生文件夹下的工程 test27_1,此工程包含一个源程序文件 test27_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为;1
5、00源程序文件 test27_1.cpp 清单如下:#include iostream.htemplate class Tclass pairT valuel, value2;public:pair (T first, T second)valuel=first; value2=second;/* found */char getmax ();/* found */T pairT:getmax ()T retval;/* found */retval = valuelvalue2? value1 : value2;return retval;void main ()pair int myobj
6、ect (100, 75);cout myobject.getmax()end1;(分数:30.00)填空项 1:_ (正确答案:(1)错误:char getmax();正确:T getmax();(2)错误:缺少模板的声明正确:templateclassT(3)错误:retvalvaluelvalue2?value1:value2;正确:retvalvaluelvalue2?value1:value2;)解析:解析 (1)主要考查考生对于模板使用的理解,该函数属于模板类定义的一部分,对于返回值类型,应该使用模板类名称 T,这样编译的时候才能被接受:(2)主要考查考生是否掌握了模板的使用,前面
7、的模板类已经声明完成了,在类的外面定义类的成员函数时仍然需要使用模板的声明,这样在后面的函数定义体中才能使用模板类;(3)主要考查考生对于“表达式 17 表达式 2:表达式 3”语句的掌握,这个语句是一个复合语句,先计算第一个表达式,如果为真则整个式子值为表达式 2 的值,否则为表达式 3 的值,题目中错误的使用了两个问号;二、2简单应用题(总题数:1,分数:40.00)2.请编写函数 fun(),其功能是将 s 所指字符串中除了下标为奇数、同时 ASCII 值也为奇数的字符之外,其余的所有字符都删除。字符串中剩余的字符所形成的一个新的字符串放在 t 所指的数组中。例如:s 所指字符串中的内容
8、为 ABCDEFG12345,其中字符 A,的 ASCII 码值虽为奇数,但元素所在的下标为偶数,因此必需删除;字符 1 的 ASCII 码值为奇数,所在数组中的下标也为奇数,不删除,最后 t 所指的数组中的内容应是 135。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 su 的花括号中填写若干语句。文件 test 27_2.cpp 的内容如下;#include conio.h#include stdio.h#include iostream.h#include string.hvoid fun(char *s,char t )void main ( )char s100,t10
9、0;cout“Please enter string S: “end1;gets(s);fun(s, t);puts(t);(分数:40.00)_正确答案:(void fun(char *s,char t )int i,j=0,n;n=strlen(s);for(i=0;in;i+)if(i%2!=0j+;tj=/0;)解析:解析 在解答本题时,首先要清楚一点:那就是在字符参与数值运算时,用的是其 ASCII 码值来进行计算。另外的一个考查点是判断某数是奇数的方法,即判断该数与 2 的余数是否为 0。三、3综合应用题(总题数:1,分数:30.00)3.(分数:30.00)_正确答案:(1)if(i=0)(2)num=a.num;p=new intnum;(3)if(i=num|i0)(4)return * this;)解析:解析 主要考查考生对于一个特殊的类安全数组的掌握,其中涉及了友元函数、重载函数等,其中(2)中必需申请新的空间,这样可以使得两个对象分别占用不同的两个空间,在自动调用析构函数时不会遇到重复删除的问题,这种方法要掌握。