1、二级 C+机试-166 及答案解析(总分: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(int N4)的功能是用 4 个数字,组成互不相同且无重复数字的 3 位数,并将满足所
3、有条件的数字输出到屏幕,并且每输出一个 3 位数就换一行。程序分析:可填在百位、十位、个位的数字都是 1、2、3、0。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是 0,则也去掉。试题程序:#includeiostream.hvoid fun(int N4)int main()int N4=1,2,3,0;fun(N);return 0;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)基类 People 完成打印功能,定义其中的打印
4、函数为虚函数,请在注释 1 后添加适当的语句。(2)类 Boy 继承于 People,在构造函数中设置性别为 1,请在注释 2 后添加适当的语句。(3)类 Girl 继承于 People,在构造函数中设置性别为 0,请在注释 3 后添加适当的语句。(4)实现函数 fun,用于传递不同的类型,打印出性别,请在注释 4 后添加适当的语句。输出的内容如下:Sex=BoySex=Girl注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#includeiostream.hclass Peoplepublic:/*1*void print()int sex;class Boy:pub
5、lic Peoplepublic:Boy()/*2*void print()cout“Boy“end1;class Girl:public Peoplepublic:Girl()/*3*void print()cout“Girl“end1;/*&*eout“Sex=“;p.print();int main()Boy m;fun(m);Girl n;fun(n);return 0;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-166 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打
6、开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为TC1TC2注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.h#includeassert.hstruct TC0/*error*virtual void fun();class TC1:public TC0void fun()cout“TC1“end1;class TC2:public TC0void fun()cout“TC2“end1;void main()TC0 *p;TC
7、l 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 应该是纯虚函数,也就是声明虚函数时初始化为 0 的函数。即第 1 处的“virtual void fun()=0;”。第 2
8、 处的 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(int N4)的功能是用 4 个数字,组成互不相同且无重复数字的 3 位数,并将满足所有条件的数字输出到屏幕,并且每输出一个 3 位数就换一行。程序分析:可填在百位、十位、个位的数字都是 1、2、3、0。组成所有的排列后再去
9、掉不满足条件的排列。如果判定第一个数字是 0,则也去掉。试题程序:#includeiostream.hvoid fun(int N4)int main()int N4=1,2,3,0;fun(N);return 0;(分数:40.00)_正确答案:(int i,j,k;for(i=0;i4;i+) /百位循环for(j=0;j4;j+) /十位循环for(k=0;k4;k+) /个位循环if(i!=jj!=kk!=iNi!=0) /当三位数不同,并且百位不为 0coutNiNjNkend1; /输出这三位数组成的数字)解析:解析 本题利用 3 层循环,对 3 位数字是否相同进行判断。如果 3
10、位数不同,并且百位不为 0,那么依次输出这 3 位数,即由 3 位数组成的数字。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)基类 People 完成打印功能,定义其中的打印函数为虚函数,请在注释 1 后添加适当的语句。(2)类 Boy 继承于 People,在构造函数中设置性别为 1,请在注释 2 后添加适当的语句。(3)类 Girl 继承于 People,在构造函数中设置性别为 0,请在注释 3 后添加适当的语句。(4)实现函数 fun,用于传递不同的类型,打印
11、出性别,请在注释 4 后添加适当的语句。输出的内容如下:Sex=BoySex=Girl注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#includeiostream.hclass Peoplepublic:/*1*void print()int sex;class Boy:public Peoplepublic:Boy()/*2*void print()cout“Boy“end1;class Girl:public Peoplepublic:Girl()/*3*void print()cout“Girl“end1;/*&*eout“Sex=“;p.print();int
12、 main()Boy m;fun(m);Girl n;fun(n);return 0;(分数:30.00)填空项 1:_ (正确答案:将“void print();”补充完整为“virtual void print();”。)解析:填空项 1:_ (正确答案:应添加“sex=1;”。)解析:填空项 1:_ (正确答案:应添加“sex=0;”。)解析:填空项 1:_ (正确答案:应添加“void fun(Peoplep)”。)解析:解析 第 1 处要求“基类 People 完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明 virtual 就可以了,所以将
13、第 1 处的“void print()”语句修改为“virtual void print()”。第 2 处要求“类 Boy 继承于 People,在构造函数中设置性别为 1”。基类 People 中变量 sex 用来存放性别,Boy 继承 People,所以 Boy 中性别的变量可以使用基类中的 sex 变量,设置性别为 1,即“sex=1;”。第 3 处要求“类 Girl 继承于 People,在构造函数中设置性别为 0”。在第 3 处添加语句“sex=0;”。第 4 处要求“实现函数 fun,用于传递不同的类型,打印出性别”。根据“p.print();”语句知道,fun 函数的形参为指针 p,由于它调用了基类 People 中的成员函数print,所以 p 的基类为 People,即添加函数 fun 的定义为“void fun(Peoplep)”。