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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷25(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程pmjl,该工程中包含程序文件main.cpp,其中有关TVSet(“电视机”)和主函数main的定义。程序中位于每个“//ERROR**********found**********”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:规格:29英寸,电源:开,频道:5,音量:18规格:29英寸,电源:关,频道:一1,音量:一1注意:只修改每个“//ERROR**********found**********”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classTVSet{//“电视机”类constintSize;intchannel;//频道intvolume;//音量boolon;//电源开关:true表示开,false表示关public://ERROR**********found**********TVSet(intSize){this一>Size(size);channel=0;volume=15;on=false;}intgetSize()const{returnsize;)//返回电视机规格boolisOn()const{returnon;}//返回电源开关状态//返回当前音量,关机情况下返回一1intgetVolume()const{returnisOn()?voiume:一1;)//返回当前频道,关机情况下返回一1intgetChannel()const{returnisOn()?channel:一1;}//ERROR**********found**********voidturnOnOff()const//将电源在“开”和“关”之间转换{on=!on;)voidsetChannelTo(intchan){//设置频道(关机情况下无效)if(isOn()&&chan>=0&&chan<=99)channel=chan;}voidsetVolumeTo(intv01){//设置音量(关机情况下无效)if(isOn()&&vol>=0&&vol<=30)volume=vol;)voidshowstate(){//ERROR**********found***********cout<<“规格:”<标准答案:(1)1TSet(intsize):size(size){(2)voidturnOnOff()(3)cout<<”规格:”<知识点解析:主要考查TVSet类,其中涉及构造函数、const函数和bool型函数。TVSet类的私有成员中有个常变量constimsize,这种变量只能使用成员列表初始化来赋值,判断一个函数是否为const函数,就要看函数体内是否有成员变量的值发生了改变。【解题思路】(1)主要考查考生对构造函数的掌握,因为size是常变量,所以只能用成员初始化列表来初始size,即TVSet(intsize):size(size){。(2)主要考查考生对const函数的掌握,在turnOnOff函数中,有语句:on=!on;,使得on的值发生改变,因此该函数不能使用const。(3)主要考查考生对输出语句的掌握,下一条语句:<<”,电源:”<<(isOn()?”开”:”关”),说明输出语句还没结束,因此不能用“;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。该工程中包含一个程序文件main.epp,其中有类Quadritic、类Root及主函数main的定义。一个Quadritic对象表示一个ax2+bx+c的一元二次多项式。一个Root对象用于表示方程ax2+bx+c=0的一组根,它的数据成员aura-of_roots有3种可能的值,即0、1和2,分别表示根的3种情况:无实根、有两个相同的实根和有两个不同的实根。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为(注:输出中的x~2表示x2):3X’2+4X+5=0.0无实根4.5X’2+6X+2=0.0有两个相同的实根:一0.666667和一0.6666671.5X’2+2X一3=0.0有两个不同的实根:0.896805和一2.23014注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****foun****”。#inclUde#include#includeusingnamespacestd;classRoot{//一元二次方程的根public:constdoublex1;//第一个根constdoublex2;//第二个根constintnumofroots;//不同根的数量:0、1或2//创建一个“无实根”的Root对象Root():x1(0.0),x2(0.0),numofroots(O){)//创建一个“有两个相同的实根”的Root对象Root(doubleroot)//**********found**********:_________{}//创建一个“有两个不同的实根”的Root对象Root(doublerootl,doubleroot2):xl(rootl),x2(root2),numofroots(2)t}voidshow()const{//显示根的信息cout<<“\t\t”;switch(num—of—roots){case0://**********found************case1:cout<<“有两个相同的实根:”<标准答案:(1)x1(root),x2(root),mlm_0f_roots(1)(2)cout<<”无实根”;break;(3)a(a),b(b),c(c)(4)returnQuadratic(a—x.a,b—x.b,c—x.c);知识点解析:本题考查Root类和Quadratic类,其中涉及构造函数和const函数。【解题思路】(1)主要考查考生对构造函数的掌握,题目要求创建一个“有两个相同的实根”的Root对象。说明两个根x1和x2相等,根的数量为1,因此可以得出语句:x1(root),x2(root),Hum_of.roots(1){}。(2)主要考查考生对switch语句的掌握,在语句switch(num_0f_roots){中,Bum一of-roots代表根的数量,当为0时,表示没有根,因此输出无实根,注意要在句尾加break。(3)主要考查考生对构造函数的掌握,本题使用成员初始化列表来构造函数。(4)主要考查考生对成员函数的掌握,题目要求求两个多项式的差。两个多项式的差就是各个次方的系数相减,因此得出语句:returnQuadratic(a—x.a,b—x.b,c—x.c);o三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类Integers和主函数main的定义。一个Integers对象就是一个整数的集合,其中包含0个或多个可重复的整数。成员函数add的作用是将一个元素添加到集合中,成员函数remove的作用是从集合中删除指定的元素(如果集合中存在该元素),成员函数sort的作用是将集合中的整数按升序进行排序。请编写这个sort函数。此程序的正确输出结果应为:528245327527663l528245327527663l6528245327527663161952845327527663l61952845327527663161942344556192728316675要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间。不得修改程序的其他部分。注意:相关文件包括:main.cpp、Integers.h。程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//Integers.h#ifndefINTEGERS#defineINTEGERS#includeusingnamespacestd;constintMAXELEMENTS=100;//集合最多可拥有的元素个数classIntegers{intelem[MAXELEMENTS];//用于存放集合元素的数组intcounter;//创于记录集合中元素个数的计数器public:Integers():counter(O){)//创建一个空集合Integers(intdata[],intsize);//利用数组提供的数据创建一个整数集合voidadd(intelement);//添加一个元素到集合中voidremove(intelement);//删除集合中指定的元素intgetCount()const{returncounter;)//返回集合中元素的个数intgetElement(inti)const{returnelem[i];}//返回集合中指定的元素voidsort();//将集合中的整数按由小到大的次序进行排序voidshow()const;//显示集合中的全部元素};voidwriteToFile(constchar*path);#endif//main.cpp#include”Integers.h”#includeIntegers::Integers(intdata[],intsize):counter(O){for(inti=0;i=0;J一一)if(elem[j]一element)break;for(inti=J;i标准答案:上0runt1=U;1i;j一)//从最后一位到i到前一位遍历elemif(elem[i]>elem[j])//如果elem[i]大于elem[j],则两值替换{inttemp=elem[i];//定义整形变量。temp并赋值为elem[i];elem[i].=elem[j];//给elem[i]赋值elem[i]elem[j]=temp;//给elem[j]赋值temp}知识点解析:本题考查Integers类,其中涉及数组、构造函数、成员函数、const函数和排序算法。【解题思路】主要考查考生对排序算法的掌握,要排序的数组为elem,元素个数为counter,在这里使用下标i和j进行比较,当elem[i]>elem[j]时,数组元素通过中间变量temp进行交换。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proil下的工程projl,该工程中包含程序文件main.cpp,其中有类Clock(“时钟”)的定义和主函数main的定义。程序中位于每个“//ERROR****found*****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Initialtimesale0d:0h:0m:59sAfteronesecondtimesale0d:0h:1m:0s注意:只修改每个“//ERROR****found*****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;ClassClock{public:Clock(unsignedlongi=0);voidset(unsignedlongi=0);voidprint()const;voidtick();//时间前进一秒Clockoperator++();private:unsignedlongtotal—sec,seconds,minutesrhoursrdays;};Clock::Clock(unsignedlongi):totalsec(i),seconds(i%60),minutes((i/60)%60),hours((i/3600)%24),days(i/86400){}voidClock::set(unsignedlongi){totalsec=i;seconds=i%60;minutes=(i/60)%60;hours=(i/3600)%60;days=i/86400;}//ERROR**********found**********voidClock::print(){cout<标准答案:(1)voidClock::print()const(2)set(++total—sec);(3)return*this;知识点解析:本题考查Clock类,其中涉及构造函数、成员函数、const函数和运算符重载。“时钟”类考查关于时间的基本常识,进位时要注意:60秒进1分钟,60分钟进l小时,24小时进1天。【解题思路】(1)主要考查考生对成员函数的掌握,由Clock类中对函数print的声明voidprint()const;可知,在定义print函数时少了const。(2)主要考查考生对++操作的掌握,根据函数要求,时间要先前进一秒,再调用函数set,因此totalsec++应改为++total—sec。(3)主要考查考生对this指针的掌握,函数要求返回值Clock,即返回一个类,而不是指针,因此使用木this。【解题宝典】掌握++操作符,当自增、自减运算的结果要被用来继续参与其他操作时,前置与后置的情况是不同的,例如i的值为l,cont<二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Mouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeusingnamespacestd;enumcategory{EMPTY,ELEPHANT,MOUSE);char*output[]={“EMPTY”,”ELEPHANT“,”MOUSE”);clasSMammal{public:Mammal(char*str){//**********found**********name=new________strcpy(name,str);}virtualchar*WhoAmI()=0;virtual~Mammal(){delete[]name;}voidPrint(){cout<Print();deletepm,pm=newNouse(“Micky”);pm一>Print();deletepm;return0;}标准答案:(1)char[strlen(str)+1];(2)Mammal(str)(3)retumoutput[MO[ISE];(4)Elephant知识点解析:本题考查的是Mammal类及其派生类Elephant和Mouse,其中涉及动态数组、纯虚函数、构造函数和析构函数。动态数组往往伴随着分配和释放空间,使用new语句分配空间,使用delete语句释放空间。【解题思路】(1)主要考查分配空间,程序要给nalne分配空间,由下一条语句中strcpy(name,str)可知程序要把字符串str复制给name,因此要分配的空间大小为strlen(str)+1。(2)主要考查考生对构造函数的掌握,因为Elephant类是Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。(3)主要考查考生对枚举类型的掌握,先看程序:enumcategory{EMPTY,ELEPHANT,MO[JSE}。再参考Elephant类中的WhoAmI函数:char木WhoAmI(){retumoutput[EL广EPHANT];}。可知这里要填写的返回语句为:returnoutput[MOUSE];。(4)主要考查考生对派生类的掌握,题目要求输出:ELEPHANTMOUSE可知,要先调用Elephant类的WhoAmI函数,因此给指针pm分配Elephant类空间。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程pmj3,其中声明了一个单向链表类sList。sList的成员函数Prepend的功能是在链表头部加入一个新的元素。请编写成员函数Prepend。在main函数中给出了一组测试数据,此时程序的输出应为:B一>A一>###A一>###A一>####exitinginnerblockexitingouterblock注意:只在函数Prepend的“//**********333**********”和“//**********666**********”之间填入若干语句,不要改动程序中的其他内容。//SList.hstrucLsListItem{chardata;sListItem*nexL;};classsList{public:sList():h(0){)//0表示空链表一sLLst();voidPrepend(charC);//在链表前端加入元素voidDel();//删除链表首元素sListItern*First()const{returnh;}//返回链表首元素voidPrint()const;//打印链表内容VOidRelease();//销毁链表private:sListItem*h;//链表头};voidwriteToFile(constchar*};//main.cpp#include#include”sList.h”usingnamespacestd;sList::一sList(){Release();}voidsList::Prepend(charc){//**********333**********//**********666**********}voidsList::Del(){sListltem*temp=h;h=h一>next;deletetemp;}voidsList::Print()const{sListItem*temp=h;while(Lemp!=0)//判断是否到达链表尾部{tout<data<<“一>”;temp=temp一>next;}tout<<”\n###”<Print();cout<<“exitinginnerblock”<标准答案:sLlstItem*temp=rlewsListItem;//动态分配空间给结构体terap的指针temp一>data=c;//把c赋值于结构体temp成员datatemp一>next=h;//把h赋值于结构temp体成员nexth=temp;//把temp赋值给h,即h指向temp指向的空间知识点解析:本题考查的是sList类,其中涉及构造函数、字符指针、析构函数、成员函数和const函数。【解题思路】主要考查考生对链表的掌握,成员函数Prepend的功能是在链表头部加入一个新元素。形参c是一个char型变量,因此要定义一个新的结构体指针temp,并给它分配sListItem类型空间,把形参c中的值赋给temp的数据域,并使temp通过指针链接到链表上。【解题宝典】主要考查考生对链表的掌握,单向链表是指针的一大应用,运用指针对单向链表进行操作有很多优点,如插入和删除元素很方便等。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,该工程中包含程序文件main.cpp,其中有类Foo和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:X=aY=42注意:只修改每个“//ERROR********found********”下的那一行,不要改动程序中的其他内容。1#include2usingnamespacestd;34clasSFoo{5public:6Foo(charX){x_=x;;7chargetX()const{returnx_;}8public:9staticinty_;10private:11charx_;12};1314//ERROR********found********15intFoo.y_=42;1617intmain(intargc,char*argv[])18{19//ERROR********found********20Foof;2122//ERROR********found********23cout<<"X="<标准答案:(1)intFoo::y_=42;(2)Foof(’a’);(3)cout<<"X="<知识点解析:(1)主要考查考生对静态成员的掌握,因为静态整型变量y_是Foo类的公有成员,所以给y_赋值时要加上“Foo::”,即intFoo::y_=42;。(2)主要考查考生对构造函数的掌握,题目要求程序输出:X=aY=42可以知道,在给Foo类的f声明时要同时初始化为字符a,即语句Foof(’a’);。(3)主要考查考生对成员函数的掌握,因为x是类Foo的私有成员,所以不能在main函数中直接调用,要通过公有成员函数getX()调用。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。该丁程中包含一个程序文件main.cpp,其中有类Quadritic、类Root及主函数main的定义。一个Quadritic对象表示一个ax2+bx+c的一元二次多项式。一个Root对象用于表示方程ax2+bx+c=0的一组根,它的数据成员num_of_roots有3种可能的值,即0、1和2,分别表示根的3种情况:无实根、有两个相同的实根和有两个不同的实根。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为(注:输出中的X∧2表示x2):3X∧2+4X+5=0.0无实根4.5X∧2+6X+2=0.0有两个相同的实根:-0.666667和-0.6666671.5X∧2+2X-3=0.0有两个不同的实根:0.896805和-2.23014注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。1#include2#include3#include4usingnamespacestd;5classRoot{//一元二次方程的根6public:7constdoublex1;//第一个根8constdoublex2;//第二个根9constintnumofroots;//不同根的数量:0、1或210//创建一个“无实根”的Root对象11Root():x1(0.0),x2(0.0),num_of_roots(0){}12//创建一个“有两个相同的实根”的Root对象13Root(doubleroot)14//**********found**********15:_______{}16//创建一个“有两个不同的实根”的Root对象17Root(doubleroot1,doubleroot2):x1(root1),x2(root2),mum_of_roots(2){}18voidshow()const{//显示根的信息19cout<<"\t\t";20switch(numofroots){21case0:22//**********found**********2324case1:25cout<<"有两个相同的实根:"<标准答案:(1)x1(root),x2(root),num_of_roots(1)(2)cout<<"无实根";break;(3)a(a),b(b),c(c)(4)returnQuadratic(a-x.a,b-x.b,c-x.e);知识点解析:(1)主要考查考生对构造函数的掌握,题目要求创建一个“有两个相同的实根”的Root对象。说明两个根x1和x2相等,根的数量为1,因此可以得出语句:x1(root),x2(root),num_of_roots(1){}。(2)主要考查考生对switch语句的掌握,在语句switch(num_of_roots){中,num_of_roots代表根的数量,当为0时,表示没有根,因此输出无实根,注意要在句尾加break。(3)主要考查考生对构造函数的掌握,本题使用成员初始化列表来构造函数。(4)主要考查考生对成员函数的掌握,题目要求求两个多项式的差。两个多项式的差就是各个次方的系数相减,因此得出语句:returnQuadratic(a-x.a,b-x.b,c-x.c);。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用“答题”菜单或使用VC6打开考生文件夹proj3下的工程proj3,其中定义了BaseX类(X进制整数类),其中成员函数print输出该整数指定数制的表示形式。使用展转相除法,可从低位到高位逐位求出所需要的表示形式,例如,求十制数231的四进制表示形式,方法如下:231/4=57……357/4=14……114/4=3……2结果是:3213在main函数中给出了一组测试数据,正确的输出是:2001注意:只需在//********333********和//********666********之间填人所编写的若干语句,不要改动程序中的其他内容。1#include2#include3#include"BaseX.h"4usingnamespacestd;5BaseX::BaseX(intn){6this->num=n;7}8BaseX::~BaseX(){)9voidBaseX::print(intx){//输出整数num的x进制表示形式10intarr[100];//存放转换结果,arr[0]存放最低位11intindex=0;//当前数组arr中12元素的个数13//********333********141516//********666********17for(inti=index-1;i>=0;i--){//从高位到低位输出所需表示形式18cout<标准答案:1while(Hum)2{3arr[index++]=num%x;4nun/=x:5}知识点解析:将一个数转化为x进制,使用辗转相除法,将余数放在arr[]数组中,对商继续使用辗转相除法来处理,直到商为0。最后反向输出数组中的值,即为x进制的数。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:20,1515,20注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream.h>//******error******voidExchangel(intm,intn){intt=m;m=n;n=t;}//******error******voidExchange2(intm,intn){intt=*m;*m=*n;*n=t;}voidmain(){intb=20;inta=15;Exchangel(a,b);cout<<a<<’,’<<b<<endl;//******error******Exchange2(a,b);cout<<a<<’,’<<b<<endl;}标准答案:(1)voidExchangel(int&m,int&n)(2)voidExchange2(int*m,int*n)(3)Exchange2(&a,&b);知识点解析:(1)由程序的运行结果可知,分别调用Exchange1()和Exchange20后,a和b的值两次发生交换,因此Exchange1()函数和Exchange2()数均为实现交换的函数。参数传递方式有多种,将变量名作为实参和形参、传递变量的指针和传送引用方式,将变量名作为实参和形参方式,这种传递是单向的,在函数执行过程中形参的值发生变化不会传回实参,而指针和引用方式在函数执行过程中形参会影响实参。显然这里不是采用变量名作为实参和形参的单向传递方式,而是采用的传地址或传引用的方式,在Exchange1()体内没有出现指针运算符“*”,因此可知Exchange1()函数是采用的传引用的方式,因此第1个标识下应改为“voidExchange1(int&m,int&n)”。(2)由1分析可知,Exchange2()函数内有指针运算符“*”,可知其是采用的传指针的方式作为参数传递,因此第2个标识下应改为“voidExchange2(int*m,int*n)”。(3)Exchange2()参数为int型数据指针,因此调用Exchange2()时应传入指针而不是变量名,故第3个标识下应改为“Exchange2(&a,&b);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(char*des,char*str)的功能是去掉字符串str中相同的字母,并将处理后的结果存到des所指的字符串中。例如:输入:Thisisgreat!输出:Thisgrea!注:卷:不能修改程序的其他部分,只能补充fun()函数。#include<iostream.h>#defineMAXLEN1024voidconvert(char*des,char*str){}voidmain(){charsour[MAXLEN];chardest[MAXLEN];cout<<"Pleaseinputastring:"<<endl:cin.getline(sour,MAXLEN);convert(dest,sour);cout<<dest<<endl;return;}标准答案:inti,j;boolToAdd;des[0]=0;for(i=0;str[i]!=NULL;i++){ToAdd=true;for(j=0;des[j]!=NULL;j++){if(str[i]==des[j]){ToAdd=false;//des数组中已存在该元素,将标志位设置为假,说明不用再添加break;//des数组中已存在该元素,跳出循环}}if(ToAdd)//des数组中不存在添加进来{des[j]=str[i];des[j+1]=0;}}知识点解析:(1)由审题分析可知,需要两重循环,外层循环不断读取str中的元素,内循环在des数组中查找读到的str中的字符,如果找到了des数组中已存在该元素不需要添加,如果没找到则添加到des数组中。(2)在外循环体内,先设置bool型的标志变量ToAdd为真,假设str[i]不存在在des数组中,然后再内循环中,用str[i]和des[j]比较,如果相同说明已经存在了,将ToAdd设置为假,des[j]后面的元素不需要再比较了,跳出内循环。(3)通过判断ToAdd可知,str[i]是否存在des数组中,如果三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义复数类CComplex的私有成员变量real和imaginary,分别用来表示复数的实部和虚部,都是double类型的变量。请在注释//********1********后添加适当的语句。(2)添加复数类CComplex的带一个参数的构造函数,分别将real和imaginary赋值为参数r和0。请在注释//********2********后添加适当的语句。(3)完成对运算符“+”的重载,分别对复数的实部和虚部相加。请在注释//********3********后添加适当的语句。(4)完成复数的友元函数Equal(CComplex&c1,CComplex&c2)的定义,如果两个数的实部和虚部都相等,则返回1,否则返回0,请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>classCComplex{private://********1********publiC:CComplex(){real=imaginary=0;}CComplex(doubler){//********2********}CComplexoperator+(CComplex&c1){//********3********temp.real=real+c1.real;temp.imaginary=imaginary+c1.imaginary;returntemp;}voidSet(intre,intimag){real=re;imaginary=imag;}friendboolEqual(CComplex&c1,CComplex&c2);};boolEqual(CComplex&c1,CComplex&c2){//********4********}intmain(){CComplexcomplex1(5);CCompiexcomplex2;cout<<Equal(complex1,complex2)<<endl;complex2.Set(5,0);cout<<Equal(complex1,complex2)<<endl;return0;}标准答案:(1)添加语句:doublereal,imaginary;(2)添加语句:real=r;imaginary=0;(3)添加语句:CCompiextemp:(4)添加语句:return(c1.real==c2.real)&&(c1.imaginary==c2.imaginary);知识点解析:(1)第1个标识下完成定义复数类CComplex的私有成员变量real和imaginary,均为double类型的变量,因此第1个标识下应添加“doublereal,imaginary;”。(2)构造函数CComplex(doubler)完成类的初始化,该构造函数有一个参数,分别将real和imaginary赋值为参数r和0,因此第2个标识下应添加“real=r;imaginary=0;”。(3)编译程序可知,变量temp没有定义,由operator+(CComplex&c1)函数体的语句可知,temp为函数的返回值,而operator+(CComplex&c1)函数体函数返回CComplex类对象,故在第3个标识下补充temp定义,即“CComplextemp;”。(4)即判断两个对象c1和c2的实部和虚部是否均相等,两个逻辑结果相与即可,因此第4个标识下应添加“return(c1.real==c2.real)&&(c1.imaginary==c2.imaginary);”。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程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()const{returnclosed;}//门关着时返回true,否则返回falseboolisOpened()const{return!closed;}//门开着时返回true,否则返回falseboolisLocked()Const{returnlocked;}//门锁着时返回true,否则返回falseboolisUnlocked()COnSt{return!locked;}//门未锁时返回true,否则返回falsevoidopen(){//开门cout<标准答案:(1)this_>num=num;(2)if(!closed)(3)voidlock(){知识点解析:(1)主要考查考生对this指针的掌握,在构造函数中this指针指向的是当前类,因此要给num赋值使用语句this->num=num;完成。(2)主要考查考生对if语句的掌握,先看类的私有成员中关于closed的定义:boolclosed;//true表示门关着。再看下一条语句:cout<<"门是开着的,无须再开门。";。即满足条件时就会输出:门是开着的,无须再开门。因此if括号内应该是!closed。(3)主要考查考生对const函数的掌握,lock函数体中存在语句locked=true,即有参数发生改变,因此不能用const。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用Ve6打开考生文件夹proj2下的工程proj2。其中在编辑窗口内显示的主程序文件中定义有类XBase和XDerived,以及主函数main。程序文本中位于每行”//************found************下面的一行内有一处或多处下划线标记,请在每个下划线标记处填写合适的内容,并删除掉下划线标记。经修改后运行程序,得到的输出结果为:s=25#includeusingnamespacestd;ClassXBase{private:intmem1,mem2;public://*****found*****XBase(intm1=0,intm2=0):mem1(m1),_________()//*****found*****virtualint__________};//*****found*****classXDerived:_________{private:intmem3;public:XDerived():XBase(),mem3(0){}//*****found*****XDerived(intm1,intm2,intm3):__________{}intsum(){returnXBase::slim()+mem3;}};voidmain()(XDerivedb(3,4,5);XBasea(6,7),*pb=&b;ints=pb->SLIm()+a.sum();cout<<"s="<标准答案:(1)mem2(m2)(2)sum(){returnmem1+mem2;}(3)publicXBase(4)XBase(m1,m2),mew3(m3)知识点解析:(1)题意要求使用m1和m2初始化数据成员mem1和mem2,同mem1的初始化一样,需要在成员初始化列表中完成mem2的初始化。(2)sum函数的定义需要返回mem1和mem2之和。(3)XDerived公有继承XBase类,在继承列表中使用public。(4)在成员初始化列表中初始化基类成员时,需要调用基类的构造函数,初始化mem3时,可以直接初始化。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示矩形的类MyRectangle;程序应当显示:(0,2)(2,2)(2,0)(0,0)4但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1******found****”的下方是构造函数的定义,它用参数提供的左上角和右下角的坐标对up_left和down_right进行初始化。(2)在“//**2******found****”的下方是成员函数getDownLeft的定义中的一条语句。函数getDownLeft返回用MyPoint对象表示的矩形的左下角。(3)在“//**3******found****”的下方是成员函数area的定义,它返回矩形的面积。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#includeusingnamespacestd;classMyPoint{//表示平面坐标系中的点的类doublex;doubley;public:MyPoint(doublex,doubley){this->x=x;this->y=y;)doublegetX()const{returnx;}doublegetY()const{returny;}voidshow()const{cout<<’(’<标准答案:(1)MyPointp1,MyPointp2(2)up_left.getX(),down_right.getY()(3)doubleMyRectangle::知识点解析:(1)考查构造函数,构造函数中的参数要给私有成员赋值,在下句中up_left(p1),down_fight(p2){}指出私有成员赋值要使用形参p1和p2,因此这里参数要定义为MyPointp1,MyPointp2。(2)主要考查成员函数的返回语句,MyPointMyRectangle::getDownLeft()const函数要求返回一个左下角的点坐标,因此使用语句MyPoint(up_left.getX(),down_right.getY());。(3)主要考查成员函数的定义,在MyRectangle类中已经声明doublearea()const,因此此处只要添加doubleMyRectangle::即可。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:i=5i=10i=15i=20注意:错误的语句在//*****error******的下面,修改该语句即可。#includeclassCMyClass{public:templatevoidfunc(Tx,Ty){//*****error******Ti=0;if(x>=i){i=i+x;}elsefi=i+y;}cout<<"i="<标准答案:(1)staticTi=0;(2)t.func((char)68,(char)1);(3)t.func((int)i,1);知识点解析:(1)在主函数内定义了类CMyClass对象t,第一次调用func()函数传入整型参数5和0,此时T表示整型(int),5>0,此时i和x的和为5,故屏幕输出i的值为i=5;第二次调用func()函数,传入参数为char型数据,此时T表示字符型(char),chari=0,68>0,故i为68,屏幕输出ASCII码为68的字符,即i=D;第三次调用func()函数,传入整型数据10和1,此时T表示整型(int),输出为i=15,显然如果i为一般的局部变量,输出应该是i=10(10>0,i=10+0=10),这里i记忆了第一次调用func()函数后的值(i=5,10>5,10+5=15),故i为静态变量,因此第1个标识下应改为“smileTi=0:”。(2)func()函数两个参数类型一致,从输出结果看,第二次调用func()传入的参数均是char型的,故第2个标识下应改为“t.func((char)68,(char)1);”,(char)68和(char)1含义是做强制类型转换,将整型转换成char型。(3)第3个标识下传入参数1为整型,局部变量i为float型,由输出结果可知,第四次调用func()函数也改变了静态变量i(staticinti)的值,故传入的参数均为整型,因第3个标识下的局部变量i(float型)也要强制类型转换,故第3个标识下应改为“t.func((int)i,1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。完成函数ToUpper(char*des,char*str),该函数实现把str字符串中小写字符转换成大写字符,并存发在des中。例如:str:“aBcdrFGHijK”;则:des=“ABCDEFGHIJK”:注意:不能修改程序的其他部分,只能补充ToUpper()函数。#include#defineMAXLEN1024voidToUpper(char*des,char*str){}voidmein(){chardest[MAXLEN];char*str="aBcdrFGHijK";ToUpper(dest,str);cout<标准答案:for(inti=0;str[i]!=0;i++){if(str[i]>=’a’&&str[i]<=’z’)//比较是否是小写字母{des[i]=str[i]-’a’+’A’;//替换成大写字母}else{des[i]=str[i];//其他情况不变}des[i+1]=0;}知识点解析:(1)由审题分析可知,可利用循环来逐个检索str中的字符,循环变量i从0开始,直到str数组的结束,即str[i]=0为循环结束条件。(2)小写字母的判别方式为:str[i]>=’a’&&str[i]<=’z’,即该字符比’z’小,而且比’a’大,如果满足该条件则在该字符基础上加上(’A’-’a’)值转换为大写字母;如果是其他字符的话,无需转换,直接刚该字符放到des数组中。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类CPlanet的保护数据成员distance和revolvePeriod,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolvePeriod为int型。请在注释//********1********之后添加适当的语句。(2)定义类CEarth的构造函数CEarth(doubled,intr),并在其中计算地球绕太阳公转的轨道周长。假定:circumference=2*d*3.1416。请在注释//********2********之后添加适当的语句。(3)定义类Earth的成员display(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释//********3********之后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeusingnamespacestd;classCPlanet{protected://********1********public:CPlanet(doubled,intr){distance=d;revolvePeriod=r;}};classCEarth:publicCPlanet{doublecircumference;public://********2********CEarth(doubled,intr){circumference=2*d*3.1416;)//********3********{cout<<"distance="<标准答案:(1)添加语句:doubledistance;intrevolvePeriod;(2)将“CEarth(doubled,intr)”补充完整为:CEarth(doubled,intr):CPlanet(d,r)(3)添加语句:voiddisplay()知识点解析:(1)题目1要求“义类CPlanet的保护数据成员distance和revolvePeriod,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolvePeriod为int型”,因此第1个标识下是添加数据成员distance和revolvePeriod的声明,因此第1个标识下应添加“doubledistance;intrevolvePeriod;”。(2)假定:circumference=2*d*3.1416”,第2个标识下构造函数CEarth(double(dintr)完成类成员变量的初始化,在函数体内部完成了circumference的初始化,而变量distance和revolvePeriod并没有初始化,需调用基类的构造函数来初始化这两个变量,因此第2个标识下应改为“CEarth(doubled,intr):CPlanet(d,r)”。(3)第3个标识下完成成员函数display()的定义,函数display()的返回值为void,因此第3个标识下应添加“voiddisplay()”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:100注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream.h>staticintx=50;intt=0;int*func(intx,inty,intz){t=t+x+y+z;//******error******returnt;};voidmain(){inty=30;intx=10;intz=20;//******error******x=x;//******error******cout<<func(x,y,z)<<endl;}标准答案:(1)return&t:(2)x=::x;(3)cout<<*func(x,y,z)<<endl;知识点解析:(1)由审题分析可知,函数func(intx,inty,intz)返回的是整型数据指针,而第1个标识下的returnt表示返回一个整型数据,和要求的返回数据类型不匹配,应改为“return&t:”。(2)第2个标识下x=x表示局部变量x自己给自己赋值,调用func(x,y,z)函数后,返回的运算结果是30+10+20=60,与输出100不同,而全局静态变量x值为50,30+50+20=100,刚好满足条件,因此第2个标识下是将全局静态变量x的值赋给局部变量x,即第2个标识下应该为“x=::x:”,“::”表示的是引用全局变量。(3)func(x,y’z)返回一个整型数据指针,通过该指针可以得到运算结果,而cout<<func(x,y,z)输出的fun(x,y,z)返回的地址值(变量t的地址值),而不是该地址内存储的变量的值(t的值),运行程序后会发现输出的是奇怪的一串数字,而不是我们所想要的100,应加上取指针运算符“*”,*func(x,y,z)为变量t,故第3个标识下应改为“cout<<*func(x.y,z)<<endl;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使该程序输出倒9×9口诀。程序分析:分行与列考虑,共9行9列,设置两个变量i和i,i控制行,j控带0列。程序运行结果如下:1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=811*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*7=72*7=143*7=214*7=285*7=356*7=427*7=491*6=62*6=123*6=184*6=245*6=306*6=361*5=52*5=103*5=154*5=205*5=251*4=42*4=83*4=124*4=161*3=32*3=63*3=91*2=22*2=41*1=1注意:只能补充函数show(),请勿改动其他部分的内容。#2nclude<iostream.h>voidshow(){}voidmain(){cout<<"9*9倒乘法口诀"<<endl;cout<<"-----------------------------------------------"<<endl;show();tout<<"-----------------------------------------------"<<endl;return;}标准答案:for(inti=9;i>0;i--){for(intj=1;j<=i;j++){cout<<j<<’*’<<i<<’=’<<i*j<<’’;}cout<<endl:}知识点解析:(1)由审题分析可知,可利用两重循环来实现输出倒9×9口诀,设置两个循环变量,外层循环变量i从9开始变化至1,循环9次,代表乘号后面的数字。(2)内部循环变量i从1变化到i,代表乘号前面的数字,输出一行,j<=i,这样保证输出的是倒9×9口诀。在内层循环体内,利用cout输出i的值、“*”、i的值、“=”和i*i值,即输出乘法公式。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)类CBase有一个常数变量Number1,在构造函数时对其初始化,请在注释//********1********后添加适当的语句。(2)类CPri是CBase的公共继承类,请在注释//********2********后添加适当的语句。(3)类CPri构造函数有两个形式参数,第一个是对CBase的初始化,第二个缺省为O,用来对变量Number2进行初始化。请在注释//********3********后添加适当的语句。(4)类CPri的函数display()重载于CBase的打印函数。完成对变量Number2的输出,然后调用基类的打印函数,请在注释//********4********后添加适当的语句。输出的内容如下:Number2=12Number=8注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>classCBase{private:intNumber;public://********1********CBase(intx){}voiddisplay(){cout<<"Number="<<Number<<endl;}};//********2********classCPri{private:intNumber2;public://********3********CPri(intx,inty=0){Number2=y;}voiddisplay(){//********4********}};intmain(){CPriobj(8,12);obj.display();return0;}标准答案:(1)将“CBase(intx)”补充完整为:CBase(intx):Number(x)(2)将“classCPri”补充完整为:ClassCPri:publicCBase(3)将“CPri(intx,inty=0)”补充完整为:Cpri(intx,inty=0):CBase(x)(4)添加语句:cout<<"Number2="<<Number2<<endl;CBase::display();知识点解析:(1)构造函数完成类成员变量的初始化,第1个标识下是对Number1初始化,带参数的构造函数初始化有多种方式,可以在函数体内完成初始化,或利用参数初始化表来完成初始化,显然这里不能在函数体完成初始化,只能是在函数首部实现对数据成员的初始化,因此只能通过参数初始化表来完成,这种方法不在函数体内对数据成员初始化,而是在函数首部实现,即第1个标识下应改为“CBase(intx):Number(x)”。(2)第2标识下是声明类CPri,且类CPri是CBase的公共继承类,定义派生类的一般格式为:class<派生类名>:<继承方式1><基类:名1>,<继承方式2><基类名2>,……<继承方式n><基类名n>{<派生类新定义成员>};类CPri是CBase的公共继承类,因此第2个标识下应改为“classCPri:publicCBase”。(3)CPri构造函数有两个形式参数,第一个是对CBase的初始化,第二个缺省为0,用来对变量Number2进行初始化,这里对CBase的初始化也不能在函数体内完成,因此也必须采用参数初始化表来完成,即第3个标识下应改为“CPri(intx,inty=0):CBase(x)”,调用CBase的构造函数完成对CBase的初始化。(4)函数display()重载于CBase的打印函数。完成对变量Number2的输出,然后调用基类的打印函数display(),基类的display()和派生类的display()重名,调用基类的display()应过类名来直接调用,即第4个标识下应添加“cout<<"Number2="<<Number2<<endl;CBase::display();”。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正错误,使得程序通过运行。程序输出:5a1注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includetemplate//********error********tmin(tx,ty){return(x>y)?Y:X;}Voidmain(){intn=5;//********error********charc="a";intd=1;//********error********cout<标准答案:(1)Tmin(Tx,Ty)(2)charc=’a’;(3)usingnamespaceStd;知识点解析:(1)C++是区分大小写的,“template”语句中定义的模板类为T不是t,所以第1个标识下的“tmin(tx,ty)”修改为“Tmin(Tx,Ty)”。(2)第2个标识下的“charc="a";”语句中的变量a为char型,赋值为字符a,在C++中应该使用单引号标注字符变量,而不是双引号,所以修改为“charC=’a’:”。(3)在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即添加usingnamespacestd;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数show()的功能是将1、2、3、4四个数字,组成互不相同且无重复数字的四位数,并将这些数输出到屏幕,输出的内容如下:123412431324134214231432213421432314234124132431312431423214324134123421412341324213423143124321将函数show()补充完整。注意:请勿改动主函数。#includevoidshow(){}intmain(){show();return0;}标准答案:for(inti=1;i<5;i++)for(intJ=1;j<5;j++)for(intl=1;l<5;1++)for(intk=1;k<5;k++){if(i!=j&&j!

温馨提示

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

评论

0/150

提交评论