国家二级C++机试(操作题)模拟试卷36(共27题)_第1页
国家二级C++机试(操作题)模拟试卷36(共27题)_第2页
国家二级C++机试(操作题)模拟试卷36(共27题)_第3页
国家二级C++机试(操作题)模拟试卷36(共27题)_第4页
国家二级C++机试(操作题)模拟试卷36(共27题)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷36(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,请修改程序中的错误,使程序能得出正确的结果:num:0num:1num:10注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥******error******的下面。#includeinti=10;ClassTestClass{public:TestClass(inti){cout<<“num:”<标准答案:(1)this一>i=i+1;.或TestClass::i=i+1:或(*this).i=i+1;(2)TestClassprint(0);(3)cout<<“num:”<<::i<知识点解析:程序要求输出member的值为0,1,10。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的TestClass构造函数的调用实现第一次num值的输出;然后通过调用类TestClass中的成员函数Print实现第二次num值的输出;最后通过输出函数cout实现第三次num值的输出。(1)打开modil.cpp,调试程序,显示错误提示为第二标识下“modil.cpp(22):errorC2512:’TestClass’:noappropriatedefaultconstructoravailable”,主函数中首先调用的就是第2个标识下的TestClassprint函数,构造函数的名字和类的名字是一样的,而程序中给出的“TestClassprint;”没有给出参数,所以程序调试时无法确定调用的函数。根据TestClass构造函数“YestClass(inti)”的定义,应该存在int型参数,并且题目要求第一次输出的值为“0”,所以第2个标识正确的调用函数为“TestClassprint(0);”0(2)运行,发现第一次的输出正确,但是第二次的输出值为“一858993460”,并不是题目中要求的“1”。在主函数中,可知第二次输出调用的是“print.Print();”,即类TestClass的成员函数“Print()”。成员函数Print的定义“voidPrint()const”中的输出语句为“cout<<”num:“<i=i+1;”或“TestClass::i=i+1;”或“(*this).i=i+1;”。(3)主函数中通过“cout<<”num:“<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数conven(char*des,char*str,charc,char*str2)的功能是:如果str中包含字符“!”,则替换成.一.a;如果str中包含字符“&”,则替换成rt”;如果str中包含字符“*",则替换成str2。并用函数返回目标转换后的指针。注意:只能补充函数convert(char*des.char*str,char*str2)。#include#include#defineMAXLEN1024voidconvert(char*des,char*str,char*str2){}voidmain(){chardest[MAXLEN];char‘str=”!&cefghi*!&”;char*str2=”jklm”;convert(dest,str,str2);cout<标准答案:deS[0]=0;chartemp(2]={0,0);for(inti=0;str[i]!=NULL;i++){if(Str[i]==‘!’){temp[0]=’a’;//4换成‘a’strcat(deS,temp);}elseif(str[i]==‘&’){temp[0]=‘b’;strcat(deS,temp);//替换成’b’}elseif(str[i]==“”){strcat(des,str2);//4换成str2}else{temp[0]=str[i];strcat(des,temp);//其他情况则添加在后面}知识点解析:函数convert(char*des,char*str,charc,char*str2)的功能是将str中包含的特定字符替换成其他字符,因此可利用循环搜索str字符串,找到特定字符后进行替换。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序输出21到屏幕。完成以下功能:(1)增加静态私有变量mNumber,类型为int,请在注释∥********1********后添加适当的语句。(2)增加静态变量mNumber并初始化为10,请在注释∥********2********后添加适当的语句。(3)完成静态函数get的定义,请在注释∥********3********后添加适当的语句。(4)完成对象obj对静态函数get的调用,使得输出21到屏幕上,请在注释∥********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeciassTestClass{∥********1********intmOther;public:TestClass(inti){mOther=i;}∥********3********{returnmNumber+obj一>mOther;}};∥********2********intmain(){TestClassobj(11);∥********4********cout<<<标准答案:(1)添加语句:staticintmNumber;(2)添加语句:intTestClass::mNumber=10;(3)添加语句:staticintget(Testclass*obj)(4)将“cout<<<知识点解析:本题中程序的功能是利用get函数计算对象成员数值的和。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从己定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和get()成员函数实现各种输出操作国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是:nember=1nember=10nember=100注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includeClassTestClass{public:TestClass(inti)(nember=i;}voidSetNember(intm){nember=m;}intGetNember()const{returnnember;}voidPrint()const{cout<<“nember=”<标准答案:(1)Testclassobj1(1);(2)obj1.SetNember(10);(3)obj2.setNember(100);知识点解析:程序要求输出nerrlber的值为l,10,100。从已定源程序的main主函数开始入手,可以看出程序定义了TestClass类的对象obj1和obi2,然后通过调用类的成员函数实现了题目中的输出结果。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请补充完整程序fun(inti),使程序完成以下功能:如果i=5,则输出如下5行井号。###############注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。#includevoidfun(inti){}intmain(){fun(5);return0;}标准答案:for(intj=0;j知识点解析:(1)该程序功能是输出5行井号。它的解题思路,两层循环,外循环为行,内循环为列。第一行为1列,第二行为两列,同理类推,第n行为n列。(2)从已给部分源程序的main主函数开始入手,核心函数fun(inti)中的i参数为i行#。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。通过继承完成输入到屏幕指定的信息:TestClassATestClassBTestClassC其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类B虚继承于A,请在注释∥********1********后添加适当的语句。(2)完成类C虚继承于A,请在注释∥********2********后添加适当的语句。(3)完成类D继承于B,C,请在注释∥********3********后添加适当的语句。(4)函数fun通过调用基类的fun,完成所输出的内容,请在注释∥********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeClassTeStClassA{public:voidfun(){cout<<“TestClassA”<标准答案:(1)将“classTestClassB:”补充完整为:classTestClassB:virtualpublicTestClassA(2)将“classTestClassC:”补充完整为:classTestClassC:virtualpublicTestClassA(3)将“classTestClassD:”补充完整为:classTestClassD:publicTestClassB,publicTeStClassC(4)添加语句:TestClassA::fun();TestClassB::fun();TestClassC::fun();知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从己定源程序的main主函数开始入手,可以看出程序通过调用类和函数fun实现各种输出操作。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到s1,s2中。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includevoidmain(){char*s1;chars2[1024];cout<<"pleaseinputastring:"<标准答案:(1)s1=newchar[1024],(2)delete[]s1;(3)删除“deletes2;”语句知识点解析:(1)s1变量为指针变量,在使用前要对其分配空间,所以第1个标识下添加“s1=newchar[1024];”。(2)为了防止内存空间的泄漏,指针变量使用后,要将其空间释放,第二个标识下“delete[]s1;”。(3)s2是数组变量,空间是在使用前静态分配的,不是使用前动态分配的,所以使用后不用释放内存空间,这里应该删除“deletes2;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(intx),该函数功能是判定x的所有的约数,并且在函数中调用写函数WriteFile()将结果输出到modi2.txt文件中。例如:x=10的约数为1,2,5,10。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。#include#inClude#includeusingnamespacestd;voidWriteFile(intc){ofstreamout1;out1.open("modi2.txt",iosbase::binary|ios_base::app);out1<标准答案:for(inti=l;i<=x;i++){if(x%i==0)//{如果x被i整除,那么i为x的约数{WriteFile(i);//将约数i存入文件}}知识点解析:(1)由1到x,循环判断其中是否有x的约数。(2)如果X被i整除,那么i为X的约数。(3)最后调用WriteFile函数,将约数i存入文件。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)基类Person完成打印功能,定义其中的打印函数为虚函数,请在注释//********1********后添加适当的语句。(2)类Man继承于Person,在构造函数中设置性别为1,请在注释//********2********后添加适当的语句。(3)类Woman继承于Person,在构造函数中设置性别为0,请在注释//********3********后添加适当的语句。(4)实现函数fun(),用于传递不同的类型,打印出性别,请在注释//********4********后添加适当的语句。输出的内容如下:Sex=ManSex=Woman注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeClassPerson{public://********l********voidprint(){);intSex;};classMan:publicPemson(public:Man(){//********2********}voidprint(){cout<<"Man"<标准答案:(1)将“voidprint(){};”补充完整为:virtualvoidprint(){};(2)添加语句:sex=1;(3)添加语句:sex=0;(4)添加语句:Voidfun(Person&p)知识点解析:(1)题目1要求“基类Person完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以第1个标识下的“voidprint(){};”语句修改为“virtualvoidprint(){};”。(2)题目2要求“类Man继承于Person,在构造函数中设置性别为1”。基类Person中变量sex是用来存放性别的,Man继承Person,所以Man中性别的变量可以使用基类中的sex变量,设置性别为1,即“sex=1;”。(3)题目3要求“类Woman继承于Person,在构造函数中设置性别为0”。同(2),在第三个标识下添加“sex=0;”。(4)题目4要求“实现函数fun(),用于传递不同的类型,打印出性别”。根据“p.print();”语句知道,fun()函数的形参为指针P,由于它调用了基类Person中的成员函数print(),所以P的基类为Person,即添加函数fun()的定义为“voidfun(Person&p)”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#inclucle#defineM3#defineN5voidfun(int(*a)[N],intk){inti,j,p,temp;/*********found*********/for(p=1;p<=【1】;P++)for(i=0;i标准答案:(1)k(2)N一1(3)temp知识点解析:填空1:外循环p的值为数组移动的次数,试题要求第k列左移,则需要移动的次数为k,所以应填k。填空2:矩阵共N列,所以应填N一1。填空3:临时变量temp中存放的值为数组最左边元素的值,需要把temp放到数组的末尾,即放到a[i][N—1]中,所以应填temp。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763、所得平均值为195.838745,在平均值以上的实数个数应为5。请改正程序中的错误,使其能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includeintfun(floatx[],intn)/*********found*********/intj,c=0;floatxa=0.0;for(j=0;jxa)c++;returnc;}main(){floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};system("cls");printf("%d\n",fun(x,8));}标准答案:(1){intj,c=0;floatxa=0.0;(2)if(x[j]>=xa)知识点解析:(1)本题着重考查考生对C语言基本语法以及比较运算符的掌握情况。(2)本题中的第一个错误:在C语言中,{}应威对出现,所以程序中的语句"intj,c=0;floatxa=0.0;"应改为"{intj,c=0;floatxa=0.0;”或相同作用的语句;三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“一1234”,则函数把它转换为整数值一1234。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includelongfun(char*p){}voidmain(){chars[6];longn;printf("Enterastring:\n");gets(S);n=fun(S);printf("%id\n",n);}标准答案:longfun(char*p){longn=0;intflag=1;if(*p==’-’)/*负数时置flag为一1*c/{p++;flag=一1;}elseif(*p==’+’)/*正数时置flag为1*/p++;while(*p!=’\0’){n=n*10+*p一’0’;/*将字符串转成相应的整数*/p++;}returnn*flag;}知识点解析:if语句的作用是判断该字符串为正数还是负数,while循环的作用是将字符串转成相应的整数。注意:*p是一个字符(例如‘9’、‘4’),并不是一个数,要将其转成相应的数字需令其减去’0’(不是’\0’),即*p一’0’就得到*p这个字符的相应数字,例如’0’一’0’=0、’8’一’0’=8等。必须在程序的前面加#include,函数atol的作用是将字符串转换成长整型数,它是一个库函数。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程包含一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Youareright.注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#includeusingnamespacestd;classMyClass{public:MyClass(intx):number(x){}//ERROR********found********~MyClass(intx){}//ERROR********found********voidJudge(MyClass&obj);private:intnumber;};voidJudge(MyClass&obj){if(obj.number==10)cout<<"Youareright."<<endl;elsecout<<"Sorry"<标准答案:(1)~MyClass(){}(2)friendvoidJudge(MyClass&obj);(3)MyClassobject(10);知识点解析:(1)主要考查考生对析构函数的掌握,析构函数是没有形参的,因此把形参去掉即可,因为该类没有动态分配空间,所以不需要使用delete语句释放空间。(2)主要考查考生对友元函数的掌握,在函数定义中有语句voidJudge(MyClass&obj),在main函数中有语句Judge(object);,即Judge函数是可以被类外函数调用的,并且定义时没有加上类名和作用域,因此可以知道Judge函数是友元函数,需要在类型前加上friend。(3)主要考查考生对构造函数调用的掌握,题目要求输出结果为:Youarefight.,在Judge函数体内有语句:if(obj.number==10)cout<<"Youareright."<二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有类CPolygon(“多边形”)、CRectangle(“矩形”)、CTriangle(“三角形”)的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。该程序的正确输出结果应为:2010注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeusingnamespacestd;classCPolygon{public://*********found*********_________//纯虚函数area声明voidprintarea(void)//*********found*********{cout<<________<printarea();ppoly2->printarea();return0;}标准答案:(1)virtualintarea(void)=0;知识点解析:(1)主要考查考生对纯虚函数的掌握,在定义纯虚函数时要看在派生类中函数的定义:intarea(void)。由此可知纯虚函数应该为:virtualintarea(void)=0;。(2)主要考查考生对纯虚函数的掌握情况,由voidprintarea(void)可知,该函数要打印面积,因此在此要调用纯虚函数area,即cont<三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹prog3下的工程prog3,其中包含了类Polynomial(“多项式”)的定义。形如5x4+3.4x2一7x+2的代数式称为多项式,其中的5为4次项系数,3.4为2次项系数,一7为1次项系数,2为0次项(常数项)系数。此例缺3次项,意味着3次项系数为0,即省略了0x3。在Polynomial中,多项式的各个系数存储在一个名为coef的数组中。例如,对于上面的多项式,保存在coef[0]、coef[1]…coef[4]中的系数依次为:2.0、一7.0、3.4、0.0.5.0,也即对于i次项,其系数就保存在coef[i]中。成员函数getValue计算多项式的值,多项式中x的值是由参数指定的。请补充完成文件Polynomial.cpp中成员函数getValue的定义。此程序的正确输出结果应为:Valueofp1whenx=2.0:59.8Valueofp2whenx=3.0:226.8注意:只在函数getValue的“//23332”和“/r/26662”之间填入若干语句,不要改动程序中的其他内容。//Polynomiac.h#includeusingnamespacestd;classPolynomial{//“多项式”类public:Polynomial(doublecoef[],intnum):coef(newdouble[num]),numofterms(num){for(inti=0;icoef[i]=coef[i];}~Polynomial(){delete[]coef;}//返回指定次数项的系数doublegetCoefficient(intpower)const{returncoef[power];}//返回在x等于指定值时多项式的值doublegetValue(doublex)const;private://系数数组,coef[0]为0次项(常数项)系数,coef[1]为1次项系数,coef[2]为2次项(平方项)系数,余类推。Double*coef;intnum_of_terms;};voidwriteToFile(constchar*path);//Polymomial.cpp#include"Polynomial.h"doublePolynomial::getValue(doublex)const{//多项式的值value为各次项的累加和doublevalue=coef[0];//************333************//************666************returnvalue;}//main.cpp#include"Polynomial.h"intmain(){doublep1[]={5.0,3.4,-4.0,8.0},p2[]={0.0,-5.4,0.0,3.0,2.0);Polynomialpolyl(p1,sizeof(p1)/sizeof(double)),poly2(p2,sizeof(p2)/sizeof(double));cout<<"Valueofp1whenx=2.0:"<标准答案:for(inti=1;i0)//当j大于零时,做相乘操作,即完成该项的乘方动作{x_value*=x;j--;}value+=coef[i]*xvalue;//把i项的乘方结果乘以该项系数后加进value中}知识点解析:题目要求成员函数getValue计算多项式的值,多项式中x的值由参数指定,多项式的值value为各次项的累加和。由类的定义可知数组coef中存储的是各次项的系数,这里使用for循环来完成题目要求,当次项为0时,value=coef[0]。当次项为1时,value=coef[1]*x+coef[0]。依次类推直到X的最高次数。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹pmjl下的工程projl,此工程中含有一个源程序文件projl.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Thevalueis:10注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//projl.cpp#includeusingnamespacestd;classMember{//ERROR**********found**********private:Member(intval):value(val){)intvalue;);classMyClass{Memberm;public://ERROR**********found**********MyClass(intval){}intGetValue()const{returnm.value;}};intmain(){MyClass*obj=newMyClass(i0);//ERROR**********found**********下列语句输出obj指向类中的value值cout<<“Thevalueis:”<标准答案:(1)public:(2)MyClass(intval):一m(val){}或MyClass(intval){一m=val}(3)cout<<“Thevalueis:”<GetValue()<知识点解析:本题主要考查的是Member类和MyClass类,其中涉及构造函数、成员函数和类的指针。类的指针调用类的成员函数时要使用标识符“一>”,而不是“.”,这是最容易出错的地方。私有成员使用private,公有成员使用public,保护成员使用protected,类的构造函数一定是公有成员函数。【解题思路】(1)主要考查考生对私有成员和公有成员的掌握,先看改错语句的下一条语句:Member(intval):value(val){},该语句是一个构造函数,因此我们可以得出此处为公有成员,因为构造函数不可能是私有成员。(2)主要考查构造函数,构造函数要对类的成员进行初始化,因此在这里使用成员列表初始化,即MyClass(intval):一m(val){}或MyClass(intval){一m=val}。(3)指针调用类的成员函数时,应使用标识符“一>”。【解题宝典】判断该成员是公有成员还是私有成员的方法很多,不必一一死记,只要记住公有成员可以被类外函数调用,私有成员则不可以,类的构造函数一定是公有成员函数就可以了。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.cpp,其中定义了CharShape类、Tfian~e类和Rectangle类。CharShape是一个抽象基类,它表示由字符组成的图形(简称字符图形),纯虚函数Show用于显示不同字符图形的相同操作接口。TfanOe和Rectangle是CharShape的派生类,它们分别用于表示字符三角形和字符矩形,并且都定义了成员函数Show,用于实现各自的显示操作。程序的正确输出结果应为:****************########################请阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码并删除横线。(1)将Triangle类的成员函数Show补充完整,使字符三角形的显示符合输出结果。(2)将Rectangle类的成员函数Show补充完整,使字符矩形的显示符合输出结果。(3)为类外函数fun添加合适的形参。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。{/proj2.cpp#includeusingnamespacestd;classCharShape{public:CharShape(charch):一ch(ch){};virtualvoidShow()=0;protected:charch;//组成图形的字符};classTriangle:publicCharShape{public:Triangle(charch,intr):Char—Shape(ch),一rows(r){}voidShow();private:introws;//行数};classRectangle:publicCharShape{public:Rectangle(charch,intr,intC):CharShape(ch),_rows(r),一cols(c){}voidShow();private:introws,cols;//行数和列数};voidTriangle::Show()//输出字符组成的三角形{for(inti=1;i<=rows;i++){//**********found**********for(intJ=1;J<=——;J++)cout<<ch;cout<标准答案:(1)i*2—1(2)一rows(3)一cols(4)CharShape&cs知识点解析:本题主要考查抽象类CharShape类及其派生类Triangle和Rectangle,其中涉及构造函数、纯虚函数、成员函数和函数调用。着重考查函数Show()在Triangle类与在Rectangle类中的定义,填空前应先理解Show()函数在该类中的功能。【解题思路】(1)考查for循环语句,该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标i代表行数,那么下标j就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即j<=i*2一1;。(2)考查for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标i不大于行数即可。(3)考查for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标j不大于列数即可。(4)主要考查考生对虚函数的掌握,该语句所在的函数是普通函数fun,题目要求为fun函数添加形参。从函数体中可以知道形参名为cs,那么形参的类型是什么呢?就是抽象类CharShape,因此要使用CharShape&cs才可以实现题目要求输出的内容。【解题宝典】本题主要考查考生对for循环语句的掌握及虚函数的使用,for循环是最常考到的知识点,要结合好上下文的语义来填写,首先要清楚该语句所在函数要实现的功能,其次要知道该语句的作用。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intAn’ay类的对象中,然后建立另一对象myArray,将对象内容赋值给myArray。类intArray重载了“=”运算符。程序中给出了一个测试数据文件input,不超过300个的整数。程序的输出是:1011131620要求:补充编制的内容写在“//*********333*********”与“//*********666*********”之间。实现重载赋值运算符函数,并将赋值结果在屏幕输出。格式不限。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//intArray.hclassintArray{private:int*array;intlength;public:intArray(char*filename);intArray();intArray&operator=(constintAr。ray&src);一intArray();voidshow();};voidwriteTOFile(constchar*path);//main.cpp#include#include#include#include“intArray.h”usingnamespacestd;intArray::intArray(){length=10;array=newint[1ength];}intArray::intArray(char*filename){ifstreammyFile(filename);array=newint[300];length=0;while(myFile>>array[1ength++])length_____;myFile.close();}intArray&intArray::operator=(constintArray&src){if(array!=NULL)delete[]array;length=src.1ength;array=newint[1ength];//*********333*********//*********666*********return*this;}intArray::一intArray(){delete[]array;}voidintArray::show(){intstep=0;for(inti=0;i标准答案:for(inti=0;i知识点解析:本题主要考查intAtray类,其中涉及动态数组、构造函数、运算符重载、析构函数及其他成员函数。【解题思路】主要考查考生对运算符重载的掌握,该函数要重载运算符“=”,该运算符的意思是赋值。先看该函数的其他语句:if(array!=NULL)delete[]array;length=src.1ength;array=newint[1ength];第一条语句是把原来动态数组释放,第二条语句是把形参$1rc的成员length赋值给变量length,第三条语句是给指针array分配内存。接下来要把动态数组中的值逐个赋给array数组,在这里使用for循环语句,循环变量i的范围是0~length,并进行赋值操作。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹pmjl下的工程projl,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:2123注意:只修改每个“//ERROR****found*****”下面的一行,不要改动程序中的其他任何内容。#includeusingnamespacestd;clasSABC{public://ERROR**********found**********ABC(){a=0;b=0;C=0;}ABC(intaa,intbb,intCC);voidSetab(){++a,++b;)intSum(){returna+b+C;)private:inta,b;constintC;};ABC::ABC(intaa,intbb,intCC):C(CC){a=aa;b=bb;)intmain(){ABCx(1,2,3),Y(4,5,6);ABCZ,*W=&Z;W一>Setab();//ERROR**********found***********intsl=X.Sum()+Y一>Sum();cout<标准答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=sl+w一>Sum();知识点解析:本题考查的是ABC类,其中涉及构造函数、成员函数和常变量私有成员。构造函数中因为要给常变量私有成员初始化,所以必须使用成员列表初始化来赋初值。只有类的指针在调用成员函数时才使用标识符“一>”。【解题思路】(1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:conatintc;可知,c为常变量,因此构造函数必须使用成员列表初始化来给c赋初始值。(2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“一>”。(3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABCz,*w=&z;可知,w是ABC类的指针,指向z,因此w调用A:BC类的成员函数时要使用标识符“一>”,而不是“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中在编辑窗口内显示的主程序文件中定义有类Base和Derived,以及主函数main。程序文本中位于每行“//****found****”下面的一行内有一处或多处下画线标记,请在每个下画线标记处填写合适的内容,并删除下画线标记。经修改后运行程序,得到的输出应为:sum=55。注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#includeusingnamespacestd;claSSBase{public:Base(intml,intm2){meml=ml;mem2=m2;}intsum(){returnmeml+mem2;}private:intmeml,mem2;//基类的数据成员};//派生类Derived从基类Base公有继承//**********found***********classDerived:{public://构造函数声明Derived(intml,intm2,intm3);//sum函数定义,要求返回meml、mem2和mem3之和//**********found***********intsum(){return——+mem3;)private:intmem3;//派生类本身的数据成员};//构造函数的类外定义,要求由m1和m2分别初始化meml和mem2,由m3初始化mem3//**********found**********__________Derived(intml,intm2,intm3)://**********found***********__________,mem3(m3){}intmain(){Basea(4,6);Derivedb(10,15,20);intsum=a.sum()+b.sum();cout<<“sum=”<标准答案:(1)publicBase(2)Base::sum()(3)Derived::(4)Base(m1,m2)知识点解析:本题考查的是Base类及其派生类Derived类,其中涉及构造函数和成员函数。构造函数在类外定义时,因为构造函数是属于类的函数,所以函数前也要加上类名和作用域符,派生类的构造函数要先给基类初始化,使用成员列表初始化。【解题思路】(1)主要考查考生对公有继承的掌握情况,根据题目要求:派生类Derived从基类Base公有继承,因此这里使用public来公有继承。(2)主要考查考生对成员函数的掌握情况,根据题目对sum函数的要求:sum函数定义,要求返回mem1、mem2和mem3之和,因此这里直接调用基类的sum函数,再加上mem3就满足题目要求。(3)主要考查考生对构造函数的掌握情况,由于Derived的构造函数在类外定义,因此要加上类名和作用域符,即Derived::。(4)主要考查考生对构造函数的掌握情况,因为Derived是Base类的派生类,所以其构造函数要使用成员列表初始化先给Base初始化。【解题宝典】主要考查考生对公有继承、成员函数和构造函数的掌握程度,在派生类中直接调用基类的函数,要在前面加上基类名和作用域符,从而防止派生类中也有相同函数时产生的二义性。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含主程序文件main。cpp和用户定义的头文件Array.h,整个程序包含有类Array的定义和主函数main的定义。请把主程序文件中的Array类的成员函数Contrary()的定义补充完整,经补充后运行程序,得到的输出结果应该是:585,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允许在“//**********333**********”和“//**********666**********”之间填写内容,不允许修改其他任何地方的内容。//Array.h#includeusingnamespacestd;templateclassArray{//数组类public:Array<=m){cout<<“下标越界!”<voidArray::Contrary(){//补充函数体//*********333*********//*********666*********}intmain(){intsl[5]={1,2,3,4,5);doubles2[6]={1.2,2.3,3.4,4.5,5.6,8.4};Arraydl(sl,5);Arrayd2(s2,6);inti;d1.Contrary();d2.Contrary();cout<标准答案:for(inti=0,j=m一1;i知识点解析:本题考查的是Array类,其中涉及构造函数、const函数和运算符重载。交换数组中前后对称的元素的值,要使用两个下标i和j,一个代表第一个元素,一个代表最后一个元素,交换后i++,j一即可。【解题思路】主要考查考生对交换算法的掌握情况,根据题目对要完成的函数Contrary的要求:交换数组a中前后位置对称的元素的值。这里取下标i=0,即为数组中的第一个元素,j=m一1,即为数组中的最后一个元素,利用中间值temp交换元素的值,然后i逐次递增的同时j逐次递减,再交换,循环到i>j时停止交换即可。【解题宝典】主要考查考生对数组中元素交换的掌握情况,交换算法要使得两个下标i和j移动的范围能覆盖全部元素,同时要确定for循环的终止条件。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有误,请改正其中的错误,使程序正常运行,并使程序在界面上输出为:平均值为:29最大值为:112最小值为:-11注意:错误的语句在∥********error********的下面。修改该语句即可。#includeUSingnamespacestd;intmain(){inti;AvelMin;Max;intdata[8].{0,112,43,78,一11,一6,7,9);Ave=0;for(i=0;i<8;i++)∥********error********Ave=data[i];Ave/=8;cout<<“平均值为:”<Min)Min=data[i];}cout<<”最大值为.II<标准答案:(1)Ave+=data[i];或Ave=Ave+data[i];(2)if(data[i]>Max)Max=data[i];(3)if(data[i]知识点解析:(1)观察程序可知,第一个for循环是求数组各个元素的和,逐次将每个元素值加起来,而程序当中是逐个赋值,因此第l标识处应将Ave=data[i]改成Ave+=data[i]或Ave=Ave+data[i]。(2)根据题意再求数组当中元素的最大最小值,用变量Max记录最大值,Min记录最小值,在for循环中,逐次比较,如果该元素值比当前Max大,则Max取该元素值,因此第2标识处正确的应该是if(data[i]>Max)Max=data[i]。(3)同样如果数组该元素值比Min小,则Min取该元素值。因此,两个if中条件判断错误,第3标识处“if(data[i]>Min)Min=data[i]”改成“if(data[i]二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。补充函数convert(longS,long*str),使之从低位开始取出长整型变量S中奇数位上的数,依次存放在数str中。例如,当S中的数为:7654321时,str中的数为:7531。注意:请勿改动主函数。#includevoidconvert(10ngS,long*str){}voidmain(){longS,res;cout<>s;convert(s,&res);cout<<”TheresultiS:”(标准答案:longsl=10;*str=s%10;//先取个位数while(s>0){S=s/100;//每次除以i00,*str=s%10*s1+*str;//取除以100后的个位数,str增加1位s1=s1*10;}知识点解析:(1)由审题分析可知,奇数位即为个位数、百位数、万位数……,取个位数比较简单,S%10便得到了个位数。获取百位数可由s/100后,再和10取余得到,同样万位数可由s/10000,再和10取余得到,从百位数开始后面的奇数位都是在上次的基础上再除以100后再取余数,因此可利用循环。(2)在循环外先取S的个位数,然后进入循环,s=s/100,获取除以100的个位数方法为s%10,这个数是*str的高一位,乘以它所在*str中的位置的权值,然后和以前的值相加便得到这次*str值,如此循环,直到s为0为止。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成。(1)定义私有数据成员year、month和day,分别用于表示年、月和日,它们都是int型的数据。请在注释∥********1********之后添加适当的语句。(2)完成默认构造函数Date的定义,使Date对象的默认值为:year=l,month=l,day=l,请在注释∥********2********之后添加适当的语句。(3)完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释∥********3********之后添加适当的语句。(4)完成成员函数print()的类外定义,使其以“年一月一日”的格式将Date对象的值输出到屏幕上,例如:2008.8.8。请在注释∥********4********之后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include2classDate{3public:4∥********2********56Date(inty,intm,intd)7{8∥********3********910}11voidprint()con.qt;12private:3.3‖datamember14∥********1********1516};17voidDate::print=()const18{19∥********4********2021}22intmain()(23Datenation,a1._day(1949,10,1);24nationalday.print();25return0;26}标准答案:(1)添加语句:intyear,month,day,(2)添加语句:Date(){year=1;month=1;day=1;}(3)添加语句:year=y;month=m;day=d;(4)添加语句:cout<知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类Date和函数print实现各种输出操作。解题思路(1)题目1要求“定义私有数据成员year、month和day,分别用于表示年、月和日,它们都是int型的数据”。在C++程序的private区域中添加变量year、month、day的定义,即在第1个标识下添加“intyear,month,day;”。(2)题目2要求“完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1”。在CH中,构造函数是一种特殊的成员函数,它的名字与类同名。在Date构造函数体内,根据题目要求,设置变量默认值“year=1,month=1,day=1”,即:“Date0{yem=1;month=1;day=1;}”。(3)题目3要求“完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、mohth和day分别初始化为参数y、m和d的值。”在构造函数Date(inty,intm,intd)函数体内,即标识3下,添加赋值语句,将y,m,d赋值给year,month,day,即“year=y;month=m;day=d;”。(4)题目4要求“完成成员函数print()的类外定义,使其以“年一月~日”的格式将Date对象的值输出到屏幕上”。在程序中的voidDate::print0cons

温馨提示

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

评论

0/150

提交评论