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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷10(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp。本程序要求输入一字符串,然后将其中的小写字母改变成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到界面。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。1#include<iostream.h>2voidmain()3{4inti=0;5charstr[120];6cout<<’’Enterastringendwith’?’.’’<<end1;7//********error********8cin.getline(str,120);9//********error********10while(str)11{12//********error********13if(str[i]>=’a’)14str[i]=str[i]-’a’+’A’;15i++;16}17cout<<str<<end1;18return;19}标准答案:(1)cin.getline(str,120,’?’);(2)while(str[i])(3)if(str[i]>=’a’&&str[i]<=’z’)知识点解析:同一英文字母的大写和小写形式的ASCII码值相差32,因此,要将小写字母转换为大写字母,只要将其对应的ASCII码值减去32即可,程序中给出的语句中,减去字符’a’的ASCII码再加上字符’A’的ASCII码正好是减去32。(1)题目中要求以输入字符“?”为结束,用于字符输入的流成员函数getline函数读入一行字符,格式cin.getline(字符数组,字符个数,终止标志字符),所以第1个标识下为“cin.getline(str,120,’?’):”。(2)第2个标识下的“while(str)”语句应该是判断字符串str中的每一个字符是否为尾符,若不是尾符在循环中判断每一个字符是否为小写,若为小写,转换。所以应该修改为“whilefstr[i])”。(3)第3个标识下的“if(str[i]>=’a’)”语句是判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于’a’,但是小写字符应该是’a’到’z’,所以修改为“if(str[i]>=’a’&&str[i]<=’z’)”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。完成函数fun(chaur*str,char*s)空出部分。函数fun(char*str,char*s)的功能是:将在字符串str中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串s中,s中字符按原字符串中字符的顺序排列。(注意0为偶数)例如:当str中的字符串为:’’abcdef’’时,s中的字符串应为:’’aaccee’’。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。1#include<iostream.h>2voidfun(char*str,char*s)3{45}6voidmain()7{8charstr[100],s[100];9cout<<’’P1easeenterstringstring:’’<<end1;10cin.getline(str,100);11fun(str,s);12cout<<’’ThereSUltis:’’<<s<<end1;13return;14}标准答案:1inti;2for(i=0;str[i]!=0;i++)//循环判断每一个字符3{4if(i%2==0)//判断字符串中下标为偶数位置5{6s[i]=str[i];7s[i+1]=str[i];8s[i+2]=’\0’;//新串添加尾符9}10}知识点解析:(1)该程序功能是找出在字符串中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串。它的解题思路,解题过程利用if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。(2)从己给部分源程序的main主函数开始入手,核心函数voidfun(char*str,char*s)中的str参数为输入的字符串,其中s为新串。(3)判断一个字符串中的某一字符下标i是否为偶数,可用“i%2==0”来判断。(4)对串str中各个字符串逐个进行考查,满足条件的字符就顺序放在新串s中,否则就不存放。(5)所有字符处理完后,记得在新串s的末尾加上结束符“’\0’”。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义私有成员变量year、month、day,分别表示年、月、日,类型为int。请在注释//********1********后添加适当的语句。(2)完成构造函数,分别给year、month、day赋值,请在注释//********2********后添加适当的语句。(3)完成重载符号“+=”的定义,请在注释//********3********后添加适当的语句。(4)完成print()打印函数,如2008年8月8日到屏幕和文件modi3.txt格式相同,请在注释//********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include<iostream.h>2#include<fstream>3#include<iomanip>4#include<cmath>5usingnamespacestd;6voidWriteFile(intc)7{8ofstreamout1;9out1.open(’’modi3.txt’’,ios_base::app);10out1<<c<<’’;11out1.close();12}13voidWriteFile(char*str)14{15ofstreamout1;16out1.open(’’modi3.txt’’,ios_base::app);17out1<<str;18out1.close();19}20voidClearFile()21{22ofstreamoutl;23out1.open(’’modi3.txt’’);24out1.close();25}26classDate27{28public:29Date(inty,intm,intd)30{31//********2********3233}34voidprint()const;35//********3********3637{38month+=m;39inti=month/12;40intj=month%12;41if(j==0)42{43year+=(i-1);44month=12;45}46else47{48year+=i;49month=j;50}51return*this;52}53private:54//********1********5556};57voidDate::print()const58{59//********4********6061WriteFile(year);62WriteFile(’’年’’);63WriteFile(month);64WriteFile(’’月’’);65WriteFile(day);66WriteFile(’’日’’);67}68intmain()69{70ClearFile();71DateOly_day(2008,8,8);72Oly_day+=3;73Oly_day.print();74return0;78}标准答案:(1)添加语句:intyear,month,day;(2)添加语句:year=y;month=m;day=d;(3)添加语句:Date&operator+=(intm)(4)添加语句:cout<<year<<’’年’’<<month<<’’月’’<<day<<’’日’’<<end1;知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类Date和函数print实现各种输出操作。(1)题目1要求“定义私有成员变量year、month、day”。在C++程序的private区域中添加变量year、month、day的定义,即在第1个标识下添加“intyear,month,day;”。(2)题目2要求“完成构造函数,分别给year、month、day赋值”。在程序中“Date(inty,intm,intd)”的构造函数中添加给year、month、day赋值的语句,即在第2个标识下添加“year=y;month=m;day=d;”。(3)题目3要求“完成重载符号“+=”的定义”。在C++中,运算符重载的定义方法是定义一个重载运算符的函数,格式为函数operator+重载运算符号+,所以这里补全“Date&operator+=(intm)”。(4)题目4要求“完成函数print()打印函数”。在C++中的print()函数中补全其打印功能,即在第四个标识下添加“cout<<year<<’’年’’<<month<<’’月’’<<day<<’’日’’<<end1;”。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:151注意:错误的语句在//******error******的下面,修改该语句即可。1#include<iostream.h>2//******error******3enum4{5Sun,6Mon,7Tue,8Wed,9Thu,10Fri,11Sat,12//******error******13}MyEnum;14structstruct15{16//******error******17intFri,18intSun;19};20voidmain()21{22inti=Mon;23MyEnumt=Fri;24Structstr1;25str1.Fri=Monj26cout<<i<<end1;27cout<<t<<end1;28cout<<str1.Fri<<end1;29}标准答案:(1)enumMyEnum(2)};(3)intFri;知识点解析:程序当中定义了一个结构体和枚举类型,结构体含有两个整型变量,枚举类型含有7个枚举元素,7个枚举元素的值从0变化至6,即Sun=0,Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat=6。(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(),请勿改动其他部分的内容。1#include<iostream.h>2#defineMAXNLEN1003voidfactor(int*des,int&length,intn)4{56}7voidmain()8{9inta[MAXNLEN],length;10intn=20;11factor(a,length,n);12for(inti=0,i<length;i++)13{14cout<<a[i]<<’’’’;15}16cout<<end1;17return,18}标准答案:1length=0;2for(inti=1;i<=n;i++)3{4if(n%i==0)//判断是否n的因数5{6des[length]=i;7length++;8}9}知识点解析:函数factor(int*des,int&length,intn)实现的功能是将n所有因数存放到des中,通过length引用返回因数的个数,求因数可采用取余数的方法,如果两数相除余数为0则说明除数是被除数的因数。(1)找到n的每一个因数可采用循环方法,循环变量从1开始到n,逐个取n和循环变量的余数。(2)如果余数为0说明是n的因数,添加到des中,参数length是采用的引用传递方式,形参的改变会影响实参,因此可直接将length的值加1表示des中元素个数加1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义类的私有变量a、b,请在注释//********1********后添加适当的语句。(2)完成类的构造函数,对变量a、b赋值,缺省两个变量值为1,在注释//********2********之后添加语句。(3)完成打印函数display(),打印出“a*b=c”格式的一个乘法算式,在注释//********3********之后添加语句。(4)补充主函数,使得打印9×9的乘法口诀。在注释//********4********后添加语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2classCMyFormula3{4private:5//********1********67public:8//********2********910{11this->a=a;12this->b=b;13}14voidset(intx,inty)15{16a=x;17b=y;18}19voiddisplay()20{21//********3********2223}24};25intmain()26{27CMyFormulaformular(1,1),28for(inti=l,i<=9;i++)29{30//********4********31for(intj-1j++)32{33formular.set(j,i};34formular.display();35cout<<’’’’;36}37cout<<end1;38}39return0;40}标准答案:(1)添加语句:inta,b;(2)添加语句:CMyFormula(inta=1,intb=1)(3)添加语句:cout<<a<<’*’<<b<<’=’<<a*b;(4)将“for(intj=1;j++)”补充完整为:for(intj=1;j<=1;j++)知识点解析:程序当中定义了类CMyFormula,含有a和b两个成员变量,一个构造函数,改变成员变量a和b的值得set(intx,inty)函数,打印a和b的乘积的display()函数。在主函数中定义了一个CMyFormula对象,然后不断改变该对象的a和b的值,然后调用display()显示,如此完成打印9×9的乘法口诀。(1)第1个标识下完成CMyFormula类的私有变量a、b的定义,从函数set(intx,inty)的参数类型可以看出a和b均为int型变量,故第1个标识下应添加“inta,b;”。(2)第2个标识下添加构造函数声明,完成对变量a、b赋值,该构造有两个参数a和b,且a和b缺省值为l,因此第2个标识下应添加“CMyFormula(inta=1,intb=1)”。(3)打印函数display()在屏幕上打印出“a*b=c”格式的一个乘法算式,因此第3个标识下应添加“cout<<a<<’*’<<b<<’=’<<a*b;”。(4)观察可知第4个标识下的for循环是死循环,i没有判断退出条件,会一直循环下去得不到想到的9×9的口诀表,外层循环变量i从1开始变化至9,循环9次,内部循环变量i应该从1变化到i,输出一行,i<=i,这样保证输出的是倒9×9口诀,因此第4个标识下应改为“for(intj=1;j<=i;j++)”。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正main()函数中的错误,使程序的输出结果如下:Constructor.Defaultconstructor.Areais12Areais0Areais12注意:错误的语句在//******error******的下面,修改该语句即可。1#include<iostream.h>2classCRectangle3{4private:5doublelength,width;6public:7CRectangle()8{9cout<<’’Defaultconstructor.\n’’;10}11CRectangle(double1,doubleW)12{13length=1;width=w;14cout<<"Constructo.\n’’;15}16voidSet(double1,doublew)17{181this->length=1;19this->width=w;20}21voidGetArea()22{23cout<<’’Areais’’<<length*width<<end1;24}25};26voidmain()27{28CRectangleRect1(3.0,4.0);29//******error******30CRectangleRect2(1);31//******error******32CRectangleRect3;33Rect1.GetArea();34//******error******35Rect2.Set(0);36Rect2.GetArea();37Rect3.GetArea();38}标准答案:(1)CRectangleRect2;(2)CRectangleRect3(Rect1);(3)Rect2.Set(0,0);知识点解析:程序中定义了类CRectangle,有length和width两个成员变量,两个构造函数,Set()成员函数和GetArea()成员函数,Set()成员函数可以改变length和width的值,GetArea()成员函数在屏幕上打印length和width的积。(1)构造函数CRectangle()不带有参数,CRectangle(double1,doublew)带有2个参数,在创建对象时会自动调用构造函数,但是参数必须匹配,第1个标识下定义Rect2对象时,有一个参数,而类CRectangle()中并没有重载一个参数的构造函数,编译后出错,因此第1标识下应改为“CRectangleRect2;”。(2)Rect3.GetArea()输出的结果和Rect1.GetArea()输出结果一致,因此对象Rect3和对象Rect1两者具有相同的length和width值,除定义Rect3对象之外没有改变Rect31的length和width值,因此Rect3成员变量的初始化是通过拷贝构造函数类实现的,即用Rect1对象去初始化Rect3,因此第2个标识下应改为“CRectangleRect3(Rect1);”。(3)Rect2.GetArea()的输出结果为0,说明Rect2的成员变量length和width值至少一个为0,而Set()函数必须有两个参数,这里Rect2.Set(0)参数不匹配,应改为“Reet2.Set(0,0);”或者“Rect2.Set(0,5)”,两个参数当中至少一个为0即可。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。补充函数convert(longs,long*str),使之从低位开始取出长整型变量s中奇数位上的数,依次存放在数str中。例如,当s中的数为:7654321时,str中的数为:7531。注意:请勿改动主函数。1#include<iostream.h>2voidconvert(longs,long*str)3{45}6voidmain()7{8longs,res;9cout<<’’Pleaseenters:’’<<end1;10cin>>s;11convert(s,&res);12cout<<’’Theresultis:’’<<res<<end1;13return;14}标准答案:1longs1=10;2*str=s%10;//先取个位数3while(s>0)4{5s=s/100;//每次除以100,6*str=s%10*s1+*str;//取除以100后的个位数,str增加1位7s1=s1*10;8}知识点解析:函数convert(longs,long*str)的功能是从低位开始取出长整型变量S中奇数位上的数,依次存放在str中,即取S的个位数、百位数、万位数……,先取个位数,然后每次取奇数位的数相当于s每次除以100后的个位数,因此可用循环来实现。(1)由审题分析可知,奇数位即为个位数、百位数、万位数……,取个位数比较简单,s%10便得到了个位数。获取百位数可由s/100后,再和10取余得到,同样万位数可由s/10000,再和1(取余得到,从百位数开始后面的奇数位都是在上次的基础上再除以100后再取余数,因此可利用循环。(2)在循环外先取S的个位数,然后进入循环,s=s/100,获取除以100的个位数方法为s%10,这个数是*str的高一位,乘以它所在*str中的位置的权值,然后和以前的值相加便得到这次*str值,如此循环,直到s为0为止。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数的定义,使得数据成员变量filename和contex为空,内容长度FileLength为0。请在注释//********1********后添加适当的语句。(2)完成析构函数,对contex内存的释放。请在注释//********2********后添加适当的语句。(3)完成WriteFile()函数,用来对contex内容进行设置填充内容,如果以前有内容,则删除以前的内容,重新填写。请在注释//********3********后添加适当的语句。(4)完成CopyFile()函数,完成将参数对象的contex的内容拷贝到当前的文件内容中,请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2classMyFileClass3{4private:5charfilename[64];6char*contex;7intFileLength;8public:9MyFileClass()10{11//********1********1213contex=NULL;14FileLength=0;15}16~MyFileClass()17{18if(FileLength)19//********2********2021}22voidOpenFile(char*str,intlen)23{24for(inti=0;i<fen;i++)25{26filename[i]=str[i];27}28filename[fen]=0;29FileLength=0;30if(contex)31{32delete[]contex;33contex=NULL;34}35}36voidWriteFlie(char*str,intlen)37{38if(contex!=NULL)39//********3********4041contex=newchar[len+1];42for(inti=0;i<len;i++)43contex[i]=str[i];44contex[len]=0;45FileLength=len;46}47voidCopyFile(MyFileClass&file)48{49//********4********5051}52voiddisplay()53{54cout<<contex<<end1;55}56};57intmain()58{59MyFileClassfile1,file2;60file1.OpenFile(’’txt1’’,4);61file2.OpenFile(’’txt2’’,4);62file1.WriteFlie(’’hello!’’,6);63file2.CopyFile(filel);64file1.display();65file2.display();66return0;67}标准答案:(1)添加语句:filename[0]=0;或filename[0]=NULL;(2)添加语句:delete[]contex;(3)添加语句:deletecontex;(4)添加语句:WrlteFlle(fi1e.contex,flle.FileLength);知识点解析:程序当中定义了类MyFileClass,包含3个成员变量,分别为filename、contex和FileLength,分别表示文件名、文件内容和文件长度,类MyFileClass有多个成员函数:构造函数、析构函数、OpenFile(char*str,intlen)、WriteFlie(char*str,intlen)、CopyFile(MyFileClass&file)和display(),OpenFile()用来给filename赋值,并清空contex内容;WriteFile()函数用来对contex内容进行设置填充内容;CopyFilefMyFileClass&fle)函数完成将参数file对象的contex内容拷贝到当前的文件内容中;display()将contex内容打印到屏幕上。(1)构造函数MyFileClass()完成类成员变量的初始化,将数据成员变量filename和contex为空,内容长度FileLength为0,因此第1个标识下应添加“filename[0]=0;”或“filename[0]=NULL;”。(2)析构函数用来释放一个对象,在对象删除前,用它来做一些清理工作,WriteFlie()函数会申请内存空间,因此在对象删除的时候必须将这些内存空间释放,这个工作可以放在析构函数中来处理,第2个标识下是释放由new申请的内存空间,因此第2个标识下应添加“delete[]contex;”。(3)WriteFile()函数首先对contex内容清空,第3个标识下应添加“deletecontex;”。(4)CopyFile(MyFileClass&file)函数完成将参数file对象的contex的内容拷贝到当前的文件内容中,可直接调用WriteFlie()函数,因此第4个标识下应添加“WriteFlie(file.contex,file.FileLength);”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,程序中位于每个“//ERROR*******found*******”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Name:SmithAge:21ID:99999CourseNum:12Record:970注意:只修改每个“//ERROR*******found*******”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classStudentInfo{protected://ERROR*******found*******charName;intAge;intID;intCourseNum;floatRecord;public:StudentInfo(char*name,intAge,intID,intcourseNum|floatrecord);//ERROR*******found*******void~StudentInfo(){}floatAverageRecord(){returnRecord/CourseNum;)voidshow()const{cout<<”Name:”<<Name<<”Age:”<<Age<<”ID:”<<ID<<”CourseNum:”<<CourseNum<<”Record:”<<Record<<endl;}};//ERROR*******found*******StudentInfoStudentInfo(char*Name,intAge,intID,intCourseNum,floatRecord){Name=name;Age=age;this一>ID=ID;CourseNum=courseNum;Record=record;}intmain(){StudentInfoSt(”Smith”,21,99999,12,970);st.show();return0;}标准答案:(1)char*Name;(2)~StudentInfo(){}(3)StudentInfo::StudentInfo(char*name,intage,intID,intcourseNum,floatrecord)知识点解析:(1)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是有效一个char型字符,因此要定义成char型指针。(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。(3)主要考查考生对构造函数定义的掌握,构造函数也要使用作用域符号’:.’。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,其中定义了vehicle类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:801501001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//*******found*******”。#include<iostream.h>classvehicle{private:intMaxSpeed;intWeight;public://*******found*******vehicle(intmaxspeed,intweight):________~vehicle()f};intgetMaxSpeed(){returnMaxSpeed;}intgetWeight(){returnWeight;}};//*******found*******classbicycle:________publicvehicle{private:intHeight;public:bicycle(intmaxspeed,intweight,intheight):vehicle(maxspeed,weight),Height(height){}intgetHeight(){returnHeight;};};//*******found*******clasSmotorcar:________publicvehicle{private:intSeatNum;public:motorcar(intmaxspeed,intweight,intseatnum):vehicle(maxspeed,weight),SeatNum(seatnum){)intgetSeatNum(){returnSeatNum;};};//*******found*******classmotorcycle:________{public:motorcycle(intmaxspeed,intweight,intheight):vehicle(maxspeed,weight),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,1){}};voidmain(){motorcyclea(80,150,100);cout<<a.getMaxSpeed()<<endl;cout<<a.getWeight()<<endl;cout<<a.getHeight()<<endl;cout<<a.getSeatNum()<<endl;}标准答案:(1)MaxSpeed(maxspeed),Weight(weight){}(2)virtual(3)virtual(4)publicbicycle,publicmotorcar知识点解析:(1)主要考查考生对构造函数的掌握,构造函数使用初始化列表来给私有成员MaxSpeed和Weight初始化。(2)主要考查考生对派生类的掌握,题目要求将vehicle作为虚基类,避免二义性问题。因此在这里添加virtual使vehicle成为虚基类。(3)主要考查考生对派生类的掌握,题目要求以motorcar和bicycle作为基类,再派生出motorcycle类。在主函数中可以看到motorcycle类的a调用getHeight函数和getSeatNum函数,由此可知这两个基类都是公有继承,因此得出语句:publicbicycle,publicmotorcar.三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数operator=,以实现深层复制。要求:补充编制的内容写在“//*******333*******”与“//*******666*******”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include<iostream>#include<string>usingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*P;//动态数组首地址CDeepCopy(int);~CDeepCopy()jCDeepCopy&operator。(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char*);//main.cpp#include”CDeepCopy.h”CDeepCopy::~CDeepCopy(){delete[]P;}CDeepCopy::CDeepCopy(intk){n=k;P=newint[n];}//构造函数实现CDeepC0py&CDeepCopy::operator=(constCDeepCopy&r)//赋值运算符函数实现{//*******333*******//*******666*******}intmain(){CDeepCopya(2),d(3);a.p[0]=1;d.p[0]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);a.p[0]=88;b=a;//调用赋值运算符函数cout<<b.p[0];//显示内层局部对象的数组元素}cout<<d.p[0];//显示d数组元素a.P[0]的值cout<<”dfadeaway;\n”;cout<<a.p[0];//显示a数组元素a.p[0]的值writeToFile(””);return0;}标准答案:n=r.n;//把对象r字符长度赋值给ndelete[]p;//删除动态数组p=newint[n];//给动态数组分配空间for(inti=0;i<n;i++)//遍历对象r中的数组p[i]=r.p[i];//赋值return*this;//返回被赋值的对象知识点解析:本题考查CDeepCopy类,其中涉及动态数组,构造函数,析构函数,运算符重载。运算符重载要先把类的定义弄清,其次要理解被重载的运算符的含义。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程包含一个源程序文件proj1.cpp。文件中将表示数组元素个数的常量Size定义为4,并用int类型对类模板进行了实例化。文件中位于每个注释“//ERROR***found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:1234注意:模板参数名用T。只修改注释“//ERROR********found********”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#includeusingnamespacestd;//将数组元素个数Size定义为4//ERROR********found********conStintsize;templateClassMyClass{public:Myclass(T*P){for(inti=0;i//ERROR********found********voidMyclass::Print(){for(inti=0;iobj{intArray);obj.Print();Cout<标准答案:(1)constintSize=4;(2)voidMyClass::Print()(3)MvClassobj(intArray);知识点解析:(1)主要考察考生对const变量的掌握,因为const变量不能修改,所以在定义的同时必须初始化。(2)主要考查考生对模板类的成员函数定义的掌握,因为MyClass类是模板类,所以在定义该函数时要加上模板标识符“”,即语句voidMvClass::Print()(3)主要考查考生对模板类构造函数的调用的理解,从上一条语句intintArray[Size]={1,2,3,4};中可以知道intArray为int型,因此定义obj时要使用,即MyClassobj(intArray):。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,此工程中包含一个程序文件main.cpp,其中有“部门”类Department和“职工”类Staff的定义,还有主函数main的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:改换办公室前:职工号:0789姓名:张三部门:人事处办公室:521职工号:0513姓名:李四部门:人事处办公室:521改换办公室后:职工号:0789姓名:张三部门:人事处办公室:311职工号:0513姓名:李四部门:人事处办公室:311注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#includeusingnamespacestd;classDepartment{//“部门”类public:Department(constchar*name,constchar*Office){strcpy(this->name,name);//********found********}constchar*getName()const{returnname;}//返回部门名称//********found********constchar*getOffice()const{____________}//返回办公室房号voidchange()fficeTo(constchar*office){//改换为指定房号的另一个办公室strcpy(this->Office,office);}private:charname[20];//部门名称charoffice[20];//部门所在办公室房号};classStaff{//“职工”类public://********found********Staff(constchar*myid,constchar*my_name,Department&mydept):____________{strcpy(this->staff_id,myid);strcpy(this->name,myname);}constchar*getID()const{returnstaffid;}constchar*getName()const{returnname;}DepartmentgetDepartment()const{returndept;}private:charstaffid[10];//职工号charname[20];//姓名Department&dept;/所在部门};voidshowStaff(Staff&Staff){cout<<"职工号:"<标准答案:(1)strepy(this->office,office);(2)returnoffice;(3)dept(my_dept)(4)dept.changeOffieeTo("311");知识点解析:(1)主要考查考生对strcpy函数的掌握情况,根据上一条语句:strepy(this->name,name);可知,这条语句复制的是office,即strcpy(this->office,office);(2)主要考查考生对成员函数的掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条return语句。住私有成员里:charoffice[20];//部门所在办公室房号,表明office即为办公室房号。因此卣接返回office即可。(3)主要考食考生对构造函数的掌握情况,根据函数体:strcpy(this->staff_id,my_id);strepy(this->name,my_name);可知,只有dept没有初始化,而空格前有字符“:”,这是成员列表初始化的标识符,因此填写dept(my_dept)即可。(4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由521搬到311在Department类中有函数voidchangeOffieeTo(constchar*office)可以修改办公室的房间号,直接调用即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成晕载赋值运算符函数,完成深复制功能。屏幕上输出的正确结果应该是:Hello!Happynewyear!要求:补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。不得修改程序的其他部分。注意:程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//proj3.h#include#includeusingnamespacestd;classMinistring{public:friendostream&operator<<(ostream&output,constMinis-tring&s)//重载流插入运算符{output<>(istream&input,Ministring&s)//重载流提取运算符{chartemp[100];//用于输入的临时数组temp[0]=’\0’;//初始为空字符串input>>setw(100)>>temp;intinLen=strlen(temp);//输入字符串长度if(inLen!=0){s.length=inLen;//赋长度if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏s.sPtr=newchar[s.length+1];strcpy(S.SPtr,temp);//如果s不是空指针,则复制内容}elses.sPtr[0]=’\0’;//如果s是空指针,则为空字符串returninput;}voidmodstring(constchar*string2)//更改字符串内容{if(string2!=0)//如果string2不是空指针,则复制内容{if(strlen(string2)!=length){length=strlen(string2);delete[]sPtr;sPtr=newchar[length+1];//分配内存}strcpy(sPtr,string2);}elsesPtr[0]=’\0’;//如果string2是空指针,则为空字符串}Ministring&operator=(constMinistring&otherstring);Ministring(constchar*s=""):length((s!=0)?strlen(s):0)//构造函数{sPtr=0;if(length!=0)setstring(S);}~Ministring()//析构函数{delete[]sPtr;}private:intlength;//字符串长度char*sPtr;//指向字符串起始位置voidsetstring(constchar*string2)//辅助函数{sPtr=newchar[strlen(string2)+1];//分配内存if(string2!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容elsesPtr[0]=’\0’;//如果string2是空指针,则为空字符串}};//proj3.cpp#include#includeusingnamespacestd;#include"proj3.h"Ministring&Ministring::operator=(constMinistring&otherstring){//重载赋值运算符函数。提示:可以调用辅助函数setstring//*************333*************//*************666*************}intmain(){Ministringstrl("Hello!"),str2;voidwriteToFile(constchar*);str2=str1;//使用重载的赋值运算符str2.modstring("Happynewyear!”);cout<标准答案:llength=otherstring.length;//把对象字符串otherstrinq的长度赋值给变量length2setstring(otherstring.sPtr);//调用函数setstring,实现给类变量sptr分配空间,以及逐个把对象other.string字符串的值复制到sptr中3return+this;//返回被赋值的对象知识点解析:主要考查考生对运算符重载的掌握,题目要求重载赋值运算符函数。要重载的运算符是“=”,即赋值的意思。提示:町以调用辅助函数setstring。该函数的功能是复制形参的字符串到sPtr中,因此,首先复制Iength,其次通过函数setstring复制sPtr,最后按要求返回*this;。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中包含程序文件main.cpp,其中有ElectricFan(“电风扇”)类和主函数main的定义。程序中位于每个“//ERROR*******found*******”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:品牌:清风牌,电源:关,风速:0品牌:清风牌,电源:开,风速:3品牌:清风牌,电源:关,风速:0注意:只修改每个“//ERROR*******found*******”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;clasSElectricFan{//“电扇”类char*brand;intintensity;//风速:0一关机,1一弱,2一中,3一强public:ElectricFan(constchar*the_brand):intensity(0){brand=newchar[strlen(thebrand)+1];strcpy(brand,the_rand);}~ElectricFan(){delete[]brand;}//ERROR*******found*******constchar}theBrand()const(return*brand;}//返回电扇品牌inttheIntensity()const(returnintensity;}//返回风速boolisOn()const{returnintensity>0;}//返回电源开关状态//ERROR*******found*******voidturnOff(){intensity=1;}//关风扇voidsetIntensity(intinten){//开电扇并设置风速//ERROR*******found*******if(intensity>=1&&intensity<=3)intensity=inten;}voidshow(){cout<<”品牌:”<<theBrand()<<”牌”<<”,电源:”<<(isOn()?”开”:”关”)<<”,风速:”<<theIntensi.ty()<<endl;}};intmain(){ElectricFanfan(”清风”);fan.show();fan.setIntensity(3);fan.show();fan.turnOff();fan.show();return0;}标准答案:(1)constchar*theBrand()const{returnbrand;}//返回电扇品牌(2)voidturnOff(){intensity=0;}//关电扇(3)if(inten>=1&&inten<=3)intensity=inten;知识点解析:(1)主要考查考生对指针的掌握情况,因为brand是一个动态指针,*brand表示字符串的首个字符,brand表示动态数组,这里要返回动态数组存储的品牌名称。(2)主要考查考生对成员函数的掌握情况,根据题目中类的定义中私有成员的定义:intintensity;//风速:0-关机,1-弱,2-中,3-强,可知本函数要关电扇,因此在这里intensity=0;。(3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速。可知if语句里要判断的应该是形参inten而不是intensity。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有类AutoMobile(“汽车”)及其派生类Car(“小轿车”)、Truck(“卡车”)的定义,还有主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:车牌号:冀ABC1234品牌:ForLand类别:卡车当前档位:0最大载重量:12车牌号:冀ABC1234品牌:ForLand类别:卡车当前档位:2最大载重量:12车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:0座位数:5车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:-1座位数:5注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//*******found*******”。#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;classAutoMobile{//“汽车”类char*brand;//汽车品牌char*number;//车牌号intspeed;//档位:1、2、3、4、5,空档:0。倒档:-1public:AutoMobile(constchar*thebrand,constchar*thenumber):speed(0){brand=newchar[strlen(thebrand)+1];//*******found*******________________;//*******found*******________________;strcpy(number,thenumber);}~AutoMobile(){delete[]brand;delete[]number;}constchar*theBrand()const{returnbrand;}//返回品牌名称constchar*theNumber()const{returnnumber;)//返回车牌号intcurrentSpeed()const{returnspeed;}//返回当前档位voidchangeGearTo(intthespeed){//换到指定档位if(speed>=-1&&speed<=5)speed=the_speed;}virtualconstchar*category()const:0;//类别:卡车、小轿车等virtualvoidshow()const{cout<<”车牌号:”<<theNumber()//*******found*******<<”品牌:”。“________<<’’类别:”<<category()<<”当前档位:”<<currentSpeed();}};classCar:publicAutoMobile{intseats;//座位数public:Car(constchar*thebrand,constchar*thenumber,inttheseats):AutoMobile(thebrand,thenumber),seats(theseats){}intnumberOfSeat()const{returnseats;}//返回座位数constchar*category()const{return”小轿车”;}//返回汽车类别voidshow()const{AutoMobile::show();cout<<”座位数:”<<number.OfSeat()<<endl;}};classTruck:publicAutoMobile{//“卡车”类intmaxload;//最大载重量public:Truck(constchar*thebrand,constchar*thenumber,intthemaxload):AutoMobile(thebrand,thenumber),maxload(themaxlead){}intmax1oad()const{returnmaxload;)//返回最大载重量//*******found*******constchar*category()________//返回汽车类别voidshow()const{AutoMobile::show();cout<<”最大载重量:·t<<max.Load()<<endl;}};intmain(){Trucktruck(”ForLand”,”冀ABCl234”,12);truck.show();truck.changeGearT0(2);truck.show();Carcar(”QQ”,”沪XYZ5678”,5);car.show();car.changeGearTo(-1);car.show();cout<<endl:return0;}标准答案:(1)strcpy(brand,the_brand);(2)number=newchar[strlen(the_number)+1](3)theBrand()(4)const{return"卡车";}知识点解析:(1)主要考查考生对strcpy函数的掌握情况,在上一条语句程序给brand指针分配了空间,在这里要复制字符串thebrand,即strcpy(brand,the-brand);。(2)主要考查考生对动态分配的掌握情况,参考brand指针的复制过程完成该语句,先给指针number分配空间,通过new来完成:number=newchar[strlen(thenumber)+1];。(3)主要考查考生对成员函数的掌握,由程序可知这里要输出的是品牌,因此调用成员函数theBrand()来输出品牌。(4)主要考查考生对纯虚函数的掌握,根据纯虚函数的定义:virtualconstchar*category()const=0;,可知在这里要填写:const{retur"卡车";}。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中使用友元函数访问类的私有数据成员,求出两个数据成员的大于1的最小公因子。请编写友员函数FriFun,使其输出结果为:Commondenominatoris2要求:补充编制的内容写在“//*******333*******”与“//*******666*******”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//proj3.hclassFriFunClasS{inta,b;public:FriFunClass(inti,intj){a=i;b=j;}friendintFriFun(FriFunclassX);//友元函数};voidwriteTOFile(constchar*);//proj3.cpp#include<iostream>usingnamespacestd;#include”prj3.h”intFriFun(FriFunClasSX){//*******333*******//由于函数FriFun()是类FriFunClass的友元函数,所以它可以直接访问a和b//*******666*******}intmain(){FriFunClassn(10,20);if(FriFun(n))cout<<”Commondenominatoris”<<FriFun(n)<<”、n”;elsecout<<”NOcommondenominator.\n”:writeToFile(””);return0,}标准答案:intmin=x.a<x.b?x.a:x.b;for(inti=2;i<=min;i++)if(x.a%i==0&&x.b%i==0)returni;retu

温馨提示

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

评论

0/150

提交评论