国家二级(C++)机试模拟试卷15(题后含答案及解析)_0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级(C++)机试模拟试卷15(题后含答案及解析) 题型有:1. 程序改错题 2. 简单应用题 3. 综合应用题
程序改错题(30分)
1.使用VC6打开考生文件夹下的工程test16_1,此工程包含一个源程序文件test16_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:Which act(a or b)?b act1 act2 Bact3 Bact4 Bend 源程序文件test16_1.cpp清单如下:#include<iostream.h>class A { public:virtual void act1( ){cout<<”actl\n”;act2( );} void act2( ){cout<<”act2\n”;act3( );} /**********+****** found *****************/ void act3( ){cout<<”Aact3\n”;act4( );} /***************** found *****************/ virtual void act4{cout<<”Aact4\n”;act5( );} void act5( ){cout<<”Aend\n”;} };class B:public A { void act3( ){cout<<”Bact3\n”;act4( );} void act4( ) {cout<<”Bact4\n”;act5( ) ;} void act5( ) {cout<<”Bend\n”;} }; void main (void) { char c; A *a; cout<<”Which act (a or b) ?”; /***************** found *****************/ cin<<c; if(c==‘a’) a = new A; else a = new B; a->act1 ( ); delete a; }
正确答案:(1)错误:voidact3( ){cout<<”Aact3\n”;act4( );} 正确:virtual void act3( ){cout<<”Aact3\n”;act4( );}(2)错误:virtual void act4{cout<<”Aact4\n”;act5( );} 正确:virtual void act4( ){cout<<”Aact4\n”;act5( );}(3)错误:cin<<c;正确:cin>>c;
解析:(1)主要考查考生对于虚函数使用规则的理解,要实现对函数act3的动态联编应该使用虚函数,这样在本题中对于函数的调用才能实现根据不同对象调用不同函数;(2)主要考查考生对于函数定义的掌握,虽然参数表为空,但括号是不能省略的:(3)主要考查考生是否会使用流输入操作,本题中使用的是流输出符。
简单应用题(40分)
2.编写类AA的成员函数int Compare(AAb), 该函数用于比较*this与b的大小,若两者含有元素的个数n相同,并且数组中前n个元素值对应相同,则认为两者相等返回1,否则返回0。
注意:用数组方式及for循环来实现该函数。
输出结果如下:a=b a<>C 注意:部分源程序已存在文件testl7_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数Compare的花括号中填写若干语句。
文件testl7_2.cpp的内容如下: #include<iostream.h>#include<stdlib.h>class AA { int *a; int n; int MS; public: void InitAA(int aa[], int nn, int ms) { if(nn>ms) { cout<<”Error!”<<end1; exit(1); }
MS=ms; n=nn; a=new int[MS]; for(int i=0; i<n; i++) a[i]=aa[i]; } int Compare(AA b); }; int AA::Compare(AA b) { } void main( ) { AA a,b,c; int x[]={1,2,3,4,5}; int y[]={1,2,3,6,7}; int z[]={1,2,5,7,9}; a. InitAA(x,3,5); b. InitAA(y,3,5); c. InitAA(z,3,5); if (pare(b)) cout<<”a=b”<<end1; else cout<<”a<>b”<<end1; if (pare(c)) cout<<”a=c”<<end1; else cout<<”a<>c”<<end1; }
正确答案:int AA::Compare(AA b) { if(n!=b.n) return 0;for(int i=0;i<n;i++) if(a[i]!=b.a[i]) return 0;return 1;}
解析:本题考查的是考生应用for循环、if条件控制语句等基本控制结构解决实际问题的能力。
注意有多种返回0的情况:个数不等或者前n个数不等都要返回0。
综合应用题(30分)
3.使用VC6打开考生文件夹下的工程test15_3。
此工程包含一个test15_3.cpp,其中定义了类Time和Timex,Timex公有继承Time,但定义并不完整。
请按要求完成下列操作,将程序补充完整。
(1)完成类Time构造函数的定义,将数据成员hours和minutes分别初始化为参数new_hours和new_minutes 的值。
请在注释“//**1**”之后添加适当的语句。
(2)完成类Timex的构造函数的定义,注意参数的传递。
请在注释“//**2**”之后添加适当的语句。
(3)请按时间格式“hour:minute”和“hour:minute:second”分别输出对象time1和time2所表示的时间,注意必须使用已经定义的成员函数。
请在注释“//**3**”之后添加适当的语句。
输出结果如下:20:30 10:45:34 注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test15_3.cpp清单如下:#include<iostream.h>class Time { public:Time(int new hours,int new_minutes) { // ** 1 ** } int get_hours( );int get_minutes( );protected:int hours,minutes;};int Time::get_hours( ) { return hours;} int Time::get_minutes( ) { return minutes;} class Timex:public Time { public:Timex(int new hours,int new_minutes,int new_seconds);int get_seconds( );protected:int seconds;};// ** 2 ** { seconds=new_seconds;} int Timex::get_seconds( ) { return seconds;} void main( ) { Time time1(20,30);Timex time2(10,45,34);// ** 3 ** }
正确答案:(1) hours=new_hours;minutes=new_minutes;(2) Timex::Timex(int new_hours,int new_minutes,int new_seconds):Time(new_hours,new_minutes)(3) cout<<time1.get_hours( )<<”:”<<time1.get_minutes( )<<end1;cout<<time2.get_hours( )<<”:”<<time2.get_minutes( )<<”:”<<time2.get_seconds( )<endl;
解析:本题主要考查考生对于类和派生类构造函数的定义以及成员函数的使
用,注意(2)中派生类构造函数中必须包括向基类传递参数的调用,应该使用参数列表完成这一操作。