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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷5(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有类Clock(“时钟”)的定义和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Initialtimesare0d:0h:0m:59sAfteronesecondtimesare0d:0h:1m:0S注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classClock{public:Clock(unsignedlongi=0);voidset(unsignedlongi=0);voidprint()const;voidtick();//时间前进一秒Clockoperator++();private:unsignedlongtotal_sec,seconds,fminutes,hours,days;};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<<days<<"d:"<<hours<<"h:"<<minutes<<"m:"<<seconds<<"s"<<endl;}voidClock::tick(){//ERROR*******found*******set(total_sec++);}ClockClock::operator++(){tick();//ERROR*******found*******returnthis;}intmain(){Clockck(59);tout<<"Initialtimesare"<<endl;ck.print();++ck;tout<<"AfterOnesecondtimesare"<<endl;ck.print();return0;}标准答案:(1)voidClock::print()const(2)set(++total_see);(3)return*this;知识点解析:(1)主要考查考生对成员函数的掌握,由Clock类中对函数print的声明voidprint()const;可知,在定义print函数时少了const。(2)主要考查考生对++操作的掌握,根据函数要求,时间要先前进一秒,再调用函数set,因此total_sec++应改为++total_sec.(3)主要考查考生对this指针的掌握,函数要求返回值Clock,即返回一个类,而不是指针,因此使用*this。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,此工程包含一个源程序文件proj2.cpp。其中定义了Score类。Score是一个用于管理考试成绩的类。其中,数据成员_s指向存储成绩的数组,_n表示成绩的个数;成员函数Sort使用冒泡排序法将全部成绩按升序进行排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现Score类的成员函数Sort。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;classscore{public:Score(double*s,intn):_s(s),_n(n){}doubleGetScore(inti)COBst{return_s[i];}voidsort();private:double*_s;int_n;};voidScore::Sort(){//********found********for(inti=0;i<_n-1;_______)//********found********for(intj=_______;j>i;j--)if(_s[j]<_s[j-1]){//交换_s[j]和_s[j-1]doublet=_s[j];//********found********_______;//********found********_______;}}intmain(){conStintNUN=10;doubles[NUN];stand(time(0));for(inti=0;i<NUN;i++)s[i]=double(rand())/RANDMAX*100;Scoress(s,NUM);ss.Sort();for(intj=0;j<NUM;j++)cout<<ss.GetScore(j)<<endl;return0;}标准答案:(1)i++(2)_n-1(3)_s[j]=_s[j-1](4)_s[j-1]=t知识点解析:(1)主要考查for循环语句,从题目要求可知循环变量i要从0到_n-2,因此i要递增操作,即i++。(2)主要考查考生对冒泡排序的掌握,这里要求从后往前扫描,比较相邻两个元素,若后者小则交换,因此在这里下标j要从最后开始,即int_i=_n-1。(3)考查交换算法,在if语句中_s[j]<_s[j-1]满足条件,则实现交换。因为已经把_s[j]的值赋给了中间变量t,所以这里要把_s[j-1]的值赋给_s[j],即_s[j]=_s[j-1];。(4)考查交换算法,这里只需把中间变量t中的值赋给_s[j-1]即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明的DataList类,是一个用于表示数据表的类。sort成员函数的功能是将当前数据表中的元素升序排列。请编写这个sort函数。程序的正确输出应为:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:补充编制的内容写在“//********333********”与“//********666********”两行之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序调用。//DataList.h#include<iostream>usingnamespacestd;classDataList{//数据表类intlen;double*d;public:DataList(intlen,doubledata[]=NULL);~DataList(){delete[]d;}intlength()const{returnlen;}//数据表长度(即数据元素的个数)doublegetElement(inti)const{returnd[i];}voidsort();//数据表排序voidshow()const;//显示数据表};voidwriteToFile(char*,constDataList&);//main.cpp#include"DataList.h"DataList::DataList(intlen,doubledata[]):len(len){d=newdouble[len];for(inti=0;i<len;i++)d[i]=(data==NULL?0.0:data[i]);}voidDataList::sort(){//数据表排序//********333********//********666********}voidDataList::show()const{//显示数据表for(inti=0;i<len-1;i++)tout<<d[i]<<",";tout<<d[len-1]<<endl;}intmain(){doubles[]={7,1,3,11,6,9,12,10,8,4,5,2};DataListlist(12,s);cout<<"排序前:";list.show();liSt.sort();cout<<endl<<"排序后:";list.show();writeToFile("",liSt);return0;}标准答案:for(inti=0;1<len;++i)//从头遍历数组dfor(intj=i;j<len;++j)//从i+1处遍历数组dif(d[i]>d[j])//d[i]和d[j]比较人,如果大于,就d[i]和d[j]值交换{inttemp=d[i];//把临时整型变量temp赋值为d[i]d[i]=d[j];//把d[j]赋值给d[i]d[j]=temp;//把temp值赋给d[j]}知识点解析:本题使用最简单的冒泡排序算法,首先明确要排序的动态数组d,其长度为len,在此可以使用两个下标i和j相比较,当d[i]>d[j]时,数组内的值利用中间变量temp进行交换。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,该工程中包含程序文件main.epp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:打开503号门…门是锁着的,打不开。打开503号门的锁…锁开了。打开503号门…门打开了。打开503号门…门是开着的,无须再开门。锁上503号门…先关门…门锁上了。注意:只修改每个“//ERROR********found********”下的那一行,不要改动程序中的其他内容。1#include2usingnamespacestd;3classDoor{4intnum;//门号5boolclosed;//true表示门关着6boollocked;//true表示门锁着7public:8Door(intnum){9//ERROR********found********10num=this->num;11closed:10cked:true;12}13boolisClosed()const{returnclosed;}14//门关着时返回true,否则返回false15boolisOpened()const{return!ciosed;}16//门开着时返回true,否则返回false17boolisLocked()const{returnlocked;}18//门锁着时返回true,否则返回false19boolisUnlocked()const{return!locked;}20//门未锁时返回true,否则返回false21voidopen(){//开门22cout<标准答案:(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、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程中含有一个源程序文件proj2.cpp。函数char*GetNum(char*src,ehar*buf)从src开始扫描下一个数字字符序列,并将其作为一个字符串取出放人字符串空间buf中。函数返回扫描的终止位置,如果返回NULL表示没有扫描到数字字符序列。运行程序时,如果输入的一行字符序列是ABC012XYZ378MN274WS则输出为:Digitstring1is012Digitstring2is378Digitstring3is274注意:只在横线处编写适当代码,不要删除或移动“//****found****”。1//proj2.cpp2#include3usingnamespacestd;4char*GetNum(char*src,char*buf)5{6while(*src!=’\0’)7{8if(isdigit(*sre))break;9src++;10}11if(*src=:’\0’)12//********found********13_______;14while(*sre!=’\0’&&isdigit(*sre))15{16//********found********17_______;18buf++;19src++;20}21*buf=’\0’;22returnsrc;23}24intmain()25{26charstr[100],digits[20];27cin.getline(str,100);28char*p=str;29inti=1;30while((P=GetNum(p,digits))t=NULL)31{32cout<<"Digitstring"<标准答案:(1)returnNULL(2)*buf=*src(3)i++知识点解析:(1)主要考查考生对if语句的掌握,由判断条件if(*src==’\0’),说明字符串src为空,则返回NULL即可。(2)主要考查考生对while循环语句的掌握,while语句的循环条件为*src!=’\0’&&isdigit(*src),该条件是指,若字符串src不为空并且水src指向的字符为数字字符,则进行循环。题目要求把数字字符放入字符串buf中,因此为*buf=*src。(3)主要考查考生对while循环语句的掌握,从上一行语句cout<<"Digitstring"<三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中定义的Matrix是一个用于表示矩阵的类。成员函数max_value的功能是求出所有矩阵元素中的最大值。例如,若有3×3矩阵则调用max_value函数,返回值为3。请编写成员函数max_value。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。1//Matrix.h2#include3#include4usingnamespacestd;5constintM=18;6constintN=18;7classMatrix{8intarray[M][N];9public:10Matrix(){)11intgetElement(inti,intj)const{returnarray[i][j];}12voidsetElement(inti,intj,intvalue){array[i][j]:value;}13intmaxvalue()const;14voidshow(constchar*s)const15{16cout<45voidreadFromFile(constchar*f,Matrix&m){6ifstreaminfile(f);7if(infile.fail()){cerr<<"打开输入文件失败!";return;}8intk;9for(inti=0;i>k;12m.setElement(i,j,k);13}14}15intMatrix::max_value()const16{17//********333********1819//********666********20}21intmain()22{23Matrixm;24readFromFile("",m);25m.show("Matrix:");26cout<标准答案:1inttemp=0;//定义整数变量temp,并赋值为零2for(inti=0;i知识点解析:主要考查考生对二维数组的掌握,题目要求成员函数max_value的功能是求出所有矩阵元素中的最大值。因此只要逐个元素比较即可,下标i和j作为矩阵行和列的标记,使用双层for循环来遍历数组中的所有元素。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.epp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为:Constructor,i=0,Destructor注意:错误的语句在//********error********的下面,修改该语句即可。1#include2classcobj3i4inti;5public:6CObj();7voiddisplay();8-CObj();9};10//********error********11cobj:cobj()12{13cout<<"Constructor"<<",";14i=0;15}16//********error********17cobj:display()18i19cout<<"i="<标准答案:(1)CObj::CObj()(2)VOidCObj::display()(3)CObj::~CObj()知识点解析:程序当中定义了类CObj,成员为int型变量i,display函数、构造函数和析构函数,在构造函数中显示“Constructor”,display函数显示成员i的值,析构函数显示“Destructor”,因此程序运行结果就是定义对象,隐式调用构造函数,然后调用display()函数显示i的值,最后清除对象时调用析构函数。[解题思路](1)在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符(::),作用域运算符用来表示某个成员属于哪个类,使用格式为:<类名>::<成员函数>(<参数函数>),因此第1个标识下应改为CObj::CObj(),默认构造函数没有参数。(2)第2个标识下“CObj:display()”,从其后的语句看,这是在类外实现CObi函数,因此也有作用域运算符使用错误问题,display()函数返回值为void,因此第2个标识下应改为voidCObj::display()。(3)第3个标识下“CObj:CObj()”,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名字和类名相同,并在前面加“~”字符,用来与构造函数加以区别,因此第3个标识下应改为CObj::~CObj()。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数show()的功能是将1、2、3、4四个数字,组成互不相同且无重复数字的四位数,并将这些数输出到屏幕,输出的内容如下:123412431324134214231432213421432314234124132431312431423214324134123421412341324213423l43124321将函数show()补充完整。注意:请勿改动主函数。1#include2voidshow()3{45}6intmain()7{8show();9return0;10}标准答案:1for(inti=I;i<5;i++)2for(intJ=l;j<5;J++)3for(int1=l;1<5;1++)4for(intk=1;k<5;k++)5{6if(i!=j&&J!=k&&i!=k&&i!=l&&J!=l&&k!=1)//条件判断7cout<知识点解析:函数show()的功能是将1、2、3、4四个数字组成互不相同且无重复数字的四位数,并打印在屏幕上,可用循环来查找符合条件的四位数,用每一层循环的循环变量表示4位数当中的一个数,因此需4重循环,在最内层循环判断是否满足条件,满足条件则输出。[解题思路](1)四重循环变量分别为i、i、1和k,分别从1变化至4,分别表示四位数的第一、第二、第三和第四位数。(2)在最内层循环内,如果i、j、k和1互不相同则i、j、k和1表示的四位数互不相同,把i、j、k和1打印在屏幕上。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开源程序文件modi3.cpp。其中类TestClass用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将int.tXt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件outl.txt和out2.txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释//********1********后添加适当的语句。(2)把获得的输入文件的内容存储到buf中,并且用len记录下文件的长度。请在注释//********2********后添加适当的语句。(3)将输入文件的后一半内容存储在第二个文件中,请在注释//********3********后添加适当的语句。(4)使用文件流对象打开输入文件in.txt,请在注释//********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include2#include3#include4classTestClass5{6public:7TestClassfchar*fileName)8{9len=0,10fstreaminfile;11infile.open(fileName,ios::in);12charch;13//********1********14while()15{16cout<标准答案:(1)将“while()”完整为:while(infile.get(ch))(2)添加语句:buf[len++]=ch;(3)添加语句:OUtfile2<知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类TestClass及其成员函数实现各种输出操作。[解题思路](1)题目1要求“从输入文件中获得一个字符,并判断是否到文件结尾”。程序中的“while()”循环判断语句中缺少从文件中获得的字符,所以这里补全while循环判断条件,即“while(infile.get(ch))”。(2)题目2要求“把获得的输入文件的内容存储到buf中,并且用len记录下文件的长度。”所以为buf分配空间,即“buf[len++]=ch;”。(3)题目3要求“将输入文件的后一半内容存储在第二个文件中。”在C++中,用流插入运算符为“<<”,所将buf中存放的数据存入文件outfile2,以根据题干中的要求,即这里补全“outfile2<国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:30130注意:错误的语句在∥********error********的下面,修改该语句即可。#includeinta=10;classCObj{public:CObj(){a=b=0;}voiddisplay(){∥********error********cout<标准答案:(1)cout<a+=a;(3)a+=::a;知识点解析:程序当中定义了全局变量a和类CObj,类CObj含有成员变量a和b,类CObj的变量a和全局变量a均为整型变量,名字完全一样,使用时需要注意区分。类CObj成员函数display()打印变量a和b的值,func(inta)函数和func20均使类成员变量a增加,但是增加方式不同。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分的程序。实现函数sort(intA[],intn),用冒泡法将数组排序。提示:所谓冒泡法,就是每次把相邻的两个数交换,较大的数交换到后面。这样下标从0到n-1的数与其后面相邻的数交换,可以把最大的数交换到数组的末端。进行n次下标从0到n-1的交换,则数组则会变成有序的,而且是由大到小的顺序。注意:不能修改程序的其他部分,并且不能删除其他的部分,也不能修改程序的结构。#include#defineN10voidsort(intA[N],intn){}intmain(){intA[N]={5,7,4,6,i0,13,78,一4,9,20);Sort(A,10);for(inti=0;i标准答案:intitj,k,t;for(i=0;i知识点解析:函数sort(intA[],intn)用冒泡排序法把数组进行从大到小的排序,冒泡法排序利用了求数组中最小值及其位置的算法,首先从n个数中找出最大值,放在第一个元素位置上,再从剩下的n-1个数中找出最大值,放在第二个元素位置上,这样不断重复下去,直到剩下最后一个数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成。(1)定义私有数据成员year、month和day,分别用于表示年、月和日,它们都是int型的数据。请在注释∥*******1*******之后添加适当的语句。(2)完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1,请在注释∥*******2*******之后添加适当的语句。(3)完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释∥*******3*******之后添加适当的语句。(4)完成成员函数print()的类外定义,使其以“年一月一日”的格式将Date对象的值输出到屏幕上,例如:2008-8-8。请在注释∥*******4*******之后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#includeclassDate{public:∥*******2*******Date(inty,intm,intd){∥*******3*******}voidprint()const;private:∥datamember∥*******1*******};voidDate::print()const{∥*******4*******}intmain(){Datenational_day(1949,i0,1);national_day.print();return0;}标准答案:(1)添加语句:intyear,month,day;(2)添加语句:Date()(year=1;month=1;day=1;}(3)添加语句:year=y;month=m;day=d;(4)添加语句:cout<知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入l手,可以看出程序通过调用类Date和函数print实现各种输出操作。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是:112233445566778899注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。1#include2#include3voidmein(){4inta[3][3]_{{1,2,3),{4,5,6),{7,8,9));5int*P,i;6∥********error********7P=a;8for(i=0;i<9;i++){9cout<标准答案:(1)P=&a[0][0];(2)cout<知识点解析:从已给定源程序的main主函数开始入手,可以看出程序是通过数组与指针两种方法输出数组值。解题思路(1)打开modil.cpp,调试程序,显示错误提示为第一标识下“modil.cpp(7):errorC2440:’=’:cannotconvertfrom’int[3][3]’to’int*”,a为二维数组型变量,将其值赋值给P,应该是P指向数组a的起始位置,即“P=&a[0][0];”。(2)程序中第2个标识下的“cout<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使该程序输出倒9×9口诀。程序分析:分行与列考虑,共9行9列,设置两个变量i和j,i控制行,j控制列。程序运行结果如下: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*662*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=l注意:只能补充函数show(),请勿改动其他部分的内容。#includevoidshow(){}voidmain(){cout<<”9*9倒乘法口诀I-<标准答案:for(int1=9;1>0;1一一){for(intj=1;j<=i;j++){cout<知识点解析:(1)由审题分析可知,可利用两重循环来实现输出倒9×9口诀,设置两个循环变量,外层循环变量i从9开始变化至1,循环9次,代表乘号后面的数字。(2)内部循环变量i从1变化到i,代表乘号前面的数字,输出一行,.j<=i,这样保证输出的是倒9×9口诀。在内层循环体内,利用cout输出J的值、“*”、i的值、“=”和i*i值,即输出乘法公式。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了类baseA、priAl和priA2,其中priAl类由baseA类公有派生,priA2类由priAl类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。程序输出结果如下:1051057(1)定义类baseA的构造函数,该构造函数有一个整型的参数m,在构造函数中请将m赋值给数据成员a。请在注释“∥********1********”之后添加适当的语句。(2)定义类priA1的构造函数,该构造函数有两个整型的参数m和11,在构造函数中请将m赋值给数据成员b,将n作为基类baseA构造函数的参数值传入。请在注释“∥********2********”之后添加适当的语句。(3)定义类priA2的构造函数,该构造函数有三个整型的参数m,n和k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类priAl构造函数的参数m和n。请在注释“∥********3********”之后添加适当的语句。(4)完成类priA2的成员函数show的定义,该函数调用基类成员函数,输出基类私有成员a和b及类priA2自身的数据成员C的值,上述三个值在输出时以空格隔开。请在注释“∥********4********”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#lnclude<10Stream.h>C1assbaseA{inta;public:∥********1********intgeta(){returna;}};classpriAl:publicbaseA{intb;public:∥********2********intgetb(){returnb;}};classpriA2:publicpriAl{intC;public:∥********3********voidshow(){∥********4********}};voidmain(){priA2a(7,5,10);cout<标准答案:(1)添加语句:baseA(intm){a=m;}(2)添加语句:priAl(intm,intn):baseA(n){b=m;}(3)添加语句:priA2(intm,intn,intk):priAl(n,k){c=m,)(4)添加语句:cout<知识点解析:(1)根据题目1要示,构造函数函数名和类名一致,显然baseA构造函数名为baseA(),在baseA()中通过参数m完成对成员变量a的赋值,因此构造函数名为baseA(intm),在函数内部对成员a赋值,故第1个标识下应添加“baseA(intm){a=m;)”。(2)根据题目2要示,构造函数形式为priAl(intm,intn),m赋值给priAl类成员b,将n作为基类baseA构造函数的参数值传入,故第2个标识下应添加“priAl(hatm,hatn):baseA(n){b=m;)”。(3)根据题目3要示,函数形式为priA2(intm,intn,intk1,在构造函数中将m赋值给数据成员c,将11和k分别赋值给基类priAl构造函数的参数m和n,因此第3个标识下应添加“priA2(intm,intn,intk):priAl(n,k){c=m;}”。(4)根据题目4要示,priA2类公有派生于priAl,而priA1公有派生于baseA,因此在priA2类中可以调用基类的geta0和getb0来获得基类私有成员a和b,再输出priA2的私有成员C即满足要求,因此第4个标识下应添加“cout<国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:Maxis7提示:max()函数实现找出两个数中的最大值,并作为函数值返回。注意:错误的语句在∥********error********的下面,修改该语句即可。#includeusingnamespacestd;∥********error********intmax(inta,intb){if(a标准答案:(1)intmax(int&a,int&b)(2)max(m,n);知识点解析:(1)由审题分析可知max函数采用的是传送引用方式传递参数,因此第1个标识下应该为intmax(intt&a,int&b)。(2)调用max时,传递引用时直接使用变量名即可,第2个标识下应改为“max(m,n)”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数sort(int&m,int&n,int&1)实现将三个整数m、n、1由大到小输出。m最大,1最小。程序分析:程序实现时,可以把最大的数放到m上,先将m与n进行比较,如果mvoidsort(int&m,int&n,int&1){}intmain(){intx=9;inty=13;intz=一3;sort(x,y,z);cout<标准答案:Intt;if(m知识点解析:(1)由审题分析可知,三次比较便可将m、n、1排序。(2)在实现时,先将m与n进行比较,如果m三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要求完成下列操作,将类CRect的定义补充完成。(1)定义私有数据成员leftPoint、topPoint、rightPoint、bottomPoint,分别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数据。请在注释∥********1********之后添加适当的语句。(2)完成默认构造函数CRect的定义,指定缺省实参为0,都是double型的数据。请在注释∥********2********之后添加适当的语句。(3)定义函数体为空的析构函数。请在注释∥********3********之后添加适当的语句。(4)在main()函数中定义CRect类的实例reet2,并把rectl的值赋给rect2。请在注释∥********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeClassCRect{private:∥********1********public:∥********2********∥********3********voidSetPoints(double,double,double,double);voidSetLeftPoint(doublem)(1eftPoint=m;)voidSetRightPoint(doublem){rightPoint=m;)voidSetToppoint(doublem){topPoint=m;)voidSetBottomPoint(doublem){bottomPoint=m;)voidDisplay(););CRect::CRect(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::SetPointS(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottompoint=b;}voidCRect::Display(){cout(<”left—toppointiS(”<标准答案:(1)添加语句:doubleleftPoint,topPoint,rightPoint,bottomPoint;(2)添加语句:CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);(3)添加语句:~CRect(){}(4)添加语句:CRectrect2(rectl)知识点解析:(1)第1个标识下完成私有数据成员leflPoint、topPoint、rightPoint、bottomPoint的定义,均为double型的变量,故第1个标识下应添加“doubleleflPoint,topPoint,rightPoint,bottomPoint;”。(2)构造函数完成成员变量的初始化,类CRect的默认构造函数并初始化double型私有数据成员leflPoint、topPoint、rightPoint、bottomPoint为0,故第2个标识下应添加“CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。(3)析构函数名和类名一致,并在前面加“~”以和构造函数区别,该析构函数体为空,故第3个标识下应添加“~CRect0{};”,虽然该函数体为空,但是“{}”必须保留。(4)主函数中类CRect的对象rect2是通过复制构造函数将rectl的值赋值给它实现初始化的,而rect1的初始化直接调用自定义构造函数,第4个标识下应添加“CRectrect2(reet1);”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为10,4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN6typeclefstructnode{intdata;struernode,*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;p=h;while(P){/*********found*********/q=【1】;/*********found*********/while(【2】){if(p一>data>q一>data){t=p一>data;p一>data=q一>data;q一>data=t;}q=q一>next;}/*********found*********/p=【3】;}}NODE*creatiist(inta[]){NODE*h,*p,*q;inti;h=NULL;for(i=0;idata=a[i];q一>next=NULL;if(h==NULL)h=p=q;else{p一>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;P=h;if(P==NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("一>%d",p一>data);p=p一>next;)while(p!=NULL);printf("一>End\n");}}main(){NODE*head;inta[N]={0,10,4,2,8,6);head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)p一>next(2)q(3)p一>next知识点解析:填空1:从第2个while循环可知,q的初值应该为p的next,故此空应该填写p一>next。填空2:第2个while循环表示的是每次从链表剩下的树中找出最小的数,因此此空应该以q是否为空来判断循环是否结束,所以此空应该填写q。填空3:当找到一个最小的数时p应该向后移,因此此空应该填写p一>next。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将主函数中两个变量的值进行交换。例如,若变量a中的值为8,b中的值为3,则程序运行后,a中的值为3,b中的值为8。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include/*********found*********/voidfun(intx,inty){intt;/*********found*********/t=x;x=y;y=t;}voidmain(){inta,b;a=8;b=3;fun(&a,&b);printf("%d%d\n",a,b);}标准答案:(1)voidfun(int*x,int*y)(2)t=*x;*x=*y;*y=t;知识点解析:(1)本题考查指针变量作函数参数。一般变量作参数时,不能改变实参的值,采用指针变量作为参数则能够改变实参的值。主函数中fun函数的调用方式表明fun函数的参数应当为指针类型。(2)此处是一个变量交换操作错误,可知x、y是指针类型,变量类型不同,因而x、y不能与t进行值的交换。三、综合应用题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将a、b两个两位正整数合并成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。例如,当a=45,b=12,调用该函数后c=1425。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresdltis:%id\n",c);}标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;}知识点解析:本题的主要问题是如何取出a和h的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000,、100、10、1,就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹prog1下的工程prog1,该工程中包含程序文件main.epp,其中有Salary(“工资”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为:应发合计:3500应扣合计:67.5实发工资:3432.5注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classSalary{public:Salary(constchar*id,doublethebase,doublethebonus,doublethetax)//ERROR**********found**********:thebase(base),thebonus(bonus),thetax(tax){staffid=newchar[strlen(id)+1];strcpy(staffid,id);}//ERROR**********found**********一Salary(){delete*staff_id;)doublegetGrossPay()const{returnbase+bonus;)//返回应发项合计doublegetNetPay()const{returngetGrossPay()一tax;}//返回实发工资额private:char*staffid;//职工号doublebase;/基本工资doublebonus;//奖金doubletax;//代扣个人所得税};intmain(){Salarypay(”888888”,3000.0,500.0,67.50);cout;<<”应发合计:”<标准答案:(1):base(the_base),bonus(the_bonus),tax(the_tax)(2)~Salary(){delete[]staff_id;}(3)cout<<”实发工资:”<知识点解析:(1)主要考查考生对构造函数的掌握情况,构造函数的成员初始列表要把形参放在括号内。(2)主要考查考生对析构函数的掌握情况,析构函数使用delete释放指针,delete后要跟标识符“[]”。(3)主要考查考生对成员函数调用的掌握情况,调用类的成员函数使用标识符“.!”,而不是作用域符“::”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排序函数sonByName和主函数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****”。#includeusingnamespacestd;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],//姓名boolismale;//性别,为true时表示男性Datebirthdate;//出生日期public:Person(char*name,boolismale,Datebirth_date)//**********found**********:______________{strcpy(this->name,name);}constchar*getName()const{returnname;)boolisMale()const{returnismale;}DategetBirthdate()const{returnbirthdate;)//利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于intcompareName(constPerson&p)const{//**********found**********____________}voidshow(){cout<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<标准答案:(1)is_male(is_male),birth_date(birth_date)(2)retumstrcmp(name,P.getName());(3)<知识点解析:(1)主要考查考生对构造函数的掌握,由函数体内strcpy(this一>name,name);可知,要使用成员列表初始化的成员为is_male和birth_date。(2)主要考查考生对strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。因为strcmp()函数的功能是比较字符串大小,因此可以直接被retum语句调用:returnstrcmp(nalne,P.getName());。(3)主要考查考生对成员函数的掌握,程序的注释为:显示出生月,由此可以知道这里要输出出生月份,直接调用函数getMonth()即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程pmj3,其中定义了MyString类,一个用于表示字符串的类。成员函数reverse的功能是将字符串进行“反转”。例如,将字符串ABCDEF“反转”后,得到字符串FEDCBA;将字符串ABCDEFG“反转”后,得到字符串GFEDCBA。请编写成员函数reverse。在main函数中给出了一组测试数据,此时程序运行中应显示:读取输入文件…一反转前一STR1=ABCDEFSTR2=ABCDEFG一反转后一STR1=FEDCBASTR2=GFEDCBA要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中,输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。//mgsering.h#include#includeusingnamespacestd;classMyString{public:MyString(constchar*S){str=newchar[strlen(s)+1];strcpy(str,s);}一NyString(){delete[]st;r;)voidEeveEse();friendostream&operator<<(OStream

温馨提示

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

评论

0/150

提交评论