




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(操作题)模拟试卷13(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Thisobjectisno.1注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClass{public:MyClass():count(0){cout<<"Thisobjectis";}//ERROR*******found*******voidInc()const{cout<<"no."<<++count<<endl;)private://ERROR*******found*******intcount=0;};intmain(){MyClass*obj=newMyClass;//ERROR*******found*******obj.Inc();return0;}标准答案:(1)voidInc()(2)intcount;(3)obj一>Inc();知识点解析:(1)考查考生对const的掌握,在Inc函数的函数体{cout<<"no."<<++count<<endl;}中,有语句++count,将使私有成员count的值发生改变,因此该函数不能使用const,修饰。(2)考查私有成员,在定义类时,私有成员只能声明不能初始化。(3)主要考查考生对类的指针的掌握,指针调用类的成员函数时要使用标识符“一>”,而不能使用“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,此工程中包含一个程序文件main.epp,其中有“部门”类Department和“职工”类Staff的定义,还有主函数main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:改换办公室前:职工号:0789姓名:张三部门:人事处办公室:521职工号:0513姓名:李四部门:人事处办公室:521改换办公室后:职工号:0789姓名:张三部门:人事处办公室:311职工号:0513姓名:李四部门:人事处办公室:311注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classDepartment{//“部门”类public:Department(constchar*name,constchar*Office){strcpy(this->name,name);//**********found**********________}constchar*getName()const{returnname;}//返回部门名称//**********found**********constchar*getOffice()const{_________)//返回办公室房号voidchangeOfficeTo(constchar*office){//改换为指定房号的另一个办公室strcpy(thiS->Office,Office);}private:charname[20];//部门名称charoffice[20];//部门所在办公室房号};classStaff{//“职工”类public://**********found**********Staff(constchar*my_id,constchar*my_name,Department&my_dept):__________{strcpy(this->staff_id,my_id);strcpy(this->name,my_name);}constchar*getID()const{returnStaff_id;}constchar*getName()const{returnname;}DepartmentgetDepartment()const{returndept;}private:charstaffid[10];//职工号charname[20];//姓名Department&dept;//所在部门};voidshowStaff(Staff&staff){cout<<"职工号:"<<staff.getID()<<"";cout<<"姓名:"<<staff.getName()<<"";cout<<"部门:"<<staff.getDepartment().getName()<<"";cout<<"办公室:"<<staff.getDepartment().getOffice()<<endl;}intmain(){Departmentdept("人事处","521");StaffZhang("0789","张三",dept),Li("0513","李四",dept);cout<<"改换办公室前:"<<endl;showStaff(Zhang);showStaff(Li);//人事处办公室由521搬到311//**********found**********_________cout<<"改换办公室后:"<<endl;showStaff(Zhang);showStaff(Li);return0;}标准答案:(1)strcpy(this一>office,office);(2)returnoffice;(3)dept(my_dept)(4)dept.changeOfficeTo("311");知识点解析:(1)主要考查考生对strcpy函数的掌握情况,根据上一条语句:strcpy(this一>name,name);可知,这条语句复制的是office,即strcpy(this一>office,office);。(2)主要考查考生对成员函数的掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条return语句。在私有成员里:charoffice[20];//部门所在办公室房号,表明office即为办公室房号。因此直接返回office即可。(3)主要考查考生对构造函数的掌握情况,根据函数体:strcpy(this一>staff_id,my_id);strcpy(this一>name,my_name);可知,只有dept没有初始化,而空格前有字符“:”,这是成员列表初始化的标识符,因此填写dept(my_dept)即可。(4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由521搬到311。在Department类中有函数voidchangeOfficeTo(constchar*office)可以修改办公室的房间号,直接调用即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数operator=,以实现深层复制。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include<iostream>#include<string>usingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*p;//动态数组首地址CDeepCopy(int);~CDeepCopy();CDeepCopy&operator=(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char*);//main.cpp#include"CDeepCopy.h"CDeepCopy::~CDeepCopy(){delete[]p;}CDeepCopy::CDeepCopy(intk){n=k;p=newint[n];}//构造函数实现CDeepCopy&CDeepCopy::operator=(constCDeepCopy&r)//赋值运算符函数实现{//********333********//********666********}intmain(){CDeepCopya(2),d(3);a.p[0]=1;d.p[0]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);a.p[0]=88;b=a;//调用赋值运算符函数cout<<b.p[0];//显示内层局部对象的数组元素}cout<<d.p[0];//显示d数组元素a.p[0]的值cout<<"dfadeaway;\n";cout<<a.p[0];//显示a数组元素a.p[0]的值writeToFile("");return0;}标准答案:n=r.n;//把对象r字符长度赋值给ndelete[]p;//删除动态数组pp=newint[n];//给动态数组p分配空间为nfor(inti=0;i<n;i++)//遍历对象r中的数组pp[i]=r.p[i];//把r.p[i]赋值给p[i]return*this;//返回被赋值的对象知识点解析:主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是“=”,该类的成员是动态数组p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:打开503号门…门是锁着的,打不开。打开503号门的锁…锁开了。打开503号门…门打开了。打开503号门…门是开着的,无须再开门。锁上503号门…先关门…门锁上了。注意:只修改每个“//ERROR********found********”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classDoor{intnum;//门号boolclosed;//true表示门关着boollocked;//true表示门锁着public:Door(intnum){//ERROR********found********num=this->num;closed=locked=true;}boolisClosed()corlst{returnclosed;}//门关着时返回true,否则返回falseboolisOpened()const{return!closed;}//门开着时返回true,否则返回falseboolisLocked()const{returnlocked;}//门锁着时返回true,否则返回falseboolisUnlocked()COlISt(return!locked;}//门未锁时返回true,否则返回falsevoidopen(){//开门tout<标准答案:(1)this一>num=num;(2)if(!closed)(3)voidlock(){知识点解析:(1)主要考查考生对this指针的掌握,在构造函数中this指针指向的是当前类,因此要给hum赋值使用语句this->num=hum;完成。(2)主要考查考生对if语句的掌握,先看类的私有成员中关于closed的定义:boolclosed;//true表示门关着。再看下一条语句:cout<<"门是开着的,无须再开门。";。即满足条件时就会输出:门是开着的,无须再开门。因此if括号内应该是!closed。(3)主要考查考生对const函数的掌握,lock函数体中存在语句locked=true,即有参数发生改变,因此不能用const。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中含有一个源程序文件proj2.cpp,请将堆栈类的定义补充完整。使程序的输出结果为:Theelementofstackare:4321注意:请勿修改主函数main和其他函数中的任何内容,只在横线处编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。t//proj2.cpp2#include3usingnamespacestd;4constintsize=5;5classStack;6classItem7{8public:9//********found********10Item(constint&val):___________{}//构造函数对item进行初始化11private:12intitem;13Item*next;14friendclassStack;15};16classStack17{18public:19Stack():top(NULL){}20~Stack();21intPop();22voidPush(constint&);23iprivate:24Item*top;25};26Stack::~Stack()27{28Item*p=top,*q;29while(p!=NULL)30{31q=p一>next;32//********found********33_____________;//释放p所指向的节点34p=q;35}36}37intStack::Pop()38{39Item*temp;40intret;41//**********found**********42___________;//使temp指向栈顶节点43ret=top->item;44top=top->next;45deletetemp;46returnret;47}48voidStack::Push(constint&val)49{50Item*temp=newItem(val);51//**********found**********52}//使新节点的next指针指向栈顶数据53top=temp;54)55intmain()56{57Stacks;58for(inti=1;i标准答案:(1)itern(val)(2)delete[]p(3)temp=top(4)temp->next=top知识点解析:(1)主要考查构造函数,对私有成员进行初始化,即item(val)。(2)主要考查使用ctelete语句释放指针,一般格式为:delete[]+指针。(3)指向栈顶节点的是top指针,要使temp指向栈顶节点,故使用语句temp=top;。(4)指向栈顶节点的是top指针,要使新节点的next指针指向栈顶数据,故使用语句temp->next=top:。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中定义的Matrix是一个用于表示矩阵的类。成员函数max_value的功能是求出所有矩阵元素中的最大值。例如,若有3×3矩阵则调用max_value函数,返回值为3。请编写成员函数max_value。要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//Matrix.h#include#includeusingnamespacestd;constintM=18;ConstintN=18;classMatrix{intarray[M][N];public:Matrix(){}intgetElement(inti,intj)const{returnarray[i][j];}voidsetElement(inti,intj,intvalue){array[i][j]=value;)intmaxvalue()const;voidshow(constchar,*s)const{cout<voidreadFromFile(constchar*f,Matrix&m){ifstreaminfile(f);if(infile.fail()){cerr<<"打开输入文件失败!";return;)intk;for(inti=0;i>k;m.setElement(i,j,k);}}intMatrix::maxvalue()const{//***********333***********//***********666***********}intmain(){Matrixm;readFromFile("",m);m.show("Matfix:");cout<标准答案:Inttemp=0;//定义整数变量temp,并赋值为零for(inti=0;i知识点解析:主要考查考生对二维数组的掌握,题目要求成员函数max_value的功能是求出所有矩阵元素中的最大值。因此只要逐个元素比较即可,下标i和j作为矩阵行和列的标记,使用双层for循环来遍历数组中的所有元素。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容:0012FF6810012FF3C50012FF6C20012FF4440012FF7030012FF4C30023FF7440012FF5420012FF7850012FF5C1006AFDCC~006AFDEF数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为4的连续地址即可。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。1#include<iostream>2usingnamespacestd;3intmain()4{5int*p,a[5]={1,2,3,4,5};6double*q,b[5]={5.0,4.0,3.0,2.0,1.0};7intx;8p=a;9q=b;10//********error********11for(x=0;x<=5;x++)12//********error********13cout<<p+x<<’’’’<<(p+x)<<’’’’<<q+x<<’’’’<<(q+x)<<end1;14return0;15}标准答案:(1)for(x=0;x<5;x++)(2)cout<<p+x<<’’’’<<*(p+x)<<’’’’<<q+x<<’’’’<<*(q+x)<<end1;知识点解析:本题的程序功能是输出相差为4的连续地址。从已定源程序的main主函数开始入手,依次执行程序中的语句,重点分析、调试标识下的错误语句,输出题目要求的结果。(1)根据数组a、b定义,它们都是5个元素,而第1个标识下的“for(x=0;x<=5;x++)”循环了6次,应该是5次,所以第1个标识下的将其修改为“for(x=0;x<5;x++)”(2)第2个标识下的p变量为指针型变量,p+x为指向数组中第x个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout<<p+x<<””<<*(p+x)<<’’’’<<q+x<<’’’’<<*(q+x)<<end1;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是:一个四位长的整数,每位数字加上3然后除以9的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的密码。程序输出:76542108注意:不能修改其他部分的代码。1#include<iostream.h>2#include<cmath>3intfun(intn)4{56}7intmain()8{9inti=1234;10cout<<fun(i)<<end1;11i=5678;12cout<<fun(i)<<end1;13return0;14}标准答案:1inti,a[4],t;2a[0]=n%10;//取整型n的第一位数字3a[1]=n%100/10;//取整型n的第2位数字4a[2]=n%1000/100;//取整型n的第3位数字5a[3]=n/1000;//取整型n的第4位数字6for(i=0;i<=3;i++)//每位数字加3,取余7{8a[i]+=3;9a[i]%=9;10}11t=a[0];//根据加密算法交换12a[0]=a[3];13a[3]=t;14t=a[1];15a[1]=a[2];16a[2]=t;17returna[3]*1000+a[2]*100+a[1]*10+a[0];//重组,返回加密数字知识点解析:(1)该程序功能是实现对一个整数的加密,具体的加密方法是:一个四位长的整数,每位数字加上3然后除以9的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的。(2)从已给部分源程序的main主函数开始入手,核心函数intfun(intn)中的n参数为输入要加密的整数。(3)首先取得要加密整数的每一位数字,并存入数组。(4)根据加密算法,首先利用循环实现每位数字加3,除以9取余。(5)然后根据加密算法进行数字交换,最后重组,返回密码。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序输出21到屏幕。完成以下功能:(1)增加静态私有变量m_Number,类型为int,请在注释//********1********后添加适当的语句。(2)增加静态变量m_Number并初始化为10,请在注释//********2********后添加适当的语句。(3)完成静态函数get的定义,请在注释//********3********后添加适当的语句。(4)完成对象obj对静态函数get的调用,使得输出21到屏幕上,请在注释//********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include<iostream.h>2classTestClass3{4//********1********56intm_Other;7public:8TestClass(inti)9{10m_Other=i;11}12//********3********1314{15returnm_Number+obj->m_Other;16}17};18//********2********1920intmain()21{22TestClassobj(11);23//********4********24cout<<<<end1;25return0;26}标准答案:(1)添加语句:staticintmNumber;(2)添加语句:intTestClass::m_Number=10;(3)添加语句:staticintget(TestClass*obj)(4)将“cout<<<<end1;”补充完整为:cout<<obj.get(&obj)<<end1;知识点解析:本题中程序的功能是利用get函数计算对象成员数值的和。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和get()成员函数实现各种输出操作。(1)题目1要求“增加静态私有变量m_Number,类型为int,”。静态变量的定义格式为:static类型变量名称,本题只要在类的private区域定义int型的静态变量m_Number,即第1个标识下添加“staticintm_Number;”。(2)题目2要求“增加静态变量m_Number并初始化为10”。第2个标识的位置在类TestClass的外部,在C++中,使用“::”作用域运算符声明定义的变量属于哪个类。由题干知道,m_Number属于类TestClass,根据C++的作用域运算符,在第2个标识下添加“intTestClass::m_Number=10:”。(3)题目3要求“完成静态函数get的定义”。根据第三个标识下的“returnm_Number+obj->m_Other;”语句知道,get函数具有形参obj指针。obj调用m_Other变量,说明它是TestClass类型,并且静态函数的定义只要在其前面声明static就可以了,即第3个标识下添加“staticintget(TestClass*obj)”。(4)题目4要求“完成对象obj对静态函数.鳓的调用,使得输出21到屏幕上”。程序中第4个标识下的“cout<<end1;”语句缺少输出值,题目中要求对象对静态函数get的调用,对象对成员函数的调用格式为:对象名.成员函数,即“cout<<obj.get(&@,bj)<<end1;”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1。程序中位于每个//ERROR****found****之后的一行语句有错误,请加以更正。更正后程序的输出结果应为:Name:SmithAge:21ID:99999CourseNum:12Record:970注意:只修改每个//ERROR****found****下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classStudentInfo{protected://ERROR**********found**********charName[30];intAge;intID;intCourseNum;floatRecord;public://ERROR**********found**********voidStudentInfo(char*name,intage,intID,intcourseNum,floatrecord);~StudentInfo(){delete[]Name;}floatAverageRecord(){returnRecord/CourseNum;}voidshow()const;};StudentInfo::StudentInfo(char*name,intage,intID,intcourseNum,floatrecord){Name=strdup(name);Age=age;this->ID=ID;CourseNum=courseNum;Record=record;}//ERROR**********found**********voidStudentInfo::show(){cout<<"Name:"<<Name<<"Age:"<<Age<<"ID:"<<ID<<"CourseNum:"<<CourseNum<<"Record:"<<Record<<endl;}intmain(){StudentInfost("Smith",21,99999,12,970);st.show();return0;}标准答案:(1)char*Name;(2)StudentInfo(char*name,intage,intID,intcourseNum,floatrecord);(3)voidStudentInfo::show()const知识点解析:(1)主要考查考生对字符指针的掌握,由构造函数的函数体Name=strdup(name),可知Name应该为字符指针。(2)主要考查考生对构造函数的掌握,构造函数前不能添加任何返回类型。(3)主要考查考生对const函数的掌握,由类的定义voidshowOconst,可知show函数是const函数。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2。此工程中包含一个程序文件main.cpp,其中有类Point("点")、Circle("圆")和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义,此程序的正确输出结果应为:[30,50]center=[120,89];radius=2.7注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动"//**********found********"。#include<iostream>#include<iomanip>usingnamespacestd;classPoint{//点类public://构造函数参数xValue为点的X坐标,yValue为点的Y坐标//**********found**********Point(intxValue=0,intyValue=0):________________________{};voidsetX(intxValue){x=xValue;}intgetX(){returnx;}voidsetY(intyValue){y=yValue;}intgetY(){returny;}//声明虚函数Disp()//**********found**********_____________________{cout<<’[’<<getX()<<","<<getY()<<’]’;};private:intx;//x坐标inty;//y坐标};classCircle:publicPoint{//圆类public://构造函数参数xValue为圆心的X坐标,yValue为圆心的Y坐标Circle(intxValue=0,intyValue=0,doubleradiusValue=0.0)//**********found**********_________________________________________________{}voidsetRadius(doubleradiusValue){radius=(radiusValue<0.0?0.0:radiusValue);}doublegetRadius(){returnradius;}doublegetDiameter(){return2*getRadius();}doublegetCircumference(){return3.14159*getDiameter();}//计算周长doublegetArea(){return3.14159*getRadius()*getRadius();}//计算面积voidDisp()//输出圆对象{cout<<"center=";Point::Disp();cout<<";radius="<<getRadius();}private:doubleradius;//圆半径};intmain(){Pointpoint(30,50);Circlecircle(120,89,2.7);Point*pointPtr;pointPtr=&point;pointPtr->Disp();cout<<endl;pointPtr=&circle;//将派生类对象赋给基类指针pointPtr->Disp();return0;}标准答案:(1)x(xValue),y(yValue)(2)virtualvoidDisp()(3):Point(xValue,yValue),radius(radiusValue)知识点解析:(1)主要考查考生对构造函数的掌握,使用成员列表初始化。(2)主要考查考生对虚函数的掌握.先看语句注释:声明虚函数Disp()。可知该函数为虚函数,注意虚函数要使用关键字virtual。(3)主要考查考生对构造函数的掌握,使用成员列表初始化。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件prog3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组v。ValArray类的成员函数equals用于判断两个对象是否相等。两个ValArray对象相等,当且仅当两者的元素个数size相等,并且整型数组v的对应元素分别相等。如果两个对象相等,则equals返回true,否则返回false。请编写成员函数equals。在main函数中给出了一组测试数据,此种情况下程序的输出结果应为:v1={1,2,3,4,5}v2={1,2,3,4}v3={1,2,3.4.6}v4={1,2,3,4,5}v1!=v2v1!=v3v1==v4要求:补充编制的内容写在//********333********与//********666********之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。//ValArray.h#include<iostream>usingnamespacestd;classValArray{int*v;intsize;public:ValArray(constint*p,intn):size(n){v=newint[size];for(inti=0;i<size;i++)v[i]=p[i];}~ValArray(){delete[]v;}boolequals(constValArray&other);voidprint(ostream&out)const{out<<’{’;for(inti=0;i<size-1;i++)out<<v[i]<<",";out<<v[size-1]<<’}’;}};voidwriteToFile(constchar*);//main.cpp#include"ValArray.h"#include<fstream>boolValArray::equals(constValArray&other){//********333********//********666********}intmain(){constinta[]={1,2,3,4,5};constintb[]={1,2,3,4};constintc[]={1,2,3,4,6};constintd[]={1,2,3,4,5};ValArrayv1(a,5);ValArrayv2(b,4);ValArrayv3(c,5);ValArrayv4(d,5);cout<<"v1=";v1.print(cout);cout<<endl;cout<<"v2=";v2.print(cout);cout<<endl;cout<<"v3=";v3.print(cout);cout<<endl;cout<<"v4=";v4.print(cout);cout<<endl;cout<<"v1"<<(v1.equals(v2)?"==":"!=")<<"v2"<<endl;cout<<"v1"<<(v1.equals(v3)?"==":"!=")<<"v3"<<endl;cout<<"v1"<<(v1.equals(v4)?"==":"!=")<<"v4"<<endl;writeToFile("");return0;}标准答案:if(size!=other.size)//判断数组长度returnfalse;for(inti=0;i<size;i++)//判断数组元素if(v[i]!=other.v[i])returnfalse;returntrue;知识点解析:主要考查考生对数组的掌握,函数boolValArray::equals(constValArray&other)要求判断两个数组是否相等,先判断数组长度,如果长度相同再根据数组元素依次判断。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:initTestClassdelTestClass注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。1#include<iostream.h>2classTestClass3{4//********error********56//********error********7intTestClass(){cout<<’’initTestClass’’<<end1;);8//********error********9void~TestClass(){cout<<’’delTestelass’’<<end1;};10};11voidmain()12{13TestClassobj;14return;15}标准答案:(1)添加语句:public:(2)TestClass(){cout<<’’initTestClass’’<<end1;};(3)~TestClass(){cout<<’’de1TestClass’’<<end1;};知识点解析:本题的功能是分别利用构造函数和析构函数中的输出语句,输出“initTestClass”和“delTestClass”字符串。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的TestClass构造函数实现各种输出。(1)打开modi1.cpp,调试程序,显示错误提示为第一标识下“modi1.cpp(13):errorC2248:’TestClass::TestClass’:cannotaccessprivatememberdeclaredinclass’TestClass’”,构造函数由于是私有的,无法获得,所以应该定义为public型,即第1个标识下添加“public:”。(2)构造函数首部的一般形式为:构造函数名(形参列表),构造函数没有返回值,所以定义构造函数时不需要声明类型,所以“intTestClass(){cout<<’’initTestClass’’<<end1;}:"语句修改为“TestClass(){cout<<’’initTestClass’’<<end1;}:”。(3)析构函数的名字是类名的前面加一个“~”符号,所以“void~TestClass(){cout<<’’delTestClass’’<<end1;};”修改为“~TestClass(){cout<<’’delTestClass"<<end1;}”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入0时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数fun(),函数fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助表元。注意:不能修改程序的其他部分,只能修改如fun()函数。1#include<iostream>2classNODE3{4public:5intdata;6NODE*next;7};8voidfun(NODE*list,intx)9{1011}12voidmain()13{14intx;15NODE*head,*p;16/*首先建立只有辅助袁元的空链表*/17head=newNODE;18head->next=NULL;19std::cout<<’’Enterintegers,endwith0’’<<std::end1;20while(1)21{22std::cin>>x;23if(x==0)24break;25fun(head,x);26}27for(p=head->next;p!=NULL;p=p->next)28std::cout<<p->data<<’’;29std::cout<<std::end1;30do{31p=head->next;32deletehead;33head=p;34}while(p);35}标准答案:1NODE*u,*v,*p;2u=list;3v=u->next;4while(v!=NULL&&x<v->data)//寻找插入的位置5{6u=v;v=v->next;7}8if(v==NULL||x>v->data)//判断是否为新的元素9{10p=newNODE;11p->data=x;//生成新的元素12p->next=v;13u->next=p;//插入新的元素14}知识点解析:(1)该程序功能是构造一个以大到小顺序链接的链表。它的解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(NODE*list,intx)中的list参数为单链表,x为要插入的数据。(3)首先利用while循环寻找插入元素的位置。(4)然后判断要插入的元素是否为新元素。。(5)如果为新元素,那么执行单链表的操作,插入元素。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。其中:定义了类circle和column,column类由circle类protected派生,但是两个类的定义并不完整,请按照以下的要求,将程序补充完整。(1)定义类circle的保护数据成员函数r和area,它们都是double型的数据,请在注释//********1********后完成。(2)添加类circle的无参数的构造函数,使得类circle对象的r默认值为0,请在注释//********2********后完成。(3)添加派生类column的构造函数的定义,使得参数为double型的height和radius并将其分别赋给数据成员h和基类的r请在注释//********3********之后完成。(4)完成派生类column的成员函数print()的定义,请在注释//********4********之后完成,使得输出为:radius=5area=78.54height=10vol=785.4注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include<iostream.h>2constdoublepi=3.1416;3classcircle4{5protected:6//********1********78public:9//********2********1011{12r=0.0;13}14circle(doubleradius)15{16r=radius;17}18voidprint()19{20area=r*r*pi;21cout<<’’radius=’’<<r<<’’<<’’area=’’<<area<<end1;22}23};24classcolumn:protectedcircle25{26protected:27doubleh;28public:29//********3********3031{32h=height;33r=radius;34}35voidprint()36{37circle::print();38//********4********3940}41};42intmain()43{44columnco1(5.0,10.0);45co1.print();46return0;47}标准答案:(1)添加语句:doubler,area;(2)添加语句:circle()(3)添加语句:column(doubleradius,doubleheight)(4)添加语句:cout<<’’height=’’<<h<<’’<<’vo1=’’<<area*h<<end1;知识点解析:本题的功能是计算圆的面积和周长。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类和成员函数实现各种输出操作。(1)题目1要求“定义类circle的保护数据成员函数r和area,它们都是double型的数据”。保护成员与private和public一样是用来声明成员的访问权限的。在已有程序circle类中的protected:区域,添加变量r和area的定义,即“doubler,area;”。(2)题目2要求“添加类circle的无参数的构造函数,使得类circle对象的r默认值为0”。在C++中,构造函数是一种特殊的成员函数,它的名字与类同名,没有参数的构造函数一般形式为:构造函数名(),所以这里添加“circle()”。(3)题目3要求“添加派生类column的构造函数的定义”。同(2),另外带参数的构造函数的一般格式为:构造函数名(类型1形参1,类型2形参2,……),所以这里添加“column(doubleradius,doubleheight)”。(4)题目4要求“完成派生类column的成员函数print()的定义”。根据题干中输出结果,知道第一个输出值为height,第二个输出值为vol,即area*h,所以这里添加“cout<<”height=’’<<h<<’’<<’’vol=’’<<area?*h<<end1;”。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,其中有线段类Line的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:Endpoint1=(1,8),Endpoint2=(5,2),length=7.2111。注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>#include<cmath>usingnamespacestd;classLine;doublelength(Line);classLine{//线段类doublex1,y1;//线段端点1doublex2,y2;//线段端点2public://ERROR*******found*******Line(doublex1,doubley1,doublex2,doubley2)const{this一>x1=x1;this一>y1=y1;this一>x2=x2;this一>y2=y2;}doublegetX1()const{returnx1;}doublegetY1()const{reLurny1;}doublegetX2()const{returnx2;}doublegetY2()const{returny2;}voidshow()const{cout<<"Endpoint1=("<<x1<<","<<y1;cout<<"),Endpoint2=("<<x2<<","<<y2;//ERROR*******found*******cout<<"),length="<<length(this)<<"。"<<endl;}};doublelength(Line1){//ERROR*******found*******returnsqrt((1.x1一1.x2)*(1.xl—1.x2)+(1.yl一1.y2)*(1.y1一1.y2));}intmain(){Linerl(1.0,8.0,5.0,2.0);r1.show();return0;}标准答案:(1)Line(doublex1,doubley1,doublex2,doubley2){(2)cout<<"),length="<<length(*this)<<"。"<<endl;(3)returnsqrt((1.getX1()一1.getX2())*(1.getX1()一1.getX2())+(1.getY1()一1.getY2())*(1.getY1()一1.getY2()));知识点解析:(1)主要考查考生对构造函数的掌握,构造函数要给私有成员赋初始值,因此不能使用const来限制。(2)主要考查考生对this指针的掌握,由函数length的声明doublelength(Line);可知,length函数的形参是I,ine类,在voidshow()const函数里,this指针指向的是当前Line类,因此可以用*this表示当前Line类。(3)主要考查考生对成员函数的掌握,length函数是类外函数,不能直接调用类的私有成员,因此要通过成员函数取得对应的值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proi2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排序函数sortByName和主函数main的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:按姓名排序排序前张三男出生日期:1978年4月20日王五女出生日期:1965年8月3日杨六女出生日期:1965年9月5日李四男出生日期:1973年5月30日排序后:李四男出生日期:1973年5月30日王五女出生日期:1965年8月3日杨六女出生日期:1965年9月5日张三男出生日期:1978年4月20日注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<lostream>usingnamespacestd;classDate{//日期类intyearfmonthfday;//年、月、日public:Date(intyear,intmonth,intday):year(year),month(month),day(day){}intgetYear()const{returnyear;}intgetMonth()const{returnmonth;}intgetDay()const{returnday;}};classPerson{//人员类charname[14];//姓名boolis_male;//性别,为true时表示男性Datebirth_date;//出生日期public:Person(char*name,boolis_male,Datebirthdate)//**********found**********:_____________{strcpy(this一>name,name);}constchar*getName()const{returnname;}boolisMale()const{returnismale;}DategetBirthdate()const{returnbirthdate;}//利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于intcompareName(constPerson&p)const{//**********found**********_______]}voidshow(){cout<<endl;cout<<name<<"<<(ismale?"男":"女")<<"<<"出生日期:"<<birthdate.getYear()<<"年"//显示出生年//**********found**********___________//显示出生月<<birth_date.getDay()<<"日";//显示出生日}};voidsortByName(Personps[],intsize){//将人员数组按姓名排列为升序for(inti=0;i<size一1;i++){//采用选择排序算法intm=i;for(intj=i+1;j<size;j++)if(ps[j].compareName(ps[m])<0)m=j;if(m>i){Personp=ps[m];Ps[m]=ps[i];Ps[i]=p;}}}intmain(){Personstaff[]={Person("张三",true,Date(1978,4,20)),Person("王五",false,Date(1965,8,3)),Person("杨六",false,Date(1965,9,5)),Person("李四",true,Date(1973,5,30))};constintsize=sizeof(staff)/sizeof(staff[0]);inti;cout<<endl<<"按姓名排序";cout<<endl<<"排序前";for(i=0;i<size;i++)staff[i].show();sortByName(staff,size);cout<<endl<<endl<<"排序后:";for(i=0;i<size;i++)staff[i].show();cout<<endl;return0;}标准答案:(1)is_male(is_male),binh_date(binh_date)(2)returnstrcmp(name,p.getName());(3)<<binh_date.getMonth()<<"月"知识点解析:(1)主要考查考生对构造函数的掌握,由函数体内strcpy(this一>name,name);可知,要使用成员列表初始化的成员为is_male和birth_date。(2)主要考查考生对strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。因为strcmp()函数的功能是比较字符串大小,因此可以直接被return语句调用:returnstrcmp(name,p.getName());。(3)主要考查考生对成员函数的掌握,程序的注释为:显示出生月,由此可以知道这里要输出出生月份,直接调用函数getMonth()即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数operator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//DataList.h#include<iostream>usingnamespacestd;classDataList{//数据表类intlen;double*d;public:DataList(intlen,doubledata[]=NULL);DataList(DataList&data);intlength()const{returnlen;}doublegetElement(inti)const{returnd[i];}DataListoperator+(constDataList&list、const;//两个数据表求和voidshow()const;//显示数据表};voidwriteToFile(char*,constDataList&);//main.cpp#include"DataList.h"DataList::DataList(intlen,doubledata[]):len(fen){d:newdouble[len];for(inti=0;i<len;i++)d[i]=(data==NULL?0.0:data[i]);}DataList::DataList(DataList&data):len(data.len){d=newdouble[len];for(inti=0;i<len;i++)d[i]=data.d[i];}DataListDataList::operator+(constDataList&list)const{//两个数据表求和doubie*dd=newdouble[list.length()];//********333********//********666********returnDataList(list.length(),dd);}voidDataList::show()con.st{//显示数据表for(inti=0;i<len一1;i++)cout<<d[i]<<",";cout<<d[len—1]<<endl;}intmsin(){doubles1[]={1,2,3,4,5,6};doubles2[]={3,4,5,6,7,8};DataListlistl(6,s1),list2(6,s2);//定义两个数据表对象cout<<”两个数据表:”<<endl;list1.show();list2.show();cout<<endl<<"两个数据表之和:"<<endl;(listl+list2).show();writeToFile("",list1+list2);return0;}标准答案:1for(inti=0;i<len;++i)//遍历对象list中的数组和d数组,把对应的值相加后放到数组dd中。2dd[i]=d[i]+list.d[i];知识点解析:主要考查考生对重载运算符的掌握,题目要求对两个数据表求和。程序已经定义了动态数组dd,并已经分配好了空间,接下来只要运用循环语句完成元素相加并进行赋值即可。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有误,请改正其中的错误,使程序正常运行,并使程序在界面上输出为:平均值为:29最大值为:112最小值为:-11注意:错误的语句在//******error******的下面。修改该语句即可。1#include<iostream>2usingnamespacestd;3in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 尿道口溢尿护理讨论
- Excel表格公式培训
- 小学数学教师培训心得
- 宠物用品店创业计划书
- 急诊护理团队精神
- 常用眼药水知识
- 影视剧组食堂服务合同
- 中班分享课课件
- 企业并购合同履约金协议
- 服装原料采购协议
- 《直线导轨》课件
- 《安全操作规程培训》课件
- 2024年10月自考00158资产评估试题及答案含评分参考
- 膨胀节检修施工方案
- 安全防范培训演练制度
- 信息检索课件 第2章 文献检索方法(1)-2
- 民间借贷利息计算表
- GB/T 13477.25-2024建筑密封材料试验方法第25 部分:耐霉菌性的测定
- 中国邮政四川分公司招聘笔试题库2024
- 广西文化产业集团有限公司招聘笔试题库2024
- 2024年浙江省中考数学试题及答案
评论
0/150
提交评论