1、二级 C+机试-118 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.return 0;(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.*(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj7。此工程包含一个源程序文件 MyMain7.cpp。其中定义了类Sample,但类 Sample 的定义并不完整。请按要求完成下列操作,将类 Sample 的定义补充完成:定义私有数据成员 n,它是 int 型的数据。请在注释“/* *1*”之后添加适当
2、的语句。完成重载构造函数 Sample()的定义,使 Sample 对象的默认值:n=0。请在注释“/* *2* *”之后添加适当的语句。完成成员函数 add()的类体内的定义,使成员函数返回的 Sample 对象的值 n 为两类 Sample 对象 s1 和s2 的私有成员 n 的和。请在注释“/* *3* *”之后添加适当的语句。完成成员函数 disp()的类外定义,使其以“n=”的格式将 Sample 对象的值输出到屏幕上。请在注释“* *4* *”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 MyMain7.cpp 清单如下:/MyMain
3、7.cpp#includeiostreamusing namespace std;class Sampleprivate:/* * 1* *public:Sample()/* *2* *Sample add(Sample s1,Sample s2)/* *3* *void disp();void Sample: :disp()/* * 4 * *int main()Sample s1(10),s2(5),s3;cout“s1:“;s1.disp();cout“/n S2:“;s2,disp();s3.add(s1,S2);cout“/n s3.add(s1,s2)/n s3:“;s3.disp
4、();return 0;(分数:34.00)_二级 C+机试-118 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.return 0;(分数:33.00)_正确答案:(正确的 fun()函数为:void fun(char *p,char *q,char *c)int k=0;while(!*p)&(!*q)if(*p*q)ck=*q;elseck=*p;if(*p)p+;if(*q)q+;k+;)解析:解析 此题中主函数没有错误。其错误全部集中在函数 fun()中。分析函数 fun():整数 k 用来记录字符串 c 的偏移,因此 k 初始值
5、应该为 0。循环结束的条件应该是两个字符串指针都已经移到字符串尾部。在 while 循环体中,k 值应该递增。二、2简单应用题(总题数:1,分数:33.00)2.*(分数:33.00)_正确答案:(函数 check()的定义如下:int check(char *s)char*p1,*p2;int n;n=strlen(s);p1=s;p2=s+n-1;while(p1p2)if(*p1!=*p2)break;elsep1+;p2-;if(p1p2)return 0;elsereturn 1;)解析:解析 掌握循环以及指针的运算就易解此题。三、3综合应用题(总题数:1,分数:34.00)3.使用
6、 VC6 打开考生文件夹下的工程 MyProj7。此工程包含一个源程序文件 MyMain7.cpp。其中定义了类Sample,但类 Sample 的定义并不完整。请按要求完成下列操作,将类 Sample 的定义补充完成:定义私有数据成员 n,它是 int 型的数据。请在注释“/* *1*”之后添加适当的语句。完成重载构造函数 Sample()的定义,使 Sample 对象的默认值:n=0。请在注释“/* *2* *”之后添加适当的语句。完成成员函数 add()的类体内的定义,使成员函数返回的 Sample 对象的值 n 为两类 Sample 对象 s1 和s2 的私有成员 n 的和。请在注释“
7、/* *3* *”之后添加适当的语句。完成成员函数 disp()的类外定义,使其以“n=”的格式将 Sample 对象的值输出到屏幕上。请在注释“* *4* *”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 MyMain7.cpp 清单如下:/MyMain7.cpp#includeiostreamusing namespace std;class Sampleprivate:/* * 1* *public:Sample()/* *2* *Sample add(Sample s1,Sample s2)/* *3* *void disp();void
8、Sample: :disp()/* * 4 * *int main()Sample s1(10),s2(5),s3;cout“s1:“;s1.disp();cout“/n S2:“;s2,disp();s3.add(s1,S2);cout“/n s3.add(s1,s2)/n s3:“;s3.disp();return 0;(分数:34.00)_正确答案:(int n;Sample(int m=0)n=m;this-n=s1.n+s2.n=return(*this);cout“n=“nend1;)解析:解析 本题考核类与对象的操作。在第 1 处定义 int 型私有数据成员 n,填入:int n;在第 2 处完成重载构造函数 Sample 的定义,使 Sample 对象的默认值:n=0。所以应该填入:Sample(int m=0)n=m;在第 3 处完成成员函数 add()的类体内的定义,使成员函数返回的 Sample 对象的值 n 为两类 Sample 对象“和 s2 的私有成员 n 的和。可以采用 this 指针完成。在第 4 处完成成员函数 disp 的类外定义,使其以“n=”的格式将 Sample 对象的值输出到屏幕上,只要在函数中按照规定的输出格式输出数据成员 n 即可。