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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷16(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹progl下的工程prog1。此工程中包含程序文件main.cpp,其中有类Score(“成绩”)和主函数main的定义。程序中位于每个“//ERROR*****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:学号:12345678课程:英语总评成绩:85注意:只修改每个“//ERROR****found****”下的一行,不要改动程序中的其他内容。#includeusingnamespacestd;clasSScore{public:Score(constchar‘thecourse,constchar*theidrintthenormallintthemidterm,inttheendofterm):course(thecourse),normal(thenormal),midterm(themidterm),endofterm(theendofterm){//ERROR*********found**********strcpy(theid,studentid);}constchar*getCourse()const{returncourse;)//返回课程名称//ERROR*********found*********constchar*getID()const{return&studentid;)//返回学号intgetNormal()const{returnnormal;)//返回平时成绩intgetMidterm()const{returnmidterm;)//返回期中考试成绩intgetEndOfTerm()const{returnend—of—term;}//返回期末考试成绩intgetFinal()const;//返回总评成绩private:constchar*course;//课程名称charstudentid[12];//学号intnormal;//平时成绩intmidterm;//期中考试成绩intendofterm;//期末考试成绩};//总评成绩中平时成绩占20%,期中考试占30%,期末考试占50%,最后结果四舍五入为一个整数//ERROR*********found*********intgetFinal()const{returnnormal*0.2+midterm*0.3+end—of—term*0.5+0.5;}intmain(){charEnglish[]=“英语”;Scorescore(English,“12345678”,68,83,92);cout<<“学号:”<标准答案:(1)strepy(studentjd,thejd);(2)eonstchar*getlD()const{returnstudentjd;}(3)intScore::getFinal.()const{知识点解析:本题考查的是Score类,其中涉及动态数组、构造函数、strcpy函数、const函数和成员函数。strcpy()函数和strlen()函数等经常会考到,要注意它们的参数要求。类的成员函数在类外定义时需要加上类名的作用域符。【解题思路】(1)主要考查考生对strepy()函数的掌握情况,strcpy(参数一,参数二)函数的功能是将参数二的字符串复制给参数一,因此在这里student-id应该位于参数一的位置,即strcpy(studentjd,thejd);。(2)主要考查考生对函数返回值的掌握情况,根据注释:返回学号可知学号应该由一个字符串组成。再看函数要返回的类型:constchar术,可知要返回一个char型指针,也就是一个char型数组,而&studentjd是一个char型数组指针,因此直接写studentjd即可。(3)主要考查考生对类的成员函数的掌握情况,因为getFinal函数是Score类的成员函数,所以在定义时要加上类名和作用域符,即Score::。【解题宝典】主要考查考生对strcpy函数、函数返回值和成员函数的掌握情况,在含有动态数组或者字符数组的类中,常常会涉及strepy、strlen等函数的使用,要注意这些函数的参数要求。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹prog2下的工程pmg2,此工程中包含一个程序文件mmn.cpp,其中有“班级”类Class和“学生”类Student的定义,还有主函数main的定义。在主函数中定义了两个“学生”对象,他们属于同一班级。程序展示,当该班级换教室后,这两个人的教室也同时得到改变。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:改换教室前:学号:0789姓名:张三班级:062113教室:521学号:0513姓名:李四班级:062113教室:521改换教室后:学号:0789姓名:张三班级:062113教室:311学号:0513姓名:李四班级:062113教室:311注意:只能在横线处填写适当的代码,不要改动程序中的其他内容。#includeusingnamespacestd;classClass{//“班级”类public:Class(constchar*id,constchar*room){strcpy(classid,id);//*********found**********}constchar*getClasSID()constfreturnclassid;)//返回班号//*********found**********constchar*getClassroom()const{_______)//返回所在教室房号voidchangeRoomTo(constchar*newroom){//改换到另一个指定房号的教室strcpy(classroom,newroom);}private:charclassid[20];//班号charclassroom[20];//所在教室房号};classStudent{//“学生”类charmyid[i0];//学号charmyname[20];//姓名Class&my_class;/is;st在教室public://*********found**********Student(constchar*the_id,constchar*the_name,Class&the—class):________{strcpy(my_id,the—id);strcpy(my_name,the_name);}constchar*getID()const{returnmy_id;)constchar*getName()const{returnmy—name;)ClassgetClass0const{returnmy_class;)};voidshowStudent(Student*stu){cout<<“学号:”<getID()<<“”;cout<<“姓名:”《stu->getName()<<“”;cout<<“班级:”<getClass().getClassID()<<“”;cout<<“教室:”<getClass().getClassroom()<标准答案:(1)strepy(classroom,loom);(2)returnclassroom;(3)my—class(the—class)(4)cla.changeRoomTo(“311”);知识点解析:本题考查的是Class类和Student类,其中涉及构造函数、eonst函数和strcpy函数。在Student类中使用Class类,在C++中很常见,在调用的时候要注意类的调用格式及构造函数。【解题思路】(1)主要考查考生对strcpy函数的掌握情况,根据上一条语句:syrcpy(class_id,id);可知,这条语句要复制字符串room,因此使用strcpy函数复制,即strcpy(classroom,room);。(2)主要考查考生对函数返回值的掌握情况,根据函数要求:返回所在教室房号及函数要求返回的类型为congtchar,*,可以得出这里直接使用return语句返回classroom即可。(3)主要考查考生对构造函数的掌握情况,先看函数体中:strcpy(myjd,the—id);strcpy(my—name,the—name);可知只有参数Class&the—class未使用,因此在这里使用成员列表初始化给my—class赋初始值。(4)主要考查考生对成员函数调用的掌握,程序要求062113班的教室由521改换到311。在类Class中已经定义了函数:voidchangeRoomTo(constchar*new—room),因此直接调用函数changeRoomTo即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹prog3下的工程prog3,其中包含了类Polynomial(“多项式”)的定义。形如5x4+3.4x2一7x+2的代数式称为多项式,其中的5为4次项系数,3.4为2次项系数,一7为1次项系数,2为0次项(常数项)系数。此例缺3次项,意味着3次项系数为0,即省略了0x3。在Polynomial中,多项式的各个系数存储在一个名为coef的数组中。例如,对于上面的多项式,保存在coef[0]、coef[1].coef[4]中的系数依次为:2.0、一7.0,3.4、0.0、5.0,也即对于i次项,其系数就保存在c(1ef[i]中。成员函数getValue计算多项式的值,多项式中x的值是由参数指定的。请补充完成文件Polynomial.cpp中成员函数getValue的定义。此程序的正确输出结果应为:Valueofplwhenx=2.0:59.8Valueofp2whenx=3.0:226.8注意:只在函数getValue的“//**********333**********”和“/**********666**********”之间填入若干语句,不要改动程序中的其他内容。//Polynomiac.h#includeusingnamespacestd;classPolynomial{//“多项式”类public:Polynomial(doublecoef[],intnum):coef(newdouble[num]),numofterms(num){for(inti=0;icoef[i]=coef[i];}~Polynomial(){delete[]coef;)//返回指定次数项的系数doublegetCoefficient(intpower)const{returncoef[power];)//返回在X等于指定值时多项式的值doublegetValue(doubleX)const,private://系数数组,coef[0]为0次项(常数项)系数,coef[1]为1次项系数,coef[2]为2次项(平方项)系数,余类推。double*coef;intnum0fterms;};voidwriteToFile(constchar‘path);//Polymomial.cpp#include”Polynomial.h”doublePolynomial::getValue(doubleX)const{//多项式的值value为各次项的累加和doublevalue=coef[0];//**********333**********//**********666**********returnvalue;}//main.cpp#include”Polynomial.h”intmain(){doublepl[]={5.0,3.4,一4.0,8.0),p2[]={0.0,-5.4,0.0,3.0,2.0};Polynomialpolyl(pl,sizeof(p1)/sizeof(double)),poly2(p2,sizeof(p2)/sizeof(double));cout<<”ValueofplwhenX=2.0:”<标准答案:for(inti=1;i0)//当j大于零时,做相乘操作,即完成该项的乘方动作{xJalue*=x;j一一,}value+=coef[i]*xvalue;//把i项的乘方结果乘以该项系数后加进value中}知识点解析:本题考查Polynomi~类,其中涉及构造函数、动态数组、析构函数和const函数。【解题思路】题目要求成员函数getValue计算多项式的值,多项式中x的值由参数指定,多项式的值value为各次项的累加和。由类的定义可知数组coef中存储的是各次项的系数,这里使用for循环来完成题目要求,当次项为0时,value=coef[0]。当次项为1时,value=coef[1]*x+coef[0]。依次类推直到x的最高次数。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程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,secondsrminutes,hours,days;};Clock∷Clock(unsignedlongi):total_sec(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"<<end1;}voidClock∷tick(){//ERROR*******found*******set(totalsec++);}ClockClock∷operator++(){tick();//ERROR*******found*******returnthis;}intmain(){Clockck(59);cout<<"Initialtimesare"<<end1;ck.print();++ck;cout<<"After0nesecondtimesare"<<end1;ck.print();retuEn0;}标准答案:(1)voidClock∷pnnt()const(2)set(++total_sec);(3)return*this;知识点解析:(1)主要考查考生对成员函数的掌握,由Clock类中对函数print的声明voidprint()const;可知,在定义print函数时少了const。(2)主要考查考生对++操作的掌握,根据函数要求,时间要先前进一秒,再调用函数set,因此total_see++应改为++total_sec。(3)主要考查考生对this指针的掌握,函数要求返回值Clock,即返回一个类,而不是指针,因此使用*this。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephan(“大象”)、类Nouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>usingnamespacestd;enumcategory{EMPTY,ELEPHANT,NOUSE};char*output[]={"EMPTY","ELEPHANT","NOUSE");cLassMammal{public:Nammal(char*str){//**********found**********name=new_______strcpy(name,str);}virtualchar*WhoamI()=0;virtual~Nammal(){delete[]name;}voidPrint(){cout<<WhoAmI()<<end1;}private:char*name;};classElephant:publicNammal{public://*********found*********Elephant(char*str):__________{}char*whoAmI(){returnoutput[ELEPHANT];}};classNouse:publicNammal{public:Nouse(char*str):Mammal(str){}//**********found**********char*WhoAmI(){_______}};intmain(){//**********found**********Mammal*pm=new_______("Huanhuan");pm->Print();deletepm;pm=newMouse("Micky”");pm>-Print();deletepm;return0;}标准答案:(1)char[strlen(str)+1];(2)Mammal(str)(3)returnoutput[MOUSE];(4)Elephant知识点解析:(1)主要考查分配空间,程序要给name分配空间,由下一条语句中strcpy(name,str)可知程序要把字符串str复制给name,因此要分配的空间大小为strlen(str)+1。(2)主要考查考生对构造函数的掌握,因为Elephant类是Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。(3)主要考查考生对枚举类型的掌握,先看程序:enumcategory{EMPTY,ELEPHANT,MOUSE}。再参考Elephant类中的WhoAmI函数:char*WhoAmI(){returnoutput[ELEPHANT];}。可知这里要填写的返回语句为:returnoutput[MOUSE];。(4)主要考查考生对派生类的掌握,题目要求输出:ELEPHANTMOUSE可知,要先调用Elephant类的WhoAml函数,因此给指针pm分配Elephant类空间。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明了一个单向链表类sLst。sList的成员函数Prepend的功能是在链表头部加入一个新的元素。请编写成员函数Pepend。在main函数中给出了一组测试数据,此时程序的输出应为:B->A->###A->###A->###exitinginnerblockexitingouterblock注意:只在函数Prepend的“********333********”和“********666********”之间填入若干语句,不要改动程序中的其他内容。//SLiSt.hstructsListItem{chardata;sListItem*next;};classsList{public:sList():h(0){}//0表示空链表~sList();voidPrepend(charc);//在链表前端加入元素voidDel();//删除链表首元素sListItem*First()const{Eeturnh;)//返回链表首元素voidPrint()const;//打印链表内容voidRelease();//销毁链表private:sListItem*h;//链表头},voidwriteToFile(constchar*);//main.cpp#include<iostream>#include"sList.h"suingnamespacestd;sList∷~sList(){Release();}voidsList∷Prepend(charc){//********333********//********666********}voidsList∷Dei(){sListltem*temp=h;h=h->next;deletetemp;}voidsList∷Print()const{sListItem*temp=h;while(temp!=0)//判断是否到达链表尾部{cout<<temp->data<<"->";temp=temp->next;}cout<<"\n###"<<end1;}voidsList∷Release(){while(h!=0)Del();}intmain(){sList*ptr;{sListobj;obj.Prepend(’A’);obj.Prepend(’B’);obj.Print();obj.Del();obj.Print();ptr=&obj;ptr->Print(),tout<<"exitinginnerblock"<<end1;}cout<<"exitingouterblock"<<end1;writeToFile("");return0;}标准答案:sListItem*temp=newsListItem;//动态分配空间给结构体temp的指针temp->data=c;//把c赋值于结构体temp成员datatemp->next=h;//把h赋值于结构temp体成员nexth=temp;//把temp赋值给h,即h指向temp指向的空间知识点解析:主要考查考生对链表的掌握,成员函数Prepend的功能是在链表头部加入一个新元素。形参e是一个char型变量,因此要定义一个新的结构体指针temp,并给它分配sListltem类型空间,把形参c中的值赋给temp的数据域,并使temp通过指针链接到链表E。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:用函数指针指向要调用的函数,并进行调用。规定在【2】处使f指向函数n,在【3】处使f指向函数f2。当调用正确时,程序输出:x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#includedoublef1(doublex){returnx*x;)doublef2(doublex,doubley){returnx*y;)doublefun(doublea,doubleb){/*********found*********/【1】(*f)();doubler1,r2;/*********found*********/f=【2】;r1=f(a);/*********found*********/f=【3】;r2=(*f)(a,b);returnr1+r2;}main(){doublex1=5,x2=3,r;r=fun(x1,x2);printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n",x1,x2,r);}标准答案:(1)double(2)f1(3)f2知识点解析:填空1:(*f)()代表一个指向函数的指针变量,而本题所被调用的f1、f2两函数的返回值均为double型,因而此空应该填写double。填空2:因为在给函数指针变量赋值时,只需给出函数名而不必给出参数,因而此空应该填写f1。填空3:同填空2,此空应该填写f2。相关知识点:(1)指向函数的指针变量的一般定义形式为:数据类型(*指针变量名)();(2)函数的调用可以通过函数名调用,也可以通过函数指针调用。(3)在给函数指针变量赋值时,只需给出函数名而不必给出参数。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数Bum)为止。例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includefloatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/*********found*********/while(t>=num){pi=pi+t;n=n+2;s=一s;/*********found*********/t=s%n;}pi=pi*4;returnpi;}voidmain(){floatn1,n2;system("CLS");printf("Enterafloatnumber:");scarlf("%f",&n1);n2=fun(n1);printf("%6.4f\n",n2);}标准答案:(1)while(fabs(t)>=num)(2)t=s/n;知识点解析:(1)函数fun中while语句的作用是,当新的一项大于给定参数时,循环累计计算s的值。题目要求最后一项的绝对值小于给定参数,因此循环条件应当是while(fabs(t)>=num)。(2)变量t用来存放最后一项的值,因为每一项均为1或一1除以一个数,所以此处应使用除法运算符“/”。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为WWWWSSSSHHHH则字符串中的内容应是:WSHWSHWSHWSH。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#defineM3#defineN4voidfun(char(*s)[N],char*b){}voidmain(){chara[100],w[M][N]={{’W’,’W’,’W’,’W’}、{’S’,’S’,’S’,’S’},{’H’,’H’,’H’,’H’));inti,j;printf("Thematrix:\n");for(i=0;i标准答案:voidfun(char(*s)[N],char*b){inti,j,k=0;for(i=0;i知识点解析:看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。注意:第1个循环条件为i国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Constructorcalled.Thevalueis10Copyconstructorcalled.Thevalueis10Destructorcalled.Destructorcalled.注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<ioStream>usingnamespacestd;classMyClass{public://ERROR*******found*******MyClass(inti){value=i;cout<<"Constructorcalled."<<endl;}//ERROR*******found*******MyClasS(constMyClassP){value=p.value;cout<<"Copyconstruc-torcalled."<<endl;}voidPrint(){cout<<"Thevalueis"<<value<<endl;}//ERROR*******found*******void~MyClass(){cout<<"DeStructorcalled."<<endl;}private:intvalue;};intmain(){MyClassobj1;obj1.Print();MyClassobj2(obj1);obj2.Print();return0;}标准答案:(1)MyClass(inti=10)(2)MyClass(constMyClass&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、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有“书”类Book及其派生出的“教材”类TeachingMaterial的定义,还有主函数main的定义。请在程序中“//**********found**********”下的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:教材名:C++语言程序设计页数:299作者:张三相关课程:面向对象的程序设计注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>usingnamespacestd;classBook{//“书”类char*title;//书名intnumpages;//页数char*writer;/作者姓名public:Book(constchar*the_title,intpages,constchar*the_writer):numpageS(pages){title=newchar[strlen(the_titie)+1];strcpy(title,the_title);//**********found**********_______strcpy(writer,thewriter);}//**********found**********~Book(){_______}intnumOfPages()const{returnnum_pages;)//返回书的页数constchar*theTitle()const{returntitle;)//返回书名constchar*theWriter()const{returnwriter;}//返回作者名};classTeachingMaterial:publicBook{//“教材”类char*course;public:TeachingMaterial(constchar*the_title,intpages,constchar*the_writer,constchar*the_course)//**********found**********:_______{course=newchar[strlen(the_course)+1];Strcpy(course,thecourse);}~TeachingMaterial(){delete[]course;}constchar*theCourse()const{returncourse;}//返回相关课程的名称};intmain(){TeachingMateriala_book("C++语言程序设计",299,"张三",”面向对象的程序设计”);cout<<"教材名:"<<a_book.theTitle()<<endl<<"页数:"<<a_book.numOfPages()<<endl<<"作者:"<<a_book.theWriter()<<endl//**********found**********<<"相关课程:"<<_______;cout<<endl;return0;}标准答案:(1)writer=newchar[strlen(the_writer)+1];(2)delete[]title,writer;(3)Book(the_title,pages,the_writer)(4)a_book.theCourse()<<endl知识点解析:(1)主要考查考生对动态分配空间的掌握,在填空前可以参考title的初始化,即先分配空间,再使用strcpy函数复制字符串,因此这里使用writer=newchar[strlen(the_writer)+1]语句给writer分配空间,注意分配空间的大小应为字符串长度加1。(2)主要考查考生对析构函数的掌握,要填写的内容是析构函数的函数体,因为有两个动态数组title和writer,所以要释放两个动态数组空间,使用语句~Book(){delete[]title,writer;}来完成。(3)主要考查考生对派生类的构造函数的掌握,派生类必须成员初始化列表法来先给基类进行初始化。(4)主要考查成员函数调用,题目要求输出“相关课程:面向对象的程序设计”。可以知道这里要显示的是course,但course是私有成员不能直接调用,要使用成员函数调用,即theCourse()。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件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=0j;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就是要添加的位置//该元素及其后面的元素依次后移,腾出插入位置for(intk=counter;k>J;k--)elem[k]=elem[k-1];elem[j]=element;//将element插入到该位置counter++;//计数器加1}voidIntegerSet::remove(intelement){//********333********//********333********}voidIntegerSet::show()const{for(inti=0;i<getCount();i++)cout<<setw(4)<<getElement(i);cout<<endl;}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(inti=0;i<counterj;1++)//遍历整个集合(数组elem)if(element==elem[i])//如果element等于elem[i]{for(intj=i;j<counter-i;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打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:Thisisagreart!HelloHello注意:错误的语句在//********error********的下面,修改该语句即可。#includeclassCMyClass{public:voiddisplayl(){cout<<"Thisisgreat!"<标准答案:(1)charstr[6]="Hello";或charstr[]="Hello";(2)voiddisplay3(char*string)或voiddisplay3(charstring[])(3)cout<知识点解析:(1)"Hello"字符串的长度为5,存放在字符数组中的话,字符数组的长度至少为6,因为字符数组的最后一个字符为NULL,故第1个标识下字符数组长度为5太短,应改成“charstr[6]="Hello";”或“charstr[1="Hello";”。(2)charstring表示string为一个char变量,代表一个字符而不是一串字符,程序要求输出一串字符显然字符变量做不到,应该为字符指针或字符数组,故第2个标识下应改为“voiddisplay3(char*string)”或“voiddisplay3(charstring[])”。(3)编译程序发现第3标识下有错误,观察程序可知第3个标识下语句结束没有分号,而C++语句必须以分号结束,应加上分号,即第3表示下应改为“cout<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数sum(intA[NUM][NUM],intn)实现的功能是计算矩阵中所有非质数数字的和。提示:函数isPrime(intn)的功能是判定当前数字是否为质数,如果是则返回true。注意:不能修改程序的其他部分,只能修改sum()函数。#include#include#defineNUM50intA[NUM][NUM]={{10,13,59,70,6},{2,40,89,92,9},{14,55,71,11,19},{79,68,83,97,101},{102,10001,23,45}};boolisPrime(intn){if(n==1)returnfalse;if(n==2)returntrue;for(inti=2;i标准答案:intre=0;for(inti=0;i知识点解析:(1)矩阵A[NUM][NUM]是2维矩阵,SHIn函数的参数n给出了矩阵A的具体维数,因此矩阵A中共含有n×n个有效数。(2)A[NUM][NUM]中元素可表示为A[i][j],其中i表示元素所在行数,i表示元素所在的列数,i、j分别从0到n.1范围内变化,因此设置内外两层循环可逐个遍历整个矩阵寻找非质数。(3)函数isprime提供了判断质数的方法,对每个元素A[i][j],调用函数isprime(A[i][j]),判断函数的返刚值是否为假,如果为假说明不是质数,应该累加起来。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义私有数据成员year、month、day,分别用于年、月、日,它们都是int型的数据,请在注释//********1********后添加适当的语句。(2)完成判断数据成员date2是否是闰年函数intDate::IsLeapYear0的定义,返回数据成员date2是否是闰年的值,是则返回1,否则返回0。请在注释//********2********后添加适当的语句。(3)设置SetData0的默认时间为:2004-12-1,请在注释//********3********后添加适当的语句。(4)完成主函数main(),完成输出date2isaleapyear,请在注释//********4********后添加适当的语句。提示:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。注意:增加或修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeusingnamespacestd;ClassDate{public://********3********voidSetDate(inty,intm,intn);intIsLeapYear();VoidPrint(){cout<标准答案:(1)intyear,month,day;(2)将“return”补充完整为:returnfyear%400==0)||(year%4==0&&year%100!=0);(3)将“voidSetDate(inty,intm,intn);”补充完整为:voidSetDate(inty=2004,intm=12,intn=1);(4)将“cout<<"date2is"<<("":"not")<<"aleapyear."<知识点解析:(1)题目1要求“定义私有数据成员year、month、day,分别用于年、月、日,它们都是int型的数据”。在程序中的Date类中的priate区域添加数据成员year、month、day的定义即可,其中它们的类型根据题目要求定义为int型。即在第1个标识下添加“intyear,month,day;”。(2)题目2要求“完成判断数据成员date2是否是闰年函数intDate::IsLeapYear()的定义”。公元纪年的年数可以被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。用程序语言表达为“(year%400==0)‖(year%4==0&&year%100!=0)”,即在第2个标识补充的返回值语句为“return(year%400=0)‖(year%4==0&&year%100!=0);”。(3)题目3要求“设置SetData0的默认时间为:2004-12-1”。程序中类Date的成员函数定义为“voidSetDate(inty,intm,intn);”,设置默认时间为:2004.12.1,就是设置SetDate函数中的变量值分别为2004,12,1。即成员函数的定义语句修改为“voidSetDate(inty=2004,intm=12,intn=1);”。(4)题目4要求“完成主函数main(),完成输出date2isaleapyear”。标识4下的语句“cout<<"date2is"<<("":"not”)<<"aleapyear.”<国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:sizeof(strl)=5sizeof(str2)=10sizeof(str3)=l注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。(1)不能删除assert()语句;(2)只能修改后面的数字。提示:assert()函数如果为假,则会产生一个中断异常。1#include2#include3voidmain()4{5char*strl=”abc”;6//********error********7assert(sizeof(strl)==3);8cout<<"sizeof(strl)=5"<标准答案:(1)assert(Sizeof(strl)==4);(2)assert(Sizeof(str2)==10);(3)assert(Sizeof(str3)==1);知识点解析:本题的功能是利用assert()函数,则会产生一个中断异常。从已定源程序的main主函数开始入手,依次执行程序中的语句,输出题目中要求的输出值。本题在调试的时候并不会产生错误,它的错误是逻辑错误。[解题思路](1)assert()函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert()函数就要为真,才不会产生中断异常。“assert(sizeof(strl)==3);”语句中“sizeof(strl)==3”为假,这个会使程序产生异常,不能正常执行。凶为strl的值为abc但是它还有一个尾符,所以它的长度应该是4,而不是3,所以第1个标识下修改为“assert(sizeof(str1)==4);”。(2)同(1),str2[10]说明,str2的空间为10,第2个标识下修改为“assert(sizeof(str2)--lO);”。(3)同(1),charstr3=23;语句说明23是字符,占空间为l,所以修改为“assert(sizeof(str3)==1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数num(char*str)实现返回字符串中非数字的个数。例如:abcl23abc45返回输出:6将函数num()补充完整。注意:请勿改动主函数。1#include2intnum(char*str)3{45}6intmain()7{8charstr[1024];9cout<<"pleaseinputastring:"<标准答案:1intnumber=0;2for(inti:0;str[i]!=0;i++)3if(str[i]>’9’||str[i]<’0’)//非数字字符4number++;5returnnumber;知识点解析:函数num(char*str)实现返回字符串中非数字的个数,数字从0开始到9结束,共有10个,因此判断数组字符比较简单,即“’0’<=str[i1<=’9’”,除数字字符外其余的都是非数字字符,利用这个关系可迅速判断该字符是否是非数字字符。[解题思路](1)利用循环搜索数组str中的元素,循环变量从0开始,直到str[i]=0(到了字符数组的尾),不断地读取str中读取元素。(2)每读到一个元素判断是否是非数字字符,即满足条件“str[i]>’9’||str[i]<’0’”的字符为非数字字符,非数字字符个数加1,循环结束就得到了非数字字符的个数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。此程序的运行结果为:InCDerive’sdisplay().b=1InCDerive2’sdisplay().b=2其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义函数display()为无值型纯虚函数。请在注释//********1********之后添加适当的语句。(2)建立类CDerive的构造函数,请在注释//********2********之后添加适当的语句。(3)完成类CDerive2成员函数diaplay()的定义。请在注释//********3********之后添加适当的语句。(4)定义类Derivel的对象指针d1,类CDerive2的对象指针d2。其初始化值分别为l和2。请在注释//********4********之后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include2USingnamespacestd;3classCBase4{5public:6CBase(inti){b=i;)7//********1********89protected:10intb;11};12classCDerive:publicCBase13{14public:15//********2********1617voiddisplay()18{19cout<<"In.CDerive’sdisplay()."<<"b="<display();32}33voidmain()34{35//********4********3637func(d1);38func(d2);39}标准答案:(1)添加语句:virtualvoiddisplay():0;(2)添加语句:CDerive(inti):CBase(i){}(3)添加语句:voiddisplay(){cout<<"InCDerive2’sdisplay()."<<"b=”<知识点解析:程序中定义了类CBase、CDerive和CDerive2,CDerive和CDerive2公有派生于类CBase,CDerive和CDerive2均有成员函数display(),用于输出。函数func(CBase*obj)的参数为CBase对象指针,在函数体内通过该指针调用其display()函数。[解题思路](1)CBase类中的display()函数是纯虚函数,纯虚函数的定义格式为:virtual<函数类型><函数名>(<参数表>)=0,因此第1个标识下应添加“virtualvoiddisplay()=0;”。(2)类CDerive的构造函数用来完成类成员变量的初始化,派生类没有自己的成员变量,可直接采用基类的构造函数完成初始化,因此第2个标识下应添加“CDerive(inti):CBase(i){)”。(3)第3个标识下是完成类CDerive2成员函数diaplay()的定义和实现,根据要求的输出结果“InCDerive2’Sdisplay().b=2”可知display()函数除输出字符串“InCDerive2’sdisplay().”还输出变量b的值,故第3个标识下应添加“voiddisplay(){cout<<"InCDerive2’sdisplay()."<<"b="<国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asd123fgh543df,处理后新字符串为:123543asdfghdf。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include#includechar*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i标准答案:(1)j(2)k(3)p或(p)知识点解析:填空1:函数中申请了两个内存空间,其中p存放数字字符串,t存放非数字字符串,根据条件可知,p依次存放数字字符串,其位置由j来控制,所以应填j。填空2:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填k。填空3:处理之后的字符串存放到p中,最后返回p的首地址即可,所以应填p。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,当给指定精度的变量eps输入0.0005时,应输出Pi=3.140578。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includedoublefun(doubleeps){doubles,t;intn=1;s=0.0;/*********found*********/t=0;while(t>eps){s+=t;t=t*n/(2*n+1);n++;}/*********found*********/return(s);}voidmain(){doub2ex;printf("\nPleaseenteraprecision:");scarlf("%lf",&x);printf("\nPi=%lf\n",fun(x));}标准答案:(1)t=1.0;(2)return(s*2);知识点解析:该题中,首先检查变量数据类型前后是否一致,因为变量t定义为double型,所以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回return(s*2);。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是查找X在s所指数组中下标的位置,并作为函数值返回,若x不存在,则返回一1。注意:部分源程序在文件PROGl.C文件中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#defineN15voidNONO();intfun(int*s,intx){}main(){inta[N]={29,13,5,22,10,9,3,18,22,25,14,15,2,7r27},i,x,index;printf("a数组中的数据:\n");for(i=0;i标准答案:intfun(int*s,intx){inti;for(i=0;i知识点解析:要找出数组中指定数据的下标,首先定义变量i用于存放数组下标,然后使用循环语句对数组进行遍历,依次取出一个数组元素与指定的数进行比较,若相等,则返回该元素的下标,否则继续判断下一个元素,直到数组结束。若数组结束时仍没有找到与指定数相等的元素,则返回一1。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:151注意:错误的语句在//*****error******的下面,修改该语句即可。#include//*****error******enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat,//*****error******}MyEnum;StructStruct{//*****error******intFri,intSun;};voidmain(){inti=Mon;MyEnumt=Fri;StructStr1;Str1.Fri=Mon;cout<标准答案:(1)enumMyEnum(2)},(3)intFri;知识点解析:(1)第一标识下声明枚举类型,声明枚举类型的一般形式为:“enum<枚举类型名>{<枚举常量列表>};”,程序当中把枚举类型名MyEnum放到枚举声明后面,显然不符合枚举类型声明格式,因此第1个标识下应改成“enumMyEnum”。(2)由(1)的分析可知,第2个标识下也不符合枚举类型声明格式,应以“;”结束,即第2个标识下应改为“};”。(3)第3标识处声明结构体,结构体定义的一般形式为:struct<结构体名>{<成员列表>}<变量名列表>;结构体中成员列表中各个元素是不同的变量,变量之间应以分号隔开,而不是以逗号隔开,因此第3个标识下应改为为“intFri;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数factor(int*des,int&length,intn)实现的功能是:将n所有因数存放到des中,通过length引用返回因数的个数,比如fator(a,length,20)执行后,则a:{1,2,4,5,10,20),length=6。注意:只能补充函数factor(),请勿改动其他部分的内容。#include#defineMAXNLEN100voidfactor(int*des,int&length,intn){}voidmain(){inta[MAXNLEN],

温馨提示

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

评论

0/150

提交评论