1、二级 C+机试-138 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为TC1TC2注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.h#includeassert.hstruct TC0/*error*virtual void fun();class TC1:public TC0void fun()cout“T
2、C1“end1;class TC2:public TC0void fun()cout“TC2“end1;void main()TC0 *p;TCl obj1;TC2 obj2;/*error*p=*obj1;pfun();/*error*p=*obj2;pfun();return;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。完成函数 fun(char *s1,char *s2)的空出部分。函数 fun(char *s1,char *s2)的功能是将在字符串 s1
3、中下标为偶数的字符,紧随其后重复出现一次,放在一个新串 s2 中,s2 中字符按原字符串中字符的顺序排列。(注意 0 为偶数)例如:当 s1 中的字符串为“abcdef”时,s2 中的字符串应为“aaccee”。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#includeiostream.hvoid fun(char *s1,char *s2)void main()char sl100,s2l00;cout“Please enter string string:“end1;cin.getline(s1,100);fun(s1,s2);cout“The res
4、ult is:“s2end1;return;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。请完成以下部分,实现在屏幕上输出为C3C2这个程序需要修改的部分,请按照以下部分实现。(1)类 C0 不能被实例化,请定义一个纯虚函数 print,在注释 1 后添加适当的语句。(2)类 C1 私有虚继承类 C0,请在注释 2 后添加适当的语句。(3)类 C2 公有继承于 C0,请在注释 3 后添加适当的语句。(4)类 C3 公有继承于 C2 与 C1,请在注释 4 后添加适当的语句。注意:增加代码,或者修改代码的位置已
5、经用符号表示出来。请不要修改其他的程序代码。试题程序:#includeiostream.hclass C0/*1*;/*2*class C1;public:void print()cout“C1“end1;/*3*class C2;public:void print()cout“C2“end1;/*4*Class C3;public:void print()cout“C3“end1;void main()C3 obj3;C2 obj2;obj3.print();obj2.print();return;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-1
6、38 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为TC1TC2注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.h#includeassert.hstruct TC0/*error*virtual void fun();class TC1:public TC0void fun()cout“TC1“end1;cl
7、ass TC2:public TC0void fun()cout“TC2“end1;void main()TC0 *p;TCl obj1;TC2 obj2;/*error*p=*obj1;pfun();/*error*p=*obj2;pfun();return;(分数:30.00)填空项 1:_ (正确答案:应改为“virtual void fun()=0;”。)解析:填空项 1:_ (正确答案:应改为“p=obj1;”。)解析:填空项 1:_ (正确答案:应改为“p=obj2;”。)解析:解析 如果在基类中不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数 fun
8、应该是纯虚函数,也就是声明虚函数时初始化为 0 的函数。即第 1 处的“virtual void fun()=0;”。第 2 处的 P 为指针变量,将对象 obj1 赋值给 p,实际上是 P 指向对象 obj1 的地址,所以将“p=*obj1;”修改为“p=obj1;”。第 3 处的“p=*obj2;”修改为“p=obj2;”。二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。完成函数 fun(char *s1,char *s2)的空出部分。函数 fun(char *s1,char *s2)的功能是将在字符串 s1 中下标为偶数的
9、字符,紧随其后重复出现一次,放在一个新串 s2 中,s2 中字符按原字符串中字符的顺序排列。(注意 0 为偶数)例如:当 s1 中的字符串为“abcdef”时,s2 中的字符串应为“aaccee”。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#includeiostream.hvoid fun(char *s1,char *s2)void main()char sl100,s2l00;cout“Please enter string string:“end1;cin.getline(s1,100);fun(s1,s2);cout“The result is:
10、“s2end1;return;(分数:40.00)_正确答案:(int i;for(i=0;s1i!=0;i+)/循环判断每一个字符if(i%2=0) /判断字符串中下标为偶数位置s2i=s1i;s2i+1=s1i;s2i+2=/0; /新串添加尾符)解析:解析 判断一个字符串中的某一字符下标 i 是否为偶数,可用“i%2=0”来判断。对串 s1 中各个字符串逐个进行考查,满足条件的字符就顺序放在新串 s2 中,否则就不存放。所有字符处理完成后,记得在新串 s2 的末尾加上结束符“/0”。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cp
11、p。请完成以下部分,实现在屏幕上输出为C3C2这个程序需要修改的部分,请按照以下部分实现。(1)类 C0 不能被实例化,请定义一个纯虚函数 print,在注释 1 后添加适当的语句。(2)类 C1 私有虚继承类 C0,请在注释 2 后添加适当的语句。(3)类 C2 公有继承于 C0,请在注释 3 后添加适当的语句。(4)类 C3 公有继承于 C2 与 C1,请在注释 4 后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#includeiostream.hclass C0/*1*;/*2*class C1;public:void pri
12、nt()cout“C1“end1;/*3*class C2;public:void print()cout“C2“end1;/*4*Class C3;public:void print()cout“C3“end1;void main()C3 obj3;C2 obj2;obj3.print();obj2.print();return;(分数:30.00)填空项 1:_ (正确答案:应添加“virtual void print()=0;”。)解析:填空项 1:_ (正确答案:“class C1:”应改为“class C1:virtual private C0”。)解析:填空项 1:_ (正确答案:“class C2:”应改为“class C2:public C0”。)解析:填空项 1:_ (正确答案:“class C3:”应改为“class C3:public C2,public C1”。)解析:解析 本题考查了类的继承。根据题意,第 1 处应该添加“virtual void print()=0;”。第 2处根据题意,在冒号后面应添加“virtual private C0”。第 3 处根据题意,冒号后应添加“public C0”。第 4 处根据题意,冒号后应添加“public C2,public C1”。