1、二级 C+机试-177 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevPrroj7。此工程包含一个源程序文件 RevMain7.cpp。在该文件中,函数 fun()的功能是:逐个比较 a、b 两个字符串对应位置中的字符,把 ASCII 码值大或相等的字符依次存放到 c 数组中,形成一个新的字符串。例如:若 a 中的字符串为 aBCDeFgH,b 中的字符串为ABcd,则 c 中的字符串为 aBcdeFgH。请改正程序中的错误,使它能得到正确结果。注意,不要改动主函数,不得删行或增行,也不得更改程
2、序的结构。源程序文件 RevMain7.cpp 中的程序清单如下:/RevMain7.cpp#includeiostream#includestringusing namespace std;void fun(char *p,char *q,char *c)int k=1;while(*p!=*q)if(*p*q)ck=*q;elseck=*p;if(*p)p+;if(*q)q+;int main()char a10=“aBCDeFgH“,b10=“ABcd“,c80=/0;fun(a,b,c);cout“The string a is “a/n;cout“The string b is “b
3、/n;cout“The string c is “cendl;return 0;(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.函数 check()用来判断字符串 s 是否是“回文”(顺读和倒读都一样的字符串称为“回文”,如 abcba)。若是回文,函数返回值为 1;否则返回值为 0。请完成此函数的定义。注意:部分源程序已存在考生文件夹的文件 PROC7.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 check()的花括号中填写若干语句。文件 PROC7.cpp 的内容如下:/PROC7.cpp#includeiostream#includestring
4、using namespace std;int check(char*s);int main()char str100,*p;cout“Input your string!“;cinstr;p=str;cout“The result is:“check(p)end1;int check(char*s)/ * * * * + * * *(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj7。此工程包含一个源程序文件 MyMain7.cpp。其中定义了类Sample,但类 Sample 的定义并不完整。请按要求完成下列操作,将
5、类 Sample 的定义补充完成:定义私有数据成员 n,它是 int 型的数据。请在注释“/* *1*”之后添加适当的语句。完成重载构造函数 Sample()的定义,使 Sample 对象的默认值:n=0。请在注释“/* *2* *”之后添加适当的语句。完成成员函数 add()的类体内的定义,使成员函数返回的 Sample 对象的值 n 为两类 Sample 对象 s1 和s2 的私有成员 n 的和。请在注释“/* *3* *”之后添加适当的语句。完成成员函数 disp()的类外定义,使其以“n=”的格式将 Sample 对象的值输出到屏幕上。请在注释“* *4* *”之后添加适当的语句。注意
6、:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 MyMain7.cpp 清单如下:/MyMain7.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
7、,disp();s3.add(s1,S2);cout“/n s3.add(s1,s2)/n s3:“;s3.disp();return 0;(分数:34.00)_二级 C+机试-177 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 RevPrroj7。此工程包含一个源程序文件 RevMain7.cpp。在该文件中,函数 fun()的功能是:逐个比较 a、b 两个字符串对应位置中的字符,把 ASCII 码值大或相等的字符依次存放到 c 数组中,形成一个新的字符串。例如:若 a 中的字符串为 aBCDeFg
8、H,b 中的字符串为ABcd,则 c 中的字符串为 aBcdeFgH。请改正程序中的错误,使它能得到正确结果。注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。源程序文件 RevMain7.cpp 中的程序清单如下:/RevMain7.cpp#includeiostream#includestringusing namespace std;void fun(char *p,char *q,char *c)int k=1;while(*p!=*q)if(*p*q)ck=*q;elseck=*p;if(*p)p+;if(*q)q+;int main()char a10=“aBCDeFgH
9、“,b10=“ABcd“,c80=/0;fun(a,b,c);cout“The string a is “a/n;cout“The string b is “b/n;cout“The string c is “cendl;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():整
10、数 k 用来记录字符串 c 的偏移,因此 k 初始值应该为 0。循环结束的条件应该是两个字符串指针都已经移到字符串尾部。在 while 循环体中,k 值应该递增。二、2简单应用题(总题数:1,分数:33.00)2.函数 check()用来判断字符串 s 是否是“回文”(顺读和倒读都一样的字符串称为“回文”,如 abcba)。若是回文,函数返回值为 1;否则返回值为 0。请完成此函数的定义。注意:部分源程序已存在考生文件夹的文件 PROC7.cpp 中。请勿修改主函数和其他函数中的任何内容,仅在函数 check()的花括号中填写若干语句。文件 PROC7.cpp 的内容如下:/PROC7.cpp
11、#includeiostream#includestringusing namespace std;int check(char*s);int main()char str100,*p;cout“Input your string!“;cinstr;p=str;cout“The result is:“check(p)end1;int check(char*s)/ * * * * + * * *(分数:33.00)_正确答案:(函数 check()的定义如下:int check(char *s)char*p1,*p2;int n;n=strlen(s);p1=s;p2=s+n-1;while(p
12、1p2)if(*p1!=*p2)break;elsep1+;p2-;if(p1p2)return 0;elsereturn 1;)解析:解析 掌握循环以及指针的运算就易解此题。三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 MyProj7。此工程包含一个源程序文件 MyMain7.cpp。其中定义了类Sample,但类 Sample 的定义并不完整。请按要求完成下列操作,将类 Sample 的定义补充完成:定义私有数据成员 n,它是 int 型的数据。请在注释“/* *1*”之后添加适当的语句。完成重载构造函数 Sample()的定义,使 Sample
13、 对象的默认值:n=0。请在注释“/* *2* *”之后添加适当的语句。完成成员函数 add()的类体内的定义,使成员函数返回的 Sample 对象的值 n 为两类 Sample 对象 s1 和s2 的私有成员 n 的和。请在注释“/* *3* *”之后添加适当的语句。完成成员函数 disp()的类外定义,使其以“n=”的格式将 Sample 对象的值输出到屏幕上。请在注释“* *4* *”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 MyMain7.cpp 清单如下:/MyMain7.cpp#includeiostreamusing namesp
14、ace 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();return 0;(分数:34.00)_正确答案:(int
15、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 即可。