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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷6(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:1,2,3,4,5,注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********3********的下面。#include<iostream.h>ClassTestClass{//********error********TestClass(inti){m_i=i;}voidprint(){cout<<++m_i<<’,’;}public:intm_i;};intmain(){//********error********inti();TestClassdata(0);while(i>5){//********error********i++jdata.print();}cout<<endl;return0;}标准答案:(1)public:TestClass(inti)(2)inti(10);(3)i--;知识点解析:(1)打开moid1.cpp调试程序,显示错误提示为第一标识下“modil.cpp(20):errorC2248:’TestClass::TestClass’:cannotaccessprivatememberdeclaredinclass’TestClass’”,提示类TestClass中的构造函数TestClass被定义为私有的,无法获得,所以这里应该是public,即“public:TestClass(inti)”。(2)题目中要求输出结果为1,2,3,4,5,即循环5次。第三个表示while循环条件是i大于5就进行循环。“inti();”应该实现变量i的初始化,题干中要求不能删除i初始化中的括号,所以在括号中添加i的初始值。大于5且循环5次,所以i的初始值为10,而while循环中对i的操作应该是i--,这样第二个和第三个标示下应该是“inti(10);”和“i--;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请实现函数fun(doubleb[],intlen)的如下功能:(1)b[]是一个数组,长度为len;(2)b[0]=0,b[1]=1;(3)b[i+2]=b[i]+b[i+1];注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include<iostream>voidfun(doubleb[],intlen){}voidmain(){doubleb[128];fun(b,128);for(inti=0;i<128;i++){std::cout<<b[i]<<’’;if(i%6==5)std::cout<<std::endl;}return;}标准答案:if(len>0)//最小值位置b[0]=0;//赋值第一个元素if(len>1)b[1]=1;//赋值第二个元素for(inti=2;i<len;i++)b[i]=b[i-1]+b[i-2];//将两个元素之和赋予当前元素知识点解析:(1)判断数组长度,如果存在第一个元素,那么将第一个元素赋值为0,即b[0]=0;。(2)然后再判断数组长度,如果存在第二个元素,那么将第二个元素赋值为1,即b[1]=1;。(3)最后从第三个元素到数组最后一个元素,赋值b[i]=b[i-1]+b[i-2];。三、综合应用题(本题共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与其他函数中的任何内容。#include<iostream.h>classDate{public://********2********Date(inty,intm,intd){//********3********}voidprint:()const;private://datamember//********1********};voidDate::print()const{//********4********}intmain(){Datenational_clay(1949,3.0,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<<year<<"-"<<month<<"-"<<day<<endl;知识点解析:(1)题目1要求“定义私有数据成员year、month和day,分别用于表示年、月和日,它们都是int型的数据”。在C++程序的private区域中添加变量year、month、day的定义,即在第1个标识下添加“intyear,month,day;”。(2)题目2要求“完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1”。在C++中,构造函数是一种特殊的成员函数,它的名字与类同名。在Date构造函数体内,根据题目要求,设置变量默认值“year=1,month=1,day=1”,即:“Date(){year=1;month=1;day=1;}”。(3)题目3要求“完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值。”在构造函数Date(inty,intm,intd)函数体内,即标识3下,添加赋值语句,将y,m,d赋值给year,month,day,即“year=y;month=m;day=d;”。(4)题目4要求“完成成员函数print()的类外定义,使其以“年—月—日”的格式将Date对象的值输出到屏幕上”。在程序中的voidDate::print()const函数体内,标识4下,添加输出语句。根据cout输出格式,实现题目中的输出要求,即“cout<<yrear<<"-"<<month<<"-"<<day<<endl;”。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共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=nun;(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或使用【答题】菜单打开考生文件夹pmj2下的工程pmj2。其中有类Point(“点”)、lteetangle(“矩形”)和Circle(“圆”)的定义。在程序所使用的平面坐标系统中,x轴的正方向是水平向右的,y轴的正方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是:一一圆形一一一一圆心=(3,2)半径=1面积=3.14159一一外切矩形一一左上角=(2,1)右下角=(4,3)面积=4注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found*****”。#include#includeusingnamespaoestd;//平面坐标中的点//本题坐标系统中,x轴的正方向水平向右,y轴的正方向竖直向下。classPoint:{public:Point(doubleX=0.0,doubley=0.0):x一(x),y一(y){)doublegetX()const{returnx_;)doublegetY()const{returny_;)voidsetX(doublex){x_=x;)voidsetY(doubley){y_=y;)private:doublex_;//x坐标doubley_;//y坐标};//矩形classRectangle{public:Rectangle(PointP,intw,inth):point(p),width(w),height(h){}doublearea()const//矩形面积{returnwidth*height;}PointtopLeft()const//左上角顶点{returnpoint;}PointbottomRight()const//右下角顶点(注:Y轴正方向竖直向下){//**********found**********returnPoint(______);}private:Pointpoint;//左上角顶点doublewidth;//水平边长度doubleheight;//垂直边长度};//圆形classCircle{public:Circle(PointP,doubler):center(p),radius(r){)Rectangle.boundingBox()const;//外切矩形doublearea()const//圆形面积{//**********found**********returnPI*______;}public:staticconstdoublePI;//圆周率private:Pointcenter;//圆心doubleradius;//半径};constdoubleCircle::PI=3.14159;RectangleCircle::boundingBOx()const{//**********found**********Pointpt(_________);intw,h;//**********found**********W=h=______;returnRectangle(pt,W,h);}intmain(){PointP(3,2);Circlec(p,1);cout<<”一一圆形一一一一一\nn;cout<<”圆心=(”<标准答案:(1)point.getX()+width,point.getY()+height(2)radius*radius(3)center.getX()一radius,center.getY()一radius(4)2*radius知识点解析:(1)主要考查考生对成员函数的掌握,程序要求返回右下角顶点,该点的x坐标为左上角顶点的x坐标加上width,该点的y坐标为左上角顶点y坐标加上height,即returnPoint(point.getX()+width,point.getY()+height);。(2)主要考查考生对成员函数的掌握,程序要求计算圆形面积,也就是返回圆面积,即returnPI*radius*radius;。(3)主要考查考生对成员函数的掌握,首先看函数声明:RectangleCircle::boundingBox()const,可知该函数要返回的是一个Rectangle类型,即要返回的是圆的外切矩形。再看Rectangle类的构造函数Rectangle(PointP,intW,inth),由此可知,空格处要定义的点pt为左上角点,即Pointpt(center.getX()一radius,center.getY()一radius);。(4)由函数声明和Rectangle类的构造函数可知,W和h应该为直径,即W=h=2*radius;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹pros3下的工程prog3,其中包含了类P0lynomial(“多项式”)的定义。形如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次项,其系数就保存在coef[i]中。成员函数getValue计算多项式的值,多项式中x的值是由参数指定的。请补充完成文件Polynomial.cpp中成员函数getValue的定义。此程序的正确输出结果应为:Valueofplwhenx=2.0:59.8Valueofp2whenx=3.0:226.8注意:只在函数getValue的“//**********333**********”和“//**********666**********”之间填入若干语句,不要改动程序中的其他内容。//Polynomiac.h#includeusingnamespacestd;class,Polynomial{//“多项式”类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*cogf;inthum_of_terms;};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大于零时,做相乘操作,即完成该项的乘方动作{x_value*=x;j--;}value+=coef[i]=*Xvalue;//把i项的乘方结果乘以该项系数后加进value中}知识点解析:题目要求成员函数getVahe计算多项式的值,多项式中x的值由参数指定,多项式的值value为各次项的累加和。由类的定义可知数组coef中存储的是各次项的系数,这里使用for循环来完成题目要求,当次项为0时,value=coef[0]。当次项为1时,value=coef[1]*x+coef[0]。依次类推直到X的最高次数。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。例如,有9个正整数:1572387582145按升序排列时的中间数为:8处理后主函数中输出的数列为:8882387882145请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#defiheN9intfun(intx[]){inti,j,k,t,mid,b[N];for(i=0;ib[j])k=j;if(k!=i){/*********found*********/t=b[i];b[i]=【1】;b[k]=t;}}/*********found*********/mid=b[【2】];for(i=0;i标准答案:(1)b[k](2)4或N/2(3)<知识点解析:数组中的9个数任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,故不必对整个数组进行排序,只需要排列出数组的前半部分。找到中间数后,遍历原数组,将小于巾间数的元素进行替换。填空1:利用选择算法排序,先指定一个元素为最小,用这个数与其后的所有数进行比较,若找小于此数,则进行替换。此处考查替换操作。填空2:元素mid存放中间位置的数,数组长度为9,因此中间元素数为b[4]。填空3:遍历数组,当元素小于中间位置的数(即mid)时,进行替换。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includefun(intn,int*a){inti,j,p,t;for(j=0;ja[i])/*********found*********/t=i;if(p!=j){t=a[j];a[j]=a[p];a[p]=t;}}}putarr(intn,int*z){inti;for(i=1;i<=n;i++,z++){printf("%4d",*z);if(!(i%10))printf("\n");}printf("\n");}voidmain(){intaa[20]={9,3,0,4,1,2,5,6,8,10,7),n=11;system("CLS");printf("\nBeforesorting%dnumbers:\n",n);putarr(n,aa);fun(n,aa);printf("\nAftersorting%dnumbers:\n",n);putarr(n,aa);}标准答案:(1)for(i=j+1;i知识点解析:该程序是对n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第1个元素的位置;再找出次小项,置于第2个元素的位置;之后顺次处理后续元素。(1)数组的长度为n,所以最后一个元素的下标值为n一1,i的取值范围应该包括此下标值。(2)p是中间变量,存放值较小的元素下标。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为6,980。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#includeintfun(int*s,intt,int*k){}voidmain(){FILE*wf;inta[10]={876,675,896,101,301,401,980,431,451,777},k;system("CLS");fun(a,10,&k);printf("%d,%d\n",k,a[k]);/***************************/wf=fopen("out.clat","w");fprintf(wf,"%d,%d",k,a[k]);fctose(wf);/***************************/}标准答案:intfun(int*s,intt,int*k){inti;*k=0;/*k所指的数是数组的下标值*/for(i=0;i知识点解析:本题中直接使用指针变量k,使用时要注意对k进行指针运算。程序一开始让k指向数组中的第一个元素,即木k=0。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:CMyObject,intheconstmtor~CMyObject,inthedestrutor注意:错误的语句在//*****error******的下面,修改该语句即可。#includeclassCMyObject{//*****error******//*****error******CMyObject{cout<<"CMyObject,intheconstrutor"<标准答案:(1)添加语句:public:(2)CMyObject(){cout<<"CMyObject,intheconstrutor"<知识点解析:(1)构造函数和析构函数均为公有函数,而在C++中默认的访问属性为私有(private),因此构造函数和析构函数必须说明为public,即第1个标识下应添加“public:”。(2)函数定义中在函数名后均有一对括号表示函数声明,因此第2个标识下应改为“CMyObject(){cout<<"CMyObject.intheconstrutor"<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使输入某年某月某日,可判断这一天是这一年的第几天。程序分析:以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天(特殊情况:闰年输入月份大于3时需考虑多加一天)。注意:只能补充函数func(intyear,intmonth.intday),请勿改动其他部分的内容。#includeintfunc(intyear,intmonth,intday){}voidmain(){cout<标准答案:intsum;intleapyear;switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;sase4:sum=90;break;case5:sum=120;break;sase6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:cout<<"dataerror"<2)sum++;returnsum;知识点解析:(1)为方便起见,先统计正常年份下,每个月的前面有多少天,可以用switch方式查询,然后再加上本月的日子,很快便得到了这一天是属于这一年的第几天。(2)闰年的判断方法为:if(year%400==0‖(year%4=0&&year%100!=0)),if语句为真则为闰年,二月之后的日期后需要加一天。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成类MyArrayClass的构造函数,申请数组的大小,请在注释//********1********后添加适当的语句。(2)完成类MyArrayClass的析构函数,释放数组,请在注释//********2********后添加适当的语句。(3)完成重载运算符“[]”,用来获得指定下标的数据,请在注释//********3********后添加适当的语句。(4)完成函数SetElement(),用来设置指定下标的数据。如果数据没有超出范围,则设置数据,并返回1,否则返回0,请在注释//********4********后添加适当的语句。注意:除在指定的位置添加语句外,并不要更改程序中的其他语句。#includetemplateclassMyArrayClass{private:T*data;intlength;public:MyArrayClass(intlen){length=fen;//********1********}~MyArrayClass(){//********2********}T&operator[](inti){//********3********}boolSetElement(inti,Tt){//********4********if(){data[i]=t;returntrue;}returnfalse;}};intmain(){MyArrayClassobj(5);obj[3]=1;cout<标准答案:(1)添加语句:data=newT[len];(2)添加语句:delete[]data;(3)添加语句:returndata[i];(4)将“if()”补充完整为:if(i知识点解析:(1)构造函数完成成员变量的初始化,在MyArrayClass(intmen)函数中申请数组的大小的内存空间,应该用new申请动态存储空间,Flew返回一个指向其操作数类型变量的指针,第1个标识下即将new返回的指针赋值给data指针,因此第1个标识下应添加“data=newT[len];”。(2)析构函数完成资源的释放,删除由new申请的内存资源,因此第2个标识下应添加“delete[]data;”。(3)T&operator[](inti)函数重载运算符“[]”,返回指定下标的数据,因此第3个标识下应添加“returndata[i];”。(4)SetElement(inti,Tt)是设置指定下标的数据,数组下标不能超限,函数体中的if()用来判断下标位置是否超限,因此第4个标识下应添加“if(i国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,平均值为30.500000。移动后的输出为:46、32、40、45、48、30、6、17、15、260请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN10doublefun(double*x){inti,j;doubles,av,y[N];s=0;for(i=0;iav){/*********found*********/y[【2】]=x[i];x[i]=一1;}for(i=0;i标准答案:(1)s/N(2)j++(3)一1知识点解析:填空1:由原程序可知,av代表的是平均值,而平均值的求法是所有数的总和除以数的个数,因而本空应该填写s/N。填空2:y数组代表暂时存放x数组,if(x[i]>av)表达的是当x数组中的数大于平均值时,应该把这些大于平均值的数放在y数组的前半部分,因而此空应该填y[j++]。填空3:此空表明当x[i]不等于什么时,x[i]中的数要赋值给y数组,由题意可知此空只能填写一1。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:比较两个字符串,将长的字符串的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODII.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include/*********found*********/doublefun(ohar*s,char*t){ints1=0,t1=0;char*ss,*tt,ss=s;tt=t;while(*ss){s1++;/*********found*********/(*ss)++;}while(*tt){t1++;/*********found*********/(*tt)++;}if(t1>s1)returnt;elSereturns;}voidmain(){chara[80],b[80];printf("\nEnterastring:");gets(a);printf("\nEnterastringagain:");gets(b);printf("\nThelongeris:\n\n%s\n",fun(a,b));}标准答案:(1)char*fun(char*s,char*t)(2)ss++;(3)tt++;知识点解析:(1)在主函数的输出语句中,函数fun是以字符串格式输出的,所以定义函数时应为char*fun(char*s,char*t)。(2)和(3)这里是地址加1,而不是内容加1,所以改为ss++和tt++。三、综合应用题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若S所指字符串的内容为“ABCDEFGl2345”,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];printf("\nPleaseenterstrings:");Scanf("%s",s);fun(,t);printf("\nTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句应为:if(i%2!=O&&s[i]%2!=0)。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:TestClass1TestClass2注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。#include<10Stream.h>#include<assert.h>structTestClass0{//********error********virtualvoidfun();};classTestClass1:publicTestClass0{voidfun(){cout<<"TestClass1"<<endl;}};classTestClass2:publicTestClass0{voidfun(){cout<<"TestClass2"<<endl;}};voidmain(){TestClass*p;TestClass1obj1;TestClass2obj2;//********error********p=*obj1;p->fun();//********error********p=*obj2;p->fun();return;}标准答案:(1)virtualvoidfun()=0;(2)P=&obj1;(3)p=&obj2;知识点解析:(1)如果在基类中并不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数fun()应该是纯虚函数,也就是声明虚函数的时候初始化为0的函数。即第1个标识下的“virtualvoidfun()=0;”。(2)第2个标识下的P为指针变量,将对象obj1赋值给p,实际上是p指向对象obj1的地址,所以“p=*obj1;”修改为“p=&0bi1;”。(3)第3个标识下的“p=*obj2;”语句同(2),修改为“p:&obj2;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intN[4])的功能是用4个数字,组成互不相同且无重复数字的三位数,并将满足所有条件的数字输出到屏幕,并且每输出一个三位数字就换一行。程序分析:可填在百位、十位、个位的数字都是1、2、3、0。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0则也去掉。#include<iostream.h>voidfun(intN[4]){}intmain(){intN[4]={1,2,3,0};fun(N);return0;}标准答案:inti,j,k;for(i=0;i<4;i++)//百位循环{for(j=0;j<4;j++)//十位循环for(k=0;k<4;k++)//个位循环{if(i!=j&&j!=k&&k!:i&&N[i]!=0)//当三位数不同,并且百位不为0{cout<<N[i]<<N[j]<<N[k]<<endl;//输出这三位数组成的数字}}}知识点解析:(1)利用三层循环,对要三位数字是否相同进行判断。(2)如果三位数不同,并且百位不为0。那么依次输出这三位数,即为三位数组成的数字。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)基类Person完成打印功能,定义其中的打印函数为虚函数,请在注释//********1********后添加适当的语句。(2)类Man继承于Person,在构造函数中设置性别为1,请在注释//********2********后添加适当的语句。(3)类Woman继承于Person,在构造函数中设置性别为0,请在注释//********3********后添加适当的语句。(4)实现函数fun(),用于传递不同的类型,打印出性别,请在注释//********4********后添加适当的语句。输出的内容如下:Sex=ManSex=Woman注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>classPerson{public://********1********voidprint(){};intsex;};classMan:publicPerson{public:Man(){//********2********}voidprint(){cout<<"Man"<<endl;};};classWoman:publicPerson{public:Woman(){//********3********}voidprint(){cout<<"Woman"<<endl;};};//********4********{cout<<"Sex=";p.print();}intmain(){Manm;fun(m);Womann;fun(n);return0;}标准答案:(1)将“voidprint(){};”补充完整为:virtualvoidprint(){};(2)添加语句:sex=1;(3)添加语句:sex=0;(4)添加语句:voidfun(Person&p)知识点解析:(1)题目1要求“基类Person完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以第1个标识下的“voidprint(){};”语句修改为“virtualvoidprint(){};”。(2)题目2要求“类Man继承于Person,在构造函数中设置性别为1”。基类Person中变量sex是用来存放性别的,Man继承Person,所以Man中性别的变量可以使用基类中的sex变量,设置性别为1,即“sex=1;”。(3)题目3要求“类Woman继承于Person,在构造函数中设置性别为0”。同(2),在第三个标识下添加“sex=0;”。(4)题目4要求“实现函数fun(),用于传递不同的类型.打印出性别”。根据“p.print();”语句知道,fun()函数的形参为指针p,由于它调用了基类erson中的成员函数print(),所以p的基类为Person,即添加函数fun()的定义为“voidfun(Person&p)”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中包含程序文件main.cpp,其中有ElectricFan(“电风扇”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:品牌:清风牌,电源:关,风速:0品牌:清风牌,电源:开,风速:3品牌:清风牌,电源:关,风速:0注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。1#inclUde2usingnamespacestd;3classElectricFan{//“电扇”类4char:lcbrand;5intintensity;//风速:0-关机.1-弱,2-中,3-强6public:7ElectricFan(constchar*thebrand):intensity(0){8brand=newchar[strlen(the_brand)+1];9strcpy(brand,the_brand);10}11~ElectricFan(){delete[]brand;}12//ERROR**********found**********13constchar*theBrand()const{return*brand;}//返回电扇品牌14inttheIntensity()const{returnintensity;}15//返回风速16boolisOn()const{returnintensity>0;}17//返回电源开关状态18//ERROR**********found**********19voidturnOff(){intensity=1;}//关电扇20voidset工ntensity(intinten){21//开电扇并设置风速22//ERROR**********found**********23if(intensity>=1&&intensity<=3)24intensity=inten;25}26voidshow(){27cout<<"品牌:"<<theBrand()<<"牌"28<<",电源:"<<(isOn()?"开":"关")29<<",风速:"<标准答案:(1)constchar*theBrand()const{retumbrand;}//返回电扇品牌(2)voidturnOff(){intensity=0;}//关电扇(3)if(inten>=1&&inten<=3)intensity=inten;知识点解析:(1)主要考查考生对指针的掌握情况,因为brand是一个动态指针,*brand表示字符串的首个字符,brand表示动态数组,这里要返回动态数组存储的品牌名称。(2)主要考查考生对成员函数的掌握情况,根据题目中类的定义中私有成员的定义:intintensity;//风速:0-关机,1-弱,2-中,3-强,可知本函数要关电扇,因此在这里in-tensity=0;。(3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速,可知if语句里要判断的应该是形参inten而不是intensity。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中在编辑窗口内显示的主程序文件中定义有类Base和Derived,以及主函数main。程序文本中位于每行“//****found****”下面的一行内有一处或多处下画线标记,请在每个下画线标记处填写合适的内容.并删除下画线标记。经修改后运行程序,得到的输出应为:sum=55。注意:只在横线处填写适当的代码,不要改动程序中的其他内容。1#include2usingnamespacestd;3classBase4{5public:6Base(intm1,intm2){7mem1=m1;mem2=m2;8}9intsum(){returnmeml+mem2;)10private:11intmeml,mem2;//基类的数据成员12};1314//派生类Derived从基类Base公有继承15//**********found**********16classDerived:17{18public:19//构造函数声明20Derived(intm1,intm2,intm3);21//sum函数定义,要求返回mem1、mem2和mem3之和22//**********found**********23intsum(){return______+mem3;}private:24intmem3;//派生类本身的数据成员25};2627//构造函数的类外定义,要求由m1和m2分别初始化mem1和mem2.由m3初始化mem328//**********found**********29______Derived(intm1,intm2,intm3):30//**********found**********31________,mem3(m3){)32intmain(){33Basea(4,6);34Derivedb(10,15,20);35intsum=a.sum()+b.sum();36cout<<"sum="<标准答案:(1)publicBase(2)Base::sum()(3)Derived::(4)Base(m1,m2)知识点解析:(1)主要考查考生对公有继承的掌握情况,根据题目要求:派生类Derived从基类Base公有继承,因此这里使用public来公有继承。(2)主要考查考生对成员函数的掌握情况,根据题目对sum函数的要求:sum函数定义,要求返回mem1、mem2和mem3之和,因此这里直接调用基类的sum函数,再加上mem3就满足题目要求。(3)主要考查考生对构造函数的掌握情况,由于Derived的构造函数在类外定义,因此要加上类名和作用域符,即Derived::。(4)主要考查考生对构造函数的掌握情况,因为Derived是Base类的派生类,所以其构造函数要使用成员列表初始化先给Base初始化。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程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文件,并且在本程序调用。1//DataList.h2#include3usingnamespacestd;4classDataList{//数据表类5intlen;6double*d;7public:8DataList(intlen,doubledata[]=NULL);9-DataList(){delete[]d;}10intlength()const{returnlen;}//数据表长度(即数据元素的个数)11doublegetElement(inti)const{re-iturnd[i];}12voidsort();//数据表排序13voidshow()const;//显示数据表14};15voidwriteToFile(char*,constDataList&);1//main.cpp2#include"DataList.h"34DataList::DataList(intfen,doubledata[]):len(fen){5d=newdouble[len];6for(inti=0;i标准答案:1for(inti=0;id[j])//d[i]和d[j]比较认,如果大于,就d[i]和d[j]值交换4{5inttemp=d[i];//把临时整型变量temp赋值为d[i]6d[i]=d[j];//把d[j]赋值给d[i]7d[j]=temp;//把temp值赋给d[j]8}知识点解析:本题使用最简单的冒泡排序算法,首先明确要排序的动态数组d,其长度为len,在此可以使用两个下标i和j相比较,当d[i]>d[j]时,数组内的值利用中间变量temp进行交换。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,其中:有点类Point和线段类Line和主函数main的定义,程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出应为:p1=(8,4)p2=(3,5)注意:只修改两个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#inclucle<iostream>#include<cmath>usingnamespacestd;classPoint{doublex,y;public:Point(doublex=0.0,doubley=0.0)//ERROR*******found*******{x=x;y=y;}doublegetX()const{returnx;}doublegetY()const{returny;}//ERROR*******found*******voidshow()const{cout<<’(’<<x<<’,’<<y<<’)’}};classLine{Point;p1,p2;public:Line(Point;pt1,Pointpt2)//ERROR*******found*******{pt1=p1;pt2=p2;}PointgetP1()const{returnp1;}PointgetP2()const{returnp2;}};intmain(){Lineline(Point:(8,4),Point(3,5));cout<<"p1=";line.getP1().show();cout<<"p2=";line.getP2().show();tout<<endl;return0;}标准答案:(1):x(x),y(y){}或{this->x=x,this->y=y;}(2)voidshow()const{eout<<’(’<<x<<’,’<<y<<’)’;}(3):p1(pt1),p2(pt2){}或{p1=pt1;p2=pt2}知识点解析:(1)主要考查考生对构造函数的掌握,因为形参名和私有成员名称一样,因此不能直接赋值,在这里使用成员列表初始化,也可以使用this指针赋值。(2)主要考查考生对语句基本语法的掌握,根据语句:voidshow()const{tout<<’(’<<x<<’,’<<y<<’)’}。可看出函数体内并没有“;”作为tout语句的结束符,因此程序错误。(3)主要考查考生对构造函数的掌握,形参是pt1和pt2,这里写反了,也可以他用成员列太表初始化法,可以避免这种错误。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Mouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>usingnamespacestd;enumcategory{ENPTY,ELEPHANT,NOUSE);char*output[]={"ENPTY","ELEPHANT","NOUSE"};classMarrlitlal{public:Nammal(char*str){//*******found*******name=new_______strcpy(name,str);}virtualchar*WhoAmI()=0;virtual~Nammal(){delete[]name;}voidPrint(){cout<<WhoAmI()<<endl;}private:char*name;};classElephant:publicNammal{public://*******found*******Elephant(char*str):_______{}char*WhoAmI(){returnoutput[ELEPHANT];}};classNouse:publicNammal{public:Mouse(char*str):Mammal(str){}//*******found*******char*WhoAml(){_______}};intmain(){//*******found*******Mammal*pm=new_______("Huanhuan");pm->Print:();deletepm;pm=newNouse("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类的WhoAmI函数,因此给指针pm分配Elephant类空间。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArrayv1={1,2,3,4,5}ValArrayv2={2,2,2,2,2}要求:补充编制的内容写在“//*******333*******”与“//********666********”之间。不要修改程序的其他部分。注意:相关文件包括:main.cpp、ValArray.h。程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//ValArray.h#include<iostream>usingnamespacestd;classValArray{int*v;intsize;public:ValArray(constint*p,intn):size(n){v=newint[size];for(inti=0;i<Size;i++)v[i]=p[i];}ValArray(constValArray&other);~ValArray(){delete[]v;}voidsetElement(inti,intval){v[i]=val;}voidprint(ostream&out)const{out<<’{’;for(inti=0;i<size-1;i++)out<<v[i]<<",";out<<v[size-1]<<’}’;}};voidwriteToFile(constchar*);//main.cpp#include"ValArray.h"ValArray::ValArray(constValArray&other){//********333********//********666********}intmain(){constinta[]={1,2,3,4,5};ValArrayv1(a,5);ValArrayv2(v1);for(inti=0;i<5;i++)v2.setElement(i,2);cout<<"ValArrayv1=";v1.print(cout);cout<<endl;cout<<"ValArrayv2=";v2.print(cout);cout<<endl;writeToFile("");return0;}标准答案:size=other.size;//把对象数组的大小赋值给sizev=newint[other.size];//根据对象数组的大小动态分配数组vfor(inti=0;i<size;++i)v[i]=other.v[i];//遍历整个对象的数组把值other.v[i]放到数组v中知识点解析:主要考查考生对复制构造函数的掌握。由函数名:ValArray::ValArrav(constValArray&other),知道要复制的对象是other,对由ValArray类的成员:int*v;intsize;知道要复制的内容是动态数组v及整型变量size。动态数组要使用new语句分配内存,最后利用for循环语句来完成复制过程。国家二级C++机试(操作题)模拟试卷

温馨提示

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

评论

0/150

提交评论