2012全国计算机上机题库.doc_第1页
2012全国计算机上机题库.doc_第2页
2012全国计算机上机题库.doc_第3页
2012全国计算机上机题库.doc_第4页
2012全国计算机上机题库.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、改错题使用VC6打开考生文件夹下的工程kt6_1,此工程包含一个源程序文件kt6_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Constructor2 Constructor1 i=0 i=10 Destructor 源程序文件kt6_1.cpp清单如下: #include classCSample inti; public: CSample()coutConstructor1 CSample(intval)coutConstructor2 CSample()coutDestructor voiddisp(); ; /*found*/ voiddisp() couti=disp(); /*found*/ b-disp(); 【参考答案】 (1)将void disp() 改为:void CSample:disp() (2)将a-disp(); 改为:a=new CSample; a-disp(); (3)将b-disp(); 改为:b.disp(); 【试题解析】 (1)主要考查类成员函数定义格式的熟练掌握,对于类体外函数 的实现,应该使用作用域符:,按照返回值类型 类名:函数名(参数列表)的形式进行说明; (2)主要考查对动态存储分配的掌握,根据前面的定义,a是一个指针类型的变量,指向一个对象,但是并没有被初始化,此时a中的数据无任何意义,应该使用动态存储分配new生成一个新的对象,并将返回的指针赋值给a; (3)主要考查对象指针与对象在调用成员函数时格式的不同,b是一个对象变量,使用b调用成员函数应该用.运算符。一、改错题使用VC6打开考生文件夹下的工程kt7_1,此工程包含一个源程序文件kt7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Constructor1 Constructor1 Constructor1 Destructor Constructor2 Destructor x=0 x=5 Destructor Destructor 源程序文件kt21_1.cpp清单如下: #include classB intx; public: B()x=0;coutConstructor1ENDL;/ENDL;B(inti)x=i;coutConstructor2ENDL;/ENDL;B()coutDestructorENDL;/ENDL;/*found*/ B(inti)coutIBEDESTRUCTORENDL;/IBEDESTRUCTORENDL;voidprint()coutx=XENDL;/XENDL;voidmain() B*ptr; ptr=newB2; /*found*/ ptr0=B(0); ptr1=B(5); /*found*/ for(inti=0;i2;) ptri.print(); deleteptr; 【参考答案】 (1)将B(int i)coutI p= be= Destructor?endl;删除/I(2)将ptr0=B(0);改为:ptr0=B(); (3)将for (int i=0;i2;)改为:for(int i=0;i2;i+) B(inti)x=i;coutConstructor2ENDL;/ENDL;B()coutDestructorENDL;/ENDL;/*found*/ B(inti)coutIBEDESTRUCTORENDL;/IBEDESTRUCTORENDL;voidprint()coutx=XENDL;/XENDL;voidmain() B*ptr; ptr=newB2; /*found*/ ptr0=B(0); ptr1=B(5); /*found*/ for(inti=0;i2;) ptri.print(); deleteptr; 【参考答案】 (1)将B(int i)coutI p= be= Destructor?endl;删除/I(2)将ptr0=B(0);改为:ptr0=B(); (3)将for (int i=0;i2;)改为:for(int i=0;i2;i+) 【试题解析】 本题主要考查对文件相关操作的熟练程度。首先定义文件流类的变量,然后使用该对象的open方法打开一个文件,接着使用while循环和getch方法每次读入一个字符并统计字符个数,最后使用close方法关闭文件,返回i值。一、改错题使用VC6打开考生文件夹下的工程kt8_1,此工程包含一个源程序文件kt8_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: f1functionofderive f2functionofbase f4functionofbase 源程序文件kt8_1.cpp清单如下: #include classbase public: /*found*/ voidf1()coutf1functionofbaseENDL;/ENDL;virtualvoidf2()coutf2functionofbaseENDL;/ENDL;virtualvoidf3()coutf3functionofbaseENDL;/ENDL;voidf4()coutf4functionofbase /*found*/ classderive:publicbase voidf1()coutf1functionofderiveENDL;/ENDL;voidf2(intx)coutf2functionofderiveENDL;/ENDL;voidf4()coutf4functionofderive voidmain() base*p; deriveobj2; /*found*/ p=obj2; p-f1(); p-f2(); p-f4(); 【参考答案】 (1)将void f1() coutf1 function of baseENDL;/ENDL;改为:virtual void f1() coutf1 function of baseENDL;/ENDL;(2)将class derive:public base 改为:class derive:public base (3)将p=obj2; 改为:p=&obj2; 【试题解析】 (1)主要考查对虚函数的深刻理解,虚函数是动态联编的基础,也是实现多态性的重要方法,它可以根据不同的情况动态的选择执行哪一个函数。在派生类中实现虚函数应该满足与基类的同名函数完全相同,并且使用关键字virtual修饰,本题中由输出结果中的f1 function of derive可知,必须将基类base的成员函数f1()定义为虚函数; (2)主要考查对派生类定义格式的掌握,应该使用“:”后面是继承列表,而“:”是作用域符; (3)主要考查类对象的定义与使用,p是一个指针类型的变量,给它的赋值应该是一个地址,即使用取地址操作符&。一、改错题使用VC6打开考生文件夹下的工程kt9_1,此工程包含一个源程 序文件kt9_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: 4,5 20 源程序文件清单如下: #includeclassA protected: intn,m; public: voidset(inta,intb)m=a;n=b; voidshow()coutM,N/*found*/ /M,NclassB:publicA ints; public: voidset()s=m*n; voidshows()coutSvoidmain() /S Bb; /*found*/ b.set(); b.show(); b.set(); /*found*/ b.show(); 【参考答案】 (1)在“”后添加分号 (2)将b.set();改为:b.A:set(4,5); (3)将b.show();改为:b.shows(); 【试题解析】 (1)主要考查对类定义格式的掌握,类的结尾应该使用;; (2)主要考查对基类与派生类函数调用关系的掌握,根据所要求的输出结果,应该调用的函数为类A的set,而不是类B自身的set函数,应该避免调用的二义性; (3)主要考查对继承与派生的理解,由所要求输出结果可知正确:b.shows()。一、改错题使用VC6打开考生文件夹下的工程kt10_1,此工程包含一个源程序文件kt10_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为: classBase classD1 classD2 classD3 finBase 源程序文件kt10_1.cpp清单如下: #includeclassBase public: Base()coutclassBasevoidf()coutfinBaseclassD1:virtualpublicBase public: D1()coutclassD1voidf()coutfinD1/*found*/ classD2:publicBase public: D2()coutclassD2/*found*/ classD3:publicD1,publicD2 public: D3()coutclassD3voidmain() D3d; /*found*/ d.f(); 【参考答案】 (1)将class D2:public Base 改为:class D2:virtual public Base (2)将class D3:public D1,public D2 改为:class D3:public D1,public D2 (3)将d.f();改为:d.Base:f(); 【试题解析】 (1)主要考查对虚基类的理解,虚基类可以解决二义性的问题,其定义方式是在继承列表中使用virtual关键字,使用虚基类可以避免程序运行中对基类函数调用的不惟一; (2)主要考查对类的定义方法的掌握,“:”为作用域符,此处应该使用“:”,因为后面是继承列表; (3)主要考查对虚基类函数调用过程的理解,只有使用:限定才能访问基类函数,否则将会调用自身的函数,如果该类没有该函数的定义,则会自动调用其父类的该函数,所以必须使用“:”符号。一、改错题 使用VC6打开考生文件夹下的工程kt11_1,此工程包含一个源程序文件kt11_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为: Valuesare:1,2and3 Pressanykeytocontinue 源程序文件kt11_1.cpp清单如下: #includeclassCommonBase public: intx; ; /*found*/ classDeriveCommonA:publicCommonBase public: inty; ; classDeriveCommonB:publicCommonBase public: intz; ; /*found*/ classOverlapping:publicDeriveCommonA;publicDeriveCommonB public: voidDisplay() coutValuesare:DeriveCommonA:x,yandzintmain() /DeriveCommonA:x,yandzvalue2?value1:value2; returnretval; voidmain() pairmyobject(100,75); coutMYOBJECT.GETMAX()【参考答案】 /MYOBJECT.GETMAX()value2? value1 : value2; 改为:retval = value1value2? value1 : value2; 【试题解析】 (1)主要考查对模板使用的理解,该函数属于模板类定义的一 部分,对于返回值类型,应该使用模板类名称T,这样编译的时候才能被接受; (2)主要考查是模板的使用,前面的模板类已经声明完成了,在类的外面定义类的成员函数时仍然需要使用模板的声明,这样在后面的函数定义体中才能使用模板类; (3)主要考查对“表达式1? 表达式2 : 表达式3”语句的掌握,这个语句是一个复合语句,先计算第一个表达式,如果为真则整个式子值为表达式2的值,否则为表达式3的值,题目中错误的使用了两个问号。一、改错题 使用VC6打开考生文件夹下的工程kt13_1,此工程包含一个源程序文件kt13_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为: 5 5 源程序文件kt13_1.cpp清单如下: #includeclassA public: /*found*/ staticintn=1; A()n+; A()n-; ; /*found*/ intn=0; intmain() Aa; Ab3; A*c=newA; c=&a; /*found*/ coutC.NcoutA:nreturn0; /A:n/C.N【参考答案】 (1)将static int n=1;改为:static int n; (2)将int n=0;改为:int A:n=0; (3)将coutC.NENDL;改为:COUTn【试题解析】 /C.NENDL;改为:COUT”,而不能用“.”。 一、改错题使用VC6打开考生文件夹下的工程kt14_1,此工程包含一个源程序文件kt14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为: A:noparameters B:intparameter A:noparameters B:intparameter C:intparameter 源程序文件kt14_1.cpp清单如下: #include classA /*found*/ private: A()coutA:noparametersn; A(inta)coutA:intparametern; ; classB:publicA public: B(inta)coutB:intparametern; ; /*found*/ classC:publicB,publicA public: /*found*/ C(inta):B(a)coutC:intparametern; ; voidmain() Bb(1); Cc(2); 【参考答案】 (1)将private:改为:public: (2)将class C:public B,public A改为:class C:public B (3)将C(int a):B(a)coutC: int parametern; 改为:C(int a):B(a)coutC: int parametern; 【试题解析】 (1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用; (2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B; (3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:”,而不是“:”;一、改错题使用VC6打开考生文件夹下的工程kt15_1,此工程包含一个源程序文件kt15_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为: Previous=9,Next=11 源程序文件kt15_1.cpp清单如下: #include /*found*/ intmain() intx=10,y,z; prevnext(x,y,z); coutPrevious=y,Next=zendl; return0; /*found*/ voidprevnext(intx,intprev,intnext) /*found*/ prev=x-; next=+x; 【参考答案】 (1)在main()函数前缺少prevnext函数声明 应添加:void prevnext (int,int &,int &); (2)将void prevnext (int x, int prev,int next) 改为:void prevnext (int x, int &prev,int &next) (3)将prev=x-;改为:prev=x-1; 【试题解析】 (1)函数在使用前必须已经被定义,main()中调用prevnext函数,而该函数的实现在main()之后,所以在main()之前必须添加该函数的声明; (2)由运行结果可知,通过函数prevnext调动要改变main()中的实参值,所以prev和next都应为引用型参数; (3)由运行结果prev=x-1,而源程序的prev=x,x=x-1,这里涉

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论