1、二级 C+机试-78 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test8_1,此工程包含一个源程序文件 test8_l.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:f1 function of derivef2 function of basef4 function of base源程序文件 test8_1.cpp 清单如下;#includeiostream.hclass basepublic:*found*void f1()cout“f1 function of ba
2、se“endl;virtual void f2()cout“f2 function of base“endl;)virtual void f3()cout“f3 function of base“endl;)void f4()cout“f4 function of base“endl;);*+*found*class derive:public basevoid f1()cout“f1 function of derive“endl;)void f2(int x)cout“f2 function of derive“endl;)void f4()cout“f4 function of deri
3、ve“endl;);void main()base *p;derive obj2;*+*found*p=obj2;p-fl();p-f2();p-f4();(分数:33.00)填空项 1:_二、2简单应用题(总题数:1,分数:33.00)2.已知考生的记录由学号和学习成绩构成,N 名考生的数据已存入 a 结构体数组中。请编写函数 fun,该函数的功能是:找出成绩最低的考生记录,通过形参返回主函数(规定只有一个最低分)。已给予出函数的首部,请完成该函数。注意:部分源程序已存在文件 test8_2.cpp 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写
4、的若干语句。文件 test8_2.cpp 的内容如下:#includeiostream.h#includestring.h#includeconio.h#define N 10typedef struct sschar num10;int s;STU;void fun(STU a,STU *s)void main( )STUaN=“A01”,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77,“A06“,90,“A07“,79, “A08“,61,“A09“,80,“A10“,71,m;fun(a,cout“* The original date *“endl;cou
5、t“The lowest :“m.numm.sendl;(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 test8_3,此工程包含一个源程序文件 test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。(1)定义类 Table 的私有数据成员 x 和 y,分别用于表示九九表中的两个乘数(x*y),它们都是 int 型的数据。请在注释“/*1*”之后添加适当的语句;(2)完成类 Table 的成员函数 prin()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘
6、法算式,请使用格式化输出函数 prinff 实现,在注释“/*2*”之后添加适当的语句;(3)完成类 Table9 的成员函数 print()的定义,该函数调用基类 Table 的 print()函数,将九九表输出到屏幕,请在注释“/*3*”之后添加适当的语句;(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“/*4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 test8_3.cpp 清单如下:#includeiostream.h#includestdio.hclass Table/*1*int z;public:vo
7、id print(int x,int y,int z);void Table:print(int x,int y,int z)/*2*class Table9:public Tablepublic:void print();void Table9:print()/*3*int x,y,z;for (i=1;i1O;i+)for(j=1;ji+1;j+)x=i;y=j;z=i*j;Table:print(y,x,z);printf(“/n“);main()/+*4*return 0;(分数:34.00)_二级 C+机试-78 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题
8、数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test8_1,此工程包含一个源程序文件 test8_l.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:f1 function of derivef2 function of basef4 function of base源程序文件 test8_1.cpp 清单如下;#includeiostream.hclass basepublic:*found*void f1()cout“f1 function of base“endl;virtual void f2()cout“f2 function of ba
9、se“endl;)virtual void f3()cout“f3 function of base“endl;)void f4()cout“f4 function of base“endl;);*+*found*class derive:public basevoid f1()cout“f1 function of derive“endl;)void f2(int x)cout“f2 function of derive“endl;)void f4()cout“f4 function of derive“endl;);void main()base *p;derive obj2;*+*fou
10、nd*p=obj2;p-fl();p-f2();p-f4();(分数:33.00)填空项 1:_ (正确答案:(1)错误:void f1()cout“f1 function of base“end1;)正确:virtual void fl()cout“fl function of base“end1;(2)错误:class derive:public base正确:class derive:public base(3)错误:p=obj2;正确:p=)解析:解析(1)主要考查考生对于虚函数的深刻理解,虚函数是动态联编的基础,也是实现多态性的重要方法,它可以根据不同的情况动态的选择执行哪一个函数。
11、在派生类中实现虚函数应该满足与基类的同名函数完全相同,并且使用关键字 virtual 修饰,本题中由输出结果中的 fl function of derive 可知,必须将基类base 的成员函数 n()定义为虚函数:(2)主要考查考生对派生类定义格式的掌握,应该使用“:”后面是继承列表,而“:”是作用域符;(3)主要考查点为类对象的定义与使用,p 是一个指针类型的变量,给它的赋值应是一个地址,即使用取地址操作符int s;STU;void fun(STU a,STU *s)void main( )STUaN=“A01”,81,“A02“,89,“A03“,66,“A04“,87,“A05“,7
12、7,“A06“,90,“A07“,79, “A08“,61,“A09“,80,“A10“,71,m;fun(a,cout“* The original date *“endl;cout“The lowest :“m.numm.sendl;(分数:33.00)_正确答案:(fun(STU a,STU *s)int i,min;min=a0.s;for(i=0;iN;i+)if(ai .smin)min=ai.s;*s=ai;)解析:解析 首先假设第一个考生的成绩最优,通过循环找到最低成绩,并将最低成绩的考生记录传给指针 s,带回主函数。三、3综合应用题(总题数:1,分数:34.00)3.使用 V
13、C6 打开考生文件夹下的工程 test8_3,此工程包含一个源程序文件 test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。(1)定义类 Table 的私有数据成员 x 和 y,分别用于表示九九表中的两个乘数(x*y),它们都是 int 型的数据。请在注释“/*1*”之后添加适当的语句;(2)完成类 Table 的成员函数 prin()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数 prinff 实现,在注释“/*2*”之后添加适当的语句;(3)完成类 Table9 的成员函数 print
14、()的定义,该函数调用基类 Table 的 print()函数,将九九表输出到屏幕,请在注释“/*3*”之后添加适当的语句;(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“/*4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件 test8_3.cpp 清单如下:#includeiostream.h#includestdio.hclass Table/*1*int z;public:void print(int x,int y,int z);void Table:print(int x,int y,int z)/*2*cl
15、ass Table9:public Tablepublic:void print();void Table9:print()/*3*int x,y,z;for (i=1;i1O;i+)for(j=1;ji+1;j+)x=i;y=j;z=i*j;Table:print(y,x,z);printf(“/n“);main()/+*4*return 0;(分数:34.00)_正确答案:(1)int x;int y;(2)printf(“%d*%d=%d“,x,y,z);if(z10)printf(“);(3)int i,j;(4)Table9 t_9;t_9.print();)解析:解析 主要考查考生将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力。注意(2)中格式化输出函数 pnnfl 的使用格式,d 代表输出的为整型。