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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷14(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹pmjl下的工程projl。程序中位于每个“//ERROR****found*****”之后的—行语句有错误,请加以改正。改正后程序的输出结果应为:Name:SmithAge:21ID:99999CourseNum:12Record:970注意:只修改每个“//ERROR****found*****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;C1assStudentInfo{protected://ERROR**********found**********charName;intAge;intID;intCourseNum;floatRecord;public:StudentInf0(char*name,intAge,intID,intcourseNum,floatrecord);//ERROR**********found**********void—StudentInfo(){}floatAverageRecord(){returnRecord/CourseNum;}voidshow()const{cout<<¨Name:”<ID=ID;CourseNum=courseNum;Record=record;}intmain(){StudentInfost(”Smith”,21,99999,12,970);st.show();return0;}标准答案:(1)char*Name;(2)~Studentlnfo(){}(3)StudentInfo::StudentInfo(char*name,intage,intID,intcourseNam,floatrecord)知识点解析:本题考查Studentlnfo类,其中涉及构造函数、动态数组、析构函数和成员函数。声明数组时要指定数组的大小,否则将会导致程序出错,不论是构造函数还是析构函数都不能在函数名前添加返回类型。【解题思路】(1)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是一个有效char型字符,因此要定义成char型指针。(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。(3)主要考查考生对构造函数定义的掌握,构造函数也要使用作用域符号“::”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehicle类,并派生出motofcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:801501001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//******fomld*****”。#includeclassvehicle{private:intMaxSpeed;intWeight,public://**********found**********vehicle(intmaxspeed,intweight):________一vehicle()f);intgetMaxSpeed(){returnMaxSpeed;}intgetWeight(){returnWeight;)};//**********found**********classbicycle:__________publicvehicle{private:intHeight;public:bicycle(intmaxspeed,intweight,intheight):vehicle(maxspeed,weight),Height(height){)intgetHeight(){returnHeight,},};//**********found**********classmotorcar:______-publicvehicle{private:intSeatNum;public:motorcar(intmaxspeed,intweight,intseatnum):vehicle(maxspeed,weight),SeatNum(seatnum){)intgetSeatNum(){returnSeatNum;);),//**********found**********classmOtOrcycle:_________{public:motorcycle(intmaxspeed,intweight,intheight):vehicle(max’speed,weight),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,1){)};voidmain(){motorcyclea(80,150,100);cout<标准答案:(1)MaxSpeed(maxspeed),Weight(weight){};(2)virtual(3)virtual(4)p,ublicbicycle,publicmotorcar知识点解析:本题考查vehicle类及其派生类motorcar和bicycle,再由这两类派生出motorcycle类,其中涉及构造函数、成员函数和析构函数。构造函数采用成员初始化列表来完成对私有成员的初始化,派生类的书写要注意关键字。【解题思路】(1)主要考查考生对构造函数的掌握,构造函数使用初始化列表来对私有成员MaxSpeed和Weight初始化。(2)主要考查考生对派生类的掌握,题目要求将vehicle作为虚基类,避免二义性问题。因此在这里添加virtual使vehicle成为虚基类。(3)主要考查考生对派生类的掌握,题目要求以motorcar和bicycle作为基类,再派生出motorcycle类。在主函数中可以看到motorcycle类的实例a调用getHeight函数和getSeatNam函数,由此可知这两个基类都是公有继承,因此得出语句:publicbicycle,publicmotorcar。【解题宝典】虚基类继承时要添加关键字virmM,以避免二义性。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数operator=,以实现深层复制。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include#includeusingnamespacestd;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<标准答案:n=r.n;//把对象r字符长度赋值给ndelete[]p;//删除动态数组pp=newint[n];//给动态数组p分配空间为nfor(inti=0;i知识点解析:本题考查CDeepCopy类,其中涉及动态数组、构造函数、析构函数和运算符重载。运算符重载要先把类的定义弄清,其次要理解被重载的运算符的含义。【解题思路】主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是“:”,该类的成员是动态数组p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:TestClass2TestClass3注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includeclassTestClassl{public:virtualvoidfun()=0;};classTestClass2:publicTestClassl{∥********error********intfun(){usingnamespacestd;cout<<"TestClass2”<fun(),obj2.fun();return;}标准答案:(1)voidfun()(2)添加语句:publ.ic:(3)std::cout<<“TestClass3”<知识点解析:本题程序中的功能为输出字符串TstClass2和TestClass3。从己定源程序的main主函数开始入手,可以看出程序通过定义类的对象,利用类中定义的成员函数完成题目中要求的输出。解题思路(1)fun()函数是没有返回值的,而第1个标识下的“intfun()”语句中定义的fun()函数是有int型返回值的,所以将其修改为“voidfun()”。(2)第2个标识下的fun()函数,没有被定义为public型,所以外部其他成员无法访问,只能是类本身访问,所以添加“public:”。(3)在程序中用到C++标准库时,要使用std标准命名空间进行限定。第三个标识下cout为标准库函数,所以要声明cout是在命名字间std中定义的流对象,即为“std::cout<<"TestClass3”二、简单应用题(本题共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)首先,利用for循环进行外层循环,要输出的i行。(2)然后,利用for循环进行内层循环,输出对应i行的i列。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,要求编写一个CMyShape类,含有求面积求周长等纯虚函数。然后编写一个CMyRectangle类和CMyCirele类继承CMyShape,并实现求面积、求周长的两个函数。在mainC函数中测试得到下面的结果:在CMyShape类构函数造内在CMyCircle类构造函数内在CMyShape类构造函数内在CMyRectangle类构造函数内myCircle:Area=314.159Girth=62.8319myRectangle:Area=900Ginh=120具体要求如下:(1)定义求面积纯虚函数,请在注释∥********1********之处添加适当的语句。(2)定义求周长纯虚函数,请在注释∥********2********之处添加适当的语句。(3)请在注释∥********3********和∥********4*******之处添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#include#definePI3.1415926classCMyPoint{public:intx,y;CMyPoint(inttx,intty):X(tx),y(ty){)};classCMyShape{public:CMyShape(){cout<GetArea()<<“\t”<<”Girth=”<GetGirth()<GetArea()<<“\t”<<“Girth=”<GetGirth()<标准答案:(1)添加语句:virtualdoubleGetArea()=0;(2)添加语句:virtualdoubleGetGirth()=0;(3)添加语句:myShape=myCircle;(4)添加语句:myShape=myRectangie;知识点解析:(1)第1个标识下声明纯虚函数,纯虚函数的定义格式为:vimml<函数类型><函数名>(<参数表>)=0,由程序后面的函数体实现可知求面积纯虚函数的函数名为GetArea0,因此第1个标识下应添加“virtualdoubleGetArea0=0;”。(2)声明格式和(1)相同,由求周长的函数具体实现可知该函数的名为GetGirth(),因此第2个标识下应添加“virtualdoubleGetGirth0=0;”(3)主函数中定义了CMyShape类对象指针myShape,CMyCircle类对象指针myCircle,CMyRectangle类对象指针myRectangle,由类继承关系知,在调用子类的构造函数的时候,编译器会自动调用父类的默认构造函数来初始化父类,因此在实例化类CMyRectangle和类CMyCircle的实例的时候,抽象父类CMyShape的默认构造函数会先被调用,因此在屏幕上先输出“在CMyShape类构函数造内”,然后输出“在CMyCircle类构造函内”,实例化CMyRectangle对象的过程也是如此。同时由纯虚函数的性质知,抽象基类不需要实现纯虚函数,它的实现是在子类中完成的,但是通过用子类实例隐式转换成基类实例,可以使得基类实例具有子类实例的特性,因此可以访问子类的成员函数,myShape是基类指针,其虚函数GetArea0和GetGirth0没有实现,要求程序输出面积值和周长值,只可能是myShape指向子类对象,调用子类的函数GetAreaO和OetOirth0打印输出,显然第3个标识下是myShape指向子类CMyCircle对象,即myShape--myCircle;。(4)同理第4个标识下myShape指向子类CMyRectangle对象,即第4个标识下应添加“myShape=myRectangle;”。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:输出a所指数组中的前13个数据,要求每行输出5个数。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#includevoidfun(int*a,intn){inti;for(i=0;i标准答案:(1)1%5(2)\n(3)a[i]知识点解析:填空1:每行输出5个数,即当下标值能整除5时换行。填空2:输出换行符’\n’。填空3:输出数组元素。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun的功能是:根据整型形参m,计算如下公式的值:例如,若m的值为5,则应输出1.463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#includedoublefun(intm){doubley=1.0;inti;/*********found*********/for(i=2,i标准答案:(1)for(i=2;i<=m;i++)(2)y+=1.0/(i*i);或y+=(double)1/(i*i);知识点解析:(1)根据公式可以知道for循环语句中变量i的取值范围应该包括m。(2)变量y是一个double型变量,而i是整型变量,所以要进行类型转换,改为y+=1.0/(i*i);或y+=(dlouble)1/(i*i);。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放入主函数的age数组中。要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都放在d[10]中。结果在主函数中输出。注意:部分源程序在文件PROGI.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#defineN50#defineM11voidfun(int*a,int*b){}doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}voidmain(){FILE*wf;intage[N],i,d[M];intb[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};for(i=0;i标准答案:voidfun(int*a,int*b){inti,j;for(j=0;j=100)b[10]++;/*如果年龄大于等于100,b[10]自增1*/elseb[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/}知识点解析:本题是一个分段函数的问题,用两个循环来完成。第1个循环的作用是使b中的所有元素值都为0。这个循环不能省略,因为若未对b中的元素赋初值,则它们的值是不可预测的。第2个循环的作用是分别统计a中各年龄段的人数。当a[i]≥100时,按题意要将其统计到h[10]中。else的作用是如果年龄小于100,则将其分别统计到b[a[i]/10]中。由运算优先级可知先进行a[i]/10的运算,所得结果作为b的下标。若a[i]为0~9时,a[i]/10的值为0,且0~9岁的人数正好要存入b[0]中。若a[i]为10~19时,a[i]/10的值为1,且10~19岁的人数正好要存入b[1]中,依此类推。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,该工程中包含程序文件main.cpp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:打开503号门…门是锁着的,打不开。打开503号门的锁…锁开了。打开503号门…门打开了。打开503号门…门是开着的,无须再开门。锁上503号门…先关门…门锁上了。注意:只修改每个“//ERROR*********found*********”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classDoor{intnum;//门号boolclosed;//true表示门关着boollocked;//true表示门锁着public:Door(intnum){//ERROR*******found*******num=this->num;closed=locked=true;}boolisClosed()const{returnclosed;}//门关着时返回true,否则返回falseboolisOpened()const{return!closed;}//门开着时返回true,否则返回falseboolisLocked()const{returnlocked;}//门锁着时返回true,否则返回falseboolisUnlocked()const{return!locked;)//门未锁时返回true,否则返回falsevoidopen(){//开门cout<<end1<<"打开"<<num<<"号门…";//ERROR****found****if(closed)cout<<"门是开着的,无须再开门。";elseif(locked)cout<<"门是锁着的,打不开。";else{closed=false;cout<<"门打开了。";}}voidclose(){//关门cout<<end1<<“关上”<<num<<"号门…";iffclosed)cout<<“门是关着的,无须再关门。”;else{closed=true;cout<<"门关上了。";}}//ERROR*******found*******voidlock()const{//锁门cout<<endl<<"锁上"<<num<<"号门…";if(10cked)tout<<"门是锁着的,无须再锁门。“;else{if(!closed){tout<<"先关门…";closed=true;}locked=true;COUt<<"门锁上了。";}}voidunlock(){//开锁cout<<end1<<"开"<<num<<"号门的锁…";if(!locked)tout<<"门没有上锁,无须再开锁。";else{locked=false;cout<<"锁开了。";}}},intmain()fDoordoor(503);door.open();door.unlock();door.open();door.open();door.lock();return0;}标准答案:(1)this->num=num;(2)if(!closed)(3)voidlock(){知识点解析:(1)主要考查考生对this指针的掌握,在构造函数中this指针指向的是当前类,因此要给num赋值使用语句this->num=num;完成。(2)主要考查考生对if语句的掌握,先看类的私有成员中关于closed的定义:boolclosed;//true表示门关着。再看下一条语句:cout<<"门是开着的,无须再开门。";。即满足条件时就会输出:门是开着的,无须再开门。因此if括号内应该是!closedo(3)主要考查考生对const函数的掌握,lock函数体中存在语句locked:true,即有参数发生改变,因此不能用const。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件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<iostream>usingnamespacestd;classDate{//日期类intyear,month,day;//年、月、日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,boolismale,Datebirthdate)//**********found**********:_______{strcpy(this->name,name);}constchar*getName()const{returnname;}boolisMale()const{returnis_male;}DategetBirthdate()const{returnbirth_date;}//利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于intcompareName(constPerson&p)const{//**********found**********_______}voidshow(){cout<<end1;cout<<name<<"<<(is_male?"男":"女")<<"<<"出生日期:"<<birth_date.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<<end1<<"按姓名排序";cout<<end1<<"吲}序前:";for(i=0;i<size;i++)staff[i].show();sortByName(staff,size);cout<<end1<<end1<<"排序后:";for(i=0;i<size;i++)staff[i].show();cout<<end1;return0;}标准答案:(1)is_male(is_male),birth_date(birth_date)(2)returnstrcmp(name,p.getName());(3)<<birth_date.getMonth()<<"月"知识点解析:(1)主要考查考生对构造函数的掌握,由函数体内strcpy(this->name,name);可知,要使用成员列表初始化的成员为is_male和birth_date。(2)主要考查考生对strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。因为strcmp()函数的功能是比较字符串大小,因此可以直接被retum语句调用:returnstrcmp(name,p.getName());。(3)主要考查考生对成员函数的掌握,程序的注释为:显示出生月,由此可以知道这里要输出出生月份,直接调用函数getMonth()即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数remove。在main函数中给出了一组测试数据,此时程序的正确输出结果应为:234527283166752345627283166752345619272831667534561927283166753456192728316675要求:补充编制的内容写在“********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。//IntegorSet.h#ifndefINTEGERSET#defineINTEGERSET#include<iostream>usingnamespacestd;constintMAXELEMENTS=100;//集合最多可拥有的元素个数classIntegerSet{intelem[MAXELEMENTS];//用于存放集合元素的数组intcounter;//用于记录集合中元素个数的计数器public:IntegerSet():counter(0){}//创建一个空集合IntegerSet(intdata[],intSize);//利用数组提供的数据创建一个整数集合voidadd(intelement);//添加一个元素到集合中voidremove(intelement);//删除集合中指定的元素intgetCount()const{returncounter;}//返回集合中元素的个数intgetElement(inti)const{returnelem[i];)//返回集合中指定的元素voidshow()const;};voidWriteToFile(char*);#endif//main.cpp#include"IntegerSet.h"#include<iomanip>IntegerSet∷IntegerSet(intdata[],intsize):counter(0){for(inti=0;i<size;i++)add(data[i]);}voidIntegerSet∷add(intelement){intj;//从后往前寻找第一个小于等于element的元素for(j=counter;j>0;j--)if(element>=elem[j-1])break;//如果找到的是等于element的元素,说明要添加的元素已经存在,直接返回if(j>0)if(element==elem[j-1])return;//如果找到的是小于element的元素,j就是要添加的位置//2元素及其后面的元素依次后移,腾出插入位置for(intk=counter;k>j;k--)elem[k]=elem[k-1];elem[j]=element;//将element插入到该位置counter++;//计数器加1}voidIntegerSet∷remove(intelement){//********333********//********666********}voidIntegerSet∷show()const{for(inti=0;i<getCount();i++)cout<<setw(4)<<getElement(i);cout<<end1;}intmain(){intd[]={5,28,2,4,5,3,2,75,27,66,31};IntegerSets(d,11);s.show();s.add(6);s.show();s.add(19);s.show();s.remove(2);s.show();s.add(4);s.show();WriteToFile("");return0;}标准答案:for(int1=0;1<counter;1++)//遍历整个集合(数组elem)if(element==elem[i])//如果element等于elem[i]{for(intj=i;j<counter-1;j++)//从i开始遍历集合elemelem[j]=elem[j+1];//把elem[j+1]赋值给elem[j]counter--;//elem长度自减1return;//返回}知识点解析:主要考查考生对有序数组的掌握,题目要求成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。遍历数组elem中的元素,找出与形参element相等的元素,并将其删除,每删除一个元素,即将该元素之后的每个元素前移一位,如果不存在与形参element相等的元素则没有操作。使用下标i遍历数组,if语句判断是否与element相等。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程projl,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Constructorcalled.Thevalueis10Copyconstructorcalled.Thevalueis10Destructorcalled.Destructorcalled.注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。1//proj1.cpp2#include3usingnamespacestd;45classMyClass{6public:7//ERROR*************found*************8MyClass(inti)9{value=i;cout<<"Construc-torcalled."<标准答案:(1)MyClass(inti=10)(2)MyClass(COllstMyClass&p)(3)~MyClass()知识点解析:(1)考查构造函数参数默认值,题目要求输出语句:Thevalueis10,从主函数中可以看出,obj1并没有初始化,但是obj1调用Print()函数时它的值为10,由此可知构造函数的形参有默认值,且值为10,因此得出语句MyClass(inti=10)。(2)主要考查考生对复制构造函数的掌握,复制构造函数的形参都为引用,同时为了不改变形参的值要加上const,因此得出语句MyClass(constMyClass&p)。(3)主要考查考生对析构函数的掌握,析构函数和构造函数一样,前面不能添加任何类型,要把void去掉。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹prog2下的工程prog2。此工程中包含一个程序文件main.cpp,其中有“部门”类Department和“职工”类Staff的定义,还有主函数main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:改换办公室前:职工号:0789姓名:张三部门:人事处办公室:521职工号:0513姓名:李四部门:人事处办公室:521改换办公室后:职工号:0789姓名:三部门:人事处办公室:311职工号:0513姓名:李四部门:人事处办公室:311注意:只在横线处填写适当的代码,不要改动程序中的其他内容。1#include2usingnamespacestd;3classDepartment{//“部门”类4public:5Department(constchar*name,constchar*office){6strcpy(this->name,name);7//**********found**********8_______9}10constchar*getName()const{re-turnname;}//返回部门名称11//**********found**********12constchar*getOffice()const{_______}//返回办公室房号13voidchangeOfficeTo(constchar*of-fice){//改换为指定房号的另一个办公室14strcpy(this->office,office);15}16private:17charname[20];//部门名称18charoffice[20];//部门所在办公室房号19};20classStaff{//“职工”类21public:22//**********found**********23Staff(constchar*my_id,constchar*my_name,Department&my_dept):______{24strcpy(this->staff_id,my_id);25strcpy(this->name,my_name);26}27constchar*getID()const{returnstaff_id;}28constchar*getName()const{re-turnname;}29DepartmentgetDepartment()const{returndept;}30private:31charstaffid[10];//职工号32charname[20];//姓名33Department&dept;//所在部门34};35voidshowStaff(Staff&staff){36cout<<"职工号:"<标准答案:(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_jd);strepy(this->name,my_name);可知,只有dept没有初始化,而空格前有字符“:”,这是成员列表初始化的标识符,因此填写dept(my_dept)即可。(4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由521搬到311。在Department类中有函数voidchangeOfficeTo(constchat*office)可以修改办公室的房间号,直接调用即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明了MiniComplex是一个用于表示复数的类。请编写这个operator+运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例女口,(23+34i)+(56+35i)等于(79+69i)。要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。1//Minicomplex.h2#include3usingnamespacestd;4classMiniComplex//复数类5{6public:7//重载流插入和提取运算符8friendostream&operator<<9(ostream&osObject,constMiniComplex&complex)10{11osObject<<"("<>(istream&isObject,MiniComplex&complex)15{16charch;17isObject>>complex.realPart>>ch>>complex.imagPart>>ch;18jreturnisObject;19}20MiniComplex(doublereal=0,doub-leimag=0);21//构造函数22MiniComplexoperator+(constMiniC0mplex&0therC0mplex)const;23//重载运算符+24private:25doublerealPart;//存储实部变量26doubleimagPart;//存储虚部变量27};2829voidwriteToFiie(char*);1//main.cpp2#include"MiniComplex.h"3MiniComplex::MiniComplex(doublere-al,doubleimag)frealPart=reai;imagPart=imag;}4MiniComplexMiniComplex::operator+(constMiniComplex&otherComplex)const5{6//********333********789//********666********10}11intmain()12{13voidwriteToFile(char*);14MiniComplexnuml(23,34),num2(56,35);15cout<<"InitiaiValueofNuml="<标准答案:1MiniComplexsum;//定义复数对象sum2sum.imagPart=this->imsgPart+otherComplex.imagPart;//把this中的虚部(this->imaqPart)和othercomplex虚部相加赋值给sum虚部3sum.realPart=this->realPart+otherComplex.realPart;//把this中的实部(this->reapart)加上othercomplex实部赋值给sum实部4returnsum;//返回对象sum知识点解析:主要考查考生对运算符重载的掌握,题目要求编写op-erater+运算符函数,以实现复数的求和与运算。复数的和的实部等于两个复数的实部之和,虚部等于两个复数的虚部之和。函数要返回的类型是MiniComplex,因此要先定义一个MiniComplex类型变量sum,然后对它们的实部和虚部各自求和,返回sum即可。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:sizeof(str1)=5sizeof(str2)=10sizeof(str3)=1注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。(1)不能删除assert()语句;(2)只能修改后面的数字。提示:assert()函数如果为假,则会产生一个中断异常。#include<iostream.h>#include<assert.h>voidmain(){char*str1="abc";//********error********assert(sizeof(str1)==3);cout<<"sizeof(Str1)=5"<<endl;charStr2[10]="ab";//********error********assert(sizeof(str2)==2);cout<<"sizeof(str2)=10"<<endl;charstr3=23;//********error********assert(sizeof(str3)==4);cout<<"sizeof(str3)=1"<<endl;return;}标准答案:(1)assert(Sizeof(str1)==4);(2)assert(Sizeof(str2)==10);(3)assert(Sizeof(Str3)==1);知识点解析:(1)assen()函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert()函数就要为真,才不会产生中断异常。“assert(sizeof(strl)==3);”语句中“sizeof(str1)==3”为假,这个会使程序产生异常,不能正常执行。因为str1的值为abc但是它还有一个尾符,所以它的长度应该是4,而不是3,所以第1个标识下修改为“assen(sizeof(str1)==4);”。(2)同(1),str2[10]说明,str2的空间为10,第2个标识下修改为“assert(sizeof(str2)==10);”。(3)同(1),charstr3=23;语句说明23是字符,占空间为1,所以修改为“assert(sizeof(str3)==1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个,并作为参数返回。注意:不能修改程序的其他部分,只能修改fun()函数。#include<iostream.h>#defineN100inta[N][N];intfun(intn){}voidmain(){intn;cout<<"pleaseinputN:"<<endl;cin>>n;for(inti=0;i<n;i++)for(intj=0;j<n;j++){cout<<"pleaseinputaNumber:"<<endl;cin>>a[i][j];}cout<<"Theminofmaxnumbersis"<<fun(n)<<endl;}标准答案:introw;intmax;intmin;intcol;for(row=0;row<n;row++)//外循环求行最大值中的最小值{for(max=a[row][0],col=1;col<n;col++)//求每一行中的最大值if(max<a[row][col])max=a[row][col];if(row==0)//求最小值min=max;elseif(max<min)min=max;}returnmin;知识点解析:(1)两层循环,内层循环求每一行最大值,外层循环求最小值。(2)求最大值,首先将最大值赋值为每行第一列的元素,然后依次循环比较。(3)将求出的第一个最大值赋值为第一个最小值,然后将以后求得的最大值依次与之比较,求出所有值的最小值。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类的公有数据成员函数No、Name[32],其中No是int型的数据,Name[32]为字符型。请在注释//********1********后添加适当的语句。(2)完成函数set的定义,分别设置No和Name的值,请在注释//********2********后添加适当的语句。(3)完成函数print(),请在注释//********3********后添加适当的语句,打印的输出如下:No=111Name=Garfield(4)加缺省构造函数,设置No为0,Name为空,请在注释//********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include<lostream.h>ClassTestClass{public://********1********//********2********{No=no;for(inti=0;strName[i]!=0;i++){Name[i]=strName[i];Name[i+1]=0;}}voidprint(){//********3********}TestClasS(){//********4********}};intmain(){TestClassstu;stu.Set(111,"Garfield");stu.print();return0;}标准答案:(1)添加语句:intNo;charName[32];(2)添加语句:voidSet(intno,char*strName)(3)添加语句:cout<<"No="<<No<<endl<<"Name="<<Name<<endl;(4)添加语句:No=Name[0]=0;知识点解析:(1)题目1要求“定义类的公有数据成员函数No、Name[32],其中No是int型的数据,Name[32]为字符型”。在已有程序中,类定义的public区域中,定义变量No,Name[321,即在第1个标识下添加语句“intNo;charName[32];”。(2)题目2要求“完成函数set的定义,分别设置No和Name的值”。第2个标识下说明函数set的语句中,应该包括变量no,strName的定义,然后在函数中将其值赋值给No,Name,即添加定义语句“voidSet(intno,char*strName)”。(3)题目3要求“完成函数print()”,根据输出结果,知道输出的是No和Name的值,所以这里补全“cout<<"No="<<No<<endl<<"Name"<<Name<<endl;”。(4)题目4要求“加缺省构造函数,设置No为0,Name为空”,即在TestClass()构造函数中补充赋值语句“No=Name[0]=0;”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、8、10,逆置后,从头至尾结点数据域依次为10、8、6、4、2。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN5typedefstructnode{intdata;structnOde木next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/*********found*********/p=h一>【1】;/*********found*********/if(p==【2】)return;q=p一>next;p一>next=NULL;while(q){r=q一>next;q一>next=p;/*********found*********/p=q;q=【3】;}h一>next=p;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h一>next=NULL;for(i=0;idata=a[i];q一>next=NULL;if(h一>next==NULL)h一>next=P=q;else(p一>next=q;p=q;)}returnh;}voidoutlist(NODE*h){NODE*p;p=h一>nexL;if(p==NULL)printf("ThelistisNULL!\n");else{printf("\nbIead");do{printf("一>%d",p一>data);p=p一>next;)while(P!=NULL);printf("一>End\n");}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatliSt(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)next(2)NULL(3)r知识点解析:填空1:本空考查了为p赋初值,根据题目的要求是将带头结点的单向链表逆置可知,p的初值应该为h一>next。填空2:if判断语句表明当p等于什么时就要返回,因此只能当p等于NuLL时返回,不用做后面的链表的逆置了。填空3:把q的指针向后移动,才能实现将带头结点的单向链表逆置。因此本空填写r。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行。也不得更改程序的结构!试题程序:#include#include#include#include#include#defineN10typedefstructss{charhum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*=t;inti,j,k;/*********found*********/*t=calloc(m,sizeof(STU))for(i=0;ib[j].s)j=i;/*********found*********/t[k].nHm=b[j].hum;b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i10){printf("\nGivethenumberoftheStudentSwhohavebetterscore:");Scarlf("%d",&m);)pOrder=fun(a,m);printf("****THERESULT****\n");printf("Thetop:\n");for(i=0;i标准答案:(1)t=calloc(m,sizeof(STU));(2)t[k]=b[j];知识点解析:(1)calloc应用于分配内存空间。调用形式为(类型说明符木)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。ca]los函数与malloc函数的区别在于calloc函数一次可以分配n块区域。例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的结构长度。该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。在本题中不用考虑那么复杂,根据定义类型STUb[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的错误,变量t少*号。(2)t[k].hum=b[j].num;的错误旨在考查对结构体概念的掌握和灵活应用程度。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:求出二维数组周边元素之和,作为函数值返回。例如,若二维数组中的值为:13579299946999813570则函数值为61。注意:部分源程序在文件PROG1.C中。请勿改主动函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#include#defineM4#defineN5intfun(inta[M][N]){}voidmain(){FTLE*wf;intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;system("CLS");printf("Theoriginaldatais:\n");for(i=0;i标准答案:intfun(inta[M][N]){inti,j,sum=0;for(i=0;i知识点解析:本题采用逐一判断的方式。二维数组周边元素的规律是,其两个下标值中一定有一个是0或M一1或N一1。程序中循环语句用来控制数组的行和列,条件语句用来判断数组元素是否为周边元素。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。例如,若s所指字符串为“baacda”,c中的字符为a,执行后s所指字符串为“baaaacdaa”。请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includevoidfun(char,*s,charc){inti,j,n;/*********found*********/for(i=0;s[i]!=【1】;i++)if(s[i]==c){/*********found*********/n=【2】;while(s[i+1+n]!=’\0’)n++;for(j=i+n+1;j>i;j--)s[j+1]=s[j];/*********found*********/s[j+1]=【3】;i=i+1;}}main(){chars[80]="baacda",c;printf("\n\Thestring:%s\n",s);printf("\nInputacharacter:");scarlf("%c",&c);fun(s,c);printf("\nTheresultis:%s\n",s);}标准答案:(1)’\0’(2)0(3)c知识点解析:填空1:for语句循环条件是判断是否到达字符串结尾,即当前字符是否为’\0’。填空2:while语句用以确定字符串的长度,所以变量n赋初值为0。填空3:题目要求如果找到与参数c相同的字符,就在后面插入一个相同的字符,且找到后应该给数组元素赋值,本题目给出参数为c。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:计算并输出下列级数的前N项和SN,直到SN+1的值大于g为止,g的值通过形参传入。例如,若q的值为50.0

温馨提示

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

评论

0/150

提交评论