1、二级 C+机试-89 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test20_1,此工程包含一个源程序文件 test21_1cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:(1,2)5,6(6,9)源程序文件 test20_1.cpp 清单如下:#includeiostream.hclass Apublic:A(int i,int j) a=i; b=j; /* found */void Move( int x, iht y) a+=x;b+=yvoid Show() cou
2、t “(“a“,“b“)“end1;private :int a,b;class B:private Apublic:/* found */B(int i,int j,int k, int 1): (i,j) x=k;y=1;void Show () coutx“, “yend1; void fun() Move(3,5); /* found */void f1() Show();private:int x,y;void main ()A e(1,2);e. Show ( );B d(3,4,5,6);d. fun();d. Show ( );d.f1();(分数:33.00)填空项 1:_二
3、、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int pattern_index(char substr,char str),该函数执行含通配符“?”的字符串的查找时,该通配符可以与任一个字符匹配成功。当子串 substr 在 str 中匹配查找成功时,返回子串substr 在 str 中的位置,否则返回值为 0。要求使用 for 循环实现。输出结果如下:子串起始位置:5注意:部分源程序已存在文件 test20_2.cpp 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 pattern_index 的花括号中填写若干语句。文件 test20_2.cpp 的内
4、容如下:#includeiostream.hint pattern_index(char substr,char str)void main ( )char *substring,*string;int same;substring=“?gram“;string=“this program return index of substring“;same=pattern_index(substring, string);if(same)cout“子串起始位置: “sameend1;elsecout“匹配不成功“ end1;(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.
5、使用 VC6 打开考生文件夹下的工程 test20_3,此工程包含一个源程序文件 test20_3.cpp,其中定义了用于表示复数的类 comp,但类 comp 的定义并不完整。请按要求完成下列操作,将类 comp 的定义补充完整。(1)定义 comp 的构造函数,函数含参数 x 和 y,它们都是 int 型的数据,默认值都为 0,请使用参数列表的形式分别将类数据成员 a 和 b 初始化 x 和 y 的值。请在注释“/*1*”之后添加适当的语句。(2)完成类 comp 的成员函数 input(int x,int y)的定义,将 int 型的参数 x 和 y 分别赋值给数据成员 s和 b,请在注
6、释“/*2*”之后添加适当的语句;(3)完成类 comp 的友元函数 friend compplus(comp int b;public:/*1*friend comp plus(comp void input(int x,int y)/*2*void output ( )couta+b“i“end1;comp plus(comp return c;void main()comp x(10,20),y,z;y.input(2,3);z=plus(x,y);x.output();y.output();cout“result:“;z.output();(分数:34.00)_二级 C+机试-89 答
7、案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test20_1,此工程包含一个源程序文件 test21_1cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:(1,2)5,6(6,9)源程序文件 test20_1.cpp 清单如下:#includeiostream.hclass Apublic:A(int i,int j) a=i; b=j; /* found */void Move( int x, iht y) a+=x;b+=yvoid Show() cout “(“a“,“b“)“
8、end1;private :int a,b;class B:private Apublic:/* found */B(int i,int j,int k, int 1): (i,j) x=k;y=1;void Show () coutx“, “yend1; void fun() Move(3,5); /* found */void f1() Show();private:int x,y;void main ()A e(1,2);e. Show ( );B d(3,4,5,6);d. fun();d. Show ( );d.f1();(分数:33.00)填空项 1:_ (正确答案:(1)错误:v
9、oid Move(int x,int y)a+=x;b+=y正确:void Move(int x,int y)a+=x;b+=y;(2)错误:B(int i,int j,int k,int1):(i,j)(x=k;y=1;正确:B(in i,int j,int k,int 1):A(i,j)x=k;y=1;(3)错误:void f1()Show();正确:viid f1()A:Show();)解析:解析(1)主要考查考生对于表达式定义规则的掌握,此处缺少一个“;”,任何表达式都应该以“;”作为结束标志;(2)主要考查考生对于派生类构造函数定义的掌握,参数列表中基类的成员应使用基类构造函数初始化
10、,所以必须向基类传递参数,传递时直接使用基类名;(3)主要考查考生对于基类函数调用方法的掌握,为了调用基类的函数应该使用作用域符“:”以限定访问的位置。二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 int pattern_index(char substr,char str),该函数执行含通配符“?”的字符串的查找时,该通配符可以与任一个字符匹配成功。当子串 substr 在 str 中匹配查找成功时,返回子串substr 在 str 中的位置,否则返回值为 0。要求使用 for 循环实现。输出结果如下:子串起始位置:5注意:部分源程序已存在文件 test20_2.cpp
11、 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 pattern_index 的花括号中填写若干语句。文件 test20_2.cpp 的内容如下:#includeiostream.hint pattern_index(char substr,char str)void main ( )char *substring,*string;int same;substring=“?gram“;string=“this program return index of substring“;same=pattern_index(substring, string);if(same)cout
12、“子串起始位置: “sameend1;elsecout“匹配不成功“ end1;(分数:33.00)_正确答案:(int pattern_index(char substr,char str)int i,j,k;for(i=0;stri;i+)for(j=i,k=0;(strj=substrk)|(substrk=?);j+,k+)if(!substrk+1)return(i);return(0);)解析:解析本题主要考查的是考生使用 for 循环和一维数组的综合能力。对于复杂查找,往往使用 for的多重循环,注意里层 for 循环用来查找字符串的使用三、3综合应用题(总题数:1,分数:34.
13、00)3.使用 VC6 打开考生文件夹下的工程 test20_3,此工程包含一个源程序文件 test20_3.cpp,其中定义了用于表示复数的类 comp,但类 comp 的定义并不完整。请按要求完成下列操作,将类 comp 的定义补充完整。(1)定义 comp 的构造函数,函数含参数 x 和 y,它们都是 int 型的数据,默认值都为 0,请使用参数列表的形式分别将类数据成员 a 和 b 初始化 x 和 y 的值。请在注释“/*1*”之后添加适当的语句。(2)完成类 comp 的成员函数 input(int x,int y)的定义,将 int 型的参数 x 和 y 分别赋值给数据成员 s和
14、b,请在注释“/*2*”之后添加适当的语句;(3)完成类 comp 的友元函数 friend compplus(comp int b;public:/*1*friend comp plus(comp void input(int x,int y)/*2*void output ( )couta+b“i“end1;comp plus(comp return c;void main()comp x(10,20),y,z;y.input(2,3);z=plus(x,y);x.output();y.output();cout“result:“;z.output();(分数:34.00)_正确答案:(1)comp(int x=0,int y=0):a(x),b(y)(2)a=x;b=y;(3)comp c;ca=x. a+y. a;)解析:解析本题考查考生对于类的定义和友元函数定义的掌握,请注意(1)中的参数列表形式和(3)中对象使用“”访问它的数据成员。