国家二级C++机试(综合应用题)模拟试卷1(共45题)_第1页
国家二级C++机试(综合应用题)模拟试卷1(共45题)_第2页
国家二级C++机试(综合应用题)模拟试卷1(共45题)_第3页
国家二级C++机试(综合应用题)模拟试卷1(共45题)_第4页
国家二级C++机试(综合应用题)模拟试卷1(共45题)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C++机试(综合应用题)模拟试卷1(共9套)(共45题)国家二级C++机试(综合应用题)模拟试卷第1套一、综合应用题(本题共5题,每题1.0分,共5分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明IntSet是一个用于表示正整数集合的类。IntSet的成员函数Intersection的功能是求当前集合与另一个集合的交集。请完成成员函数Intersection。在main函数中给出了一组测试数据,此时程序的输出应该是:求交集前:123581028911305667求交集后:12358102891130566728要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数wfiteToFile已经编译为obj文件,并且在本程序中调用。//Intset.h#includeusingnamespacestd;constintMax=100;classIntSet{public:IntSet()//构造一个空集合{end=一1;}IntSet(inta[],intsize)//构造一个包含数组a中size个元素的集合{if(size>=Max)end=Max一1;elseend=size一1;for(inti=0;i<=end;i++)element[i]=a[i];}boolIsMemberOf(inta)//判断a是否为集合中的一个元素{for(inti=0;i<=end;i++)if(element[i]=a)returntrue;returnfalse;}intGetEnd(){returnend;}//返回最后一个元素的下标intGetElement(inti){returnelement[i];)//返回下标为i的元素IntSetIntersection(IntSet&set);//求当前集合与集合set的交voidPrint()//输出集合中的所有元素{for(inti=0;i<=end;i++)if((i+1)%20==0)cout<标准答案:for(inti=0;i<=set.GetEnd.();i++)//遍对象set数组if(IsMemberOf(set.GetElement(i)))//判断对象Set数组第i个值是不是集合中的值,如果是则把它插入到a中a[size++]=set.GetElement(i);知识点解析:本题考查的是IntSet类,其中涉及构造函数、bool函数和成员函数。本类是一个用于表示正整数集合的类,题目要求填写的函数能实现交集的功能,也就是将两个数组内的元素进行比较,将一样的元素提取出来。【解题思路】主要考查考生对数组的掌握,根据IntSet类的构造函数:IntSet(inta[],intsize)//构造一个包含数组a中size个元素的集合{if(size>=Max)end=Max一1;elseend=size一1;for(inti=0;i<:end;i++)element[i]=a[i];}可知数组element用来装载集合,end表示数组长度,因此调用函数IsMemberOf来判断set中的元素是否存在于集合中,如果存在则放入数组a中。【解题宝典】主要考查考生对数组的掌握,集合可以用数组来实现,交集就是将两个数组中相等的元素提取出来放入一个新建立的数组。2、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明IntSet是一个用于表示正整数集合的类。IntSet的成员函数Intersection的功能是求当前集合与另一个集合的交集。请完成成员函数Intersection。在main函数中给出了一组测试数据,此时程序的输出应该是:求交集前:123581028911305667求交集后:12358102891130566728要求:补充编制的内容写在“//********333********”与“********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//Intset.h#include<iostream>usingnamespacestd;constintMax=100;classIntSet{public:IntSet()//构造一个空集合{end=-1;}IntSet(inta[],intsize)//构造一个包含数组a中size个元素的集合{if(Size>=Max)end=Max-1;elseend=size-1;for(inti=0;i<=end;i++)element[i]=a[i];}boolIsMemberOf(inta)//判断a是否为集合中的一个元素{for(inti=0;i<=end;i++)if(element[i]==a)returntrue;returnfalse;}intGetEnd(){returnend;)//返回最后一个元素的下标intGetElement(inti){returnelement[i];)//返回下标为i的元素IntSetIntersection(IntSet&set);//求当前集合与集合set的交voidPrint()//输出集合中的所有元素{for(inti=0;i<=end;i++)if((i+1)%20==0)cout<<element[i]<<end1;elsecout<<element[i]<<’’;cout<<end1;}private:intelement[Max];intend;};voidwriteTOFile(constchar*);//main.cpp#include"ntSet.h"IntSetIntSet∷Intersection(IntSet&set){inta[Max],size=0;//********333********//********666********returnIntSet(a,size);}intmain(){inta[]={1,2,3,5,8,10);intb[]={2,8,9,11,30,56,67);IntSetsetl(a,6),Set2(b,7),set3;cout<<"求交集前:"<<end1;set1.Print();set2.Print();set3.Print();set3=set1.Intersection(set2);cout<<end1<<"求交集后:"<<end1;set1.Print();set2.Print();set3.Print();writeToFile("");return0;}标准答案:for(inti=0;i<=set.GetEnd();i++)//遍对象set数组if(IsMemberOf(set.GetElement(i)))//判断对象set数组第i个值是不是集合中的值,如果是则把它插入到a中a[size++]=set.GetElement(i);知识点解析:主要考查考生对数组的掌握,根据IntSet类的构造函数:IntSet(inta[],intsize)//构造一个包含数组a中size个元素的集合{if(size>=Max)end=Max-1;elseend=size-1;for(inti=0,i<=end;i++)element[i]=a[i];}可知数组element用来装载集合,end表示数组长度,因此调用函数IsMemberOf来判断set中的元素是否存在于集合中,如果存在则放人数组a中。3、请使用菜单命令或直接用VC6打开考生文件夹下的工程prj03。请完善下列程序,实现一个Number类。Add函数计算2个Number类对象之和,并将和作为Number对象返回。这2个Number对象中各包含一个用字符串表示的10进制正整数,均不超过int的表示范围。在main函数中给出了一组测试数据,使用这组数据进行测试时程序的输出应该是:100注意:只需在//**********333**********//**********666**********之间填入所编写的若干语句,不要改动程序中的其他内容。#include#include#include#include”proj3.h”usingnamespacestd;Number::Number(char木n){num=newchar[strlen(n)+1];strcpy(num,n);}Number::Number(Number&n){num=newchar[strlen(n.num)+1];strcpy(num,n.num);}Number::Number(intn){char*tmp=newchar[30];itoa(n,tmp,i0);//函数itoa的功能是将n转换为字符串,存放于tmp指向的敷组中num=newchar[strlen(tmp)+1];strcpy(num,tmp);}Number::一Number(){if(num)delete[]num;}NumberNumber::Add(Numbern)f//**********333**********}//**********666**********}intmain(){Numbernuml(“32”);Numbernum2(“68”);Number&num3=numl.Add(hum2);cout<标准答案:inti=atoi(hum);intj=atoi(n.GetNum());returnNumber(i+j);知识点解析:本题考查的是Number类,其中涉及C语言的库函数、构造函数的使用、成员函数的使用。【解题思路】主要考查考生对库函数、对象成员和构造函数使用的掌握情况,函数Add的功能是将函数参数n与自身相加,返回相加后的Number对象,Number类中成员字符串。aura是用来表示十进制的整数,所以将两个Number相加需要首先将字符串aura转化为整数,这里需要使用库函数atoi,将调用对象的hum和对象n的aura转化为十进制整数i,j,在转化对象n的aura成员时,由于hum是Number类的私有成员,所以不能直接使用,而应该通过成员函数GetNum()返回num;得到十进制数i、j后,再用i与j的和构造成Number对象,所以需要使用Number的参数为整数的构造函数,即Number’(inti),构造Number对象后返回。4、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)对文件以追加的方式打开文件。请在注释//********1********后添加适当的语句。(2)定义m、n为类TestClass的公有int型数据成员,请在注释//********2********后添加适当的语句。(3)定义p为类TestClass的数据成员指针,并指向类TestClass数据成员m,请在注释//********3********后添加适当的语句。(4)定义P指向类TestClass数据成员n,请在注释//********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include<iostream.h>#include<fStream>#include<iomanip>#include<cmath>usingnamespacestd;voidWriteFile(intx){ofstreamout1;//********1********out1.open("modi3.txt",);out1<<X<<’’;out1.close();}voidClearFile(){ofstreamout1;out1.open("modi3.txt");out1.close();}classTestClass{public:voiddisp(){cout<<"m="<<m<<endl;WriteFile(m);cout<<"n="<<n<<endl;WriteFile(n);}//********2********};voidmain(){//********3********ClearFile();TestClassa;a.*p=30;//********4********a.*p=45;a.disp();}标准答案:(1)将“out1.open("modi3.txt",);”补充完整为:out1.open("modi3.txt",ios_base::app);(2)添加语句:intm,n;(3)添加语句:intTestClass::*p=&(TestClass::m);(4)添加语句:p=&(TestClass::n);知识点解析:(1)题目1要求“对文件以追加的方式打开文件”。文件输出输入方式的设置值,以ios::app方式是以输出方式打开文件,写入的数据添加在文件末尾,即第1个标识下语句补全为“out1.open("modi3.txt",ios_base::app);”。(2)题目2要求“定义m、n为类TestClass的公有int型数据成员”。只需在程序中的TestClass类中的public区域添加m、n的定义即可。即在第2个标识下添加“intm,n;”。(3)题目3要求“定义P为类TestClass的数据成员指针,并指向类TestClass数据成员m”。程序中类TestClass数据成员m为:TestClass::m,定义p为类TestClass的数据成员指针语句为:TestClass::*p,将其指向前面的数据成员m,即为“intTestClass::*p=&(TestClass::m):”。(4)题目4要求“定义P指向类TestClass数据成员n”。类TestClass数据成员n语句为TestClass::n,用p指向类TestClass数据成员n,添加的语句即“p=&(TestClass::n);”。5、使用VC6打开考生文件夹下的源程序文件modi3.clap,其中定义了用于表示学生学号的类CStudcntlD,但类CStudentID的定义并不完整。运行结果为:学生的学号为:200805学生名为:李伟删除学生学号为:200805请按要求完成下列操作,将类CStudentlD的定义补充完成:(1)定义classCStudentlD类的私有数据成员IDvalue表示学生的学号,为long型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CSmdentlD的定义,使CStudentlD对象的默认值为:id=0,并把学生的学号赋给IDvalue,并输出“赋给学生的学号:”及学号。请在注释//********2********之后添加适当的语句。(3)完成默认析构函数CStudentlD的定义,使CStudentlD析构时输出“删除学号:”及学号。请在注释//********3********之后添加适当的语句。(4)完成默认构造函数CStudentlnfo的定义。对应两个默认参数:要求定义charstName[],其默认值为“noname”,定义longstID,其默认值设为0,并使它们赋值给相应的类数据成员。请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2#include<string.h>3classCStudentID4{5//********1********定义私有数据成员67public:8//********2********定义默认构造函数910{11IDvalue=id;12cout<<’’学生的学号为:’’<<IDValue<<end1;13}14//********3********定义析构函数1516{17cout<<’’删除学生学号为:’’<<IDvalue<<end1;18}19};20classCStudentInfo21{22private:23CStudentIDid;24charname[20];25public:26//********4********定义默认构造函数完成数据成员初始化2728{29cout<<’’学生名为:’’<<stName<<end1;30strcpy(name,stName);31}32};33voidmain()34{35CStudentInfost(’’李伟’’,200805);36}标准答案:(1)添加语句:longIDvalue;(2)添加语句:CStudentID(lonqid=0)(3)添加语句:~CStudentID()(4)添加语句:CStudentInfo(charstName[]=’’noname’’,longstID=0):id(stID)知识点解析:程序中定义了两个类CStudentID和CStudentInfo,其中类CStudentID包含学生的学号信息的成员变量,有自定义构造函数和默认析构函数,而类CStudentlnfo不仅包含学生的学号还包括对应的姓名信息的成员变量,还实现了自定义构造函数。(1)第1个标识下完成CStudentID类的私有数据成员IDvalue的定义,为long型的数据,因此第1个标识下应添加“longIDvalue;”。(2)构造函数完成类成员变量的初始化,构造函数名和类名一致,该构造函数带有一个参数id,其默认值为id=0,因此第2个标识下应添加“CStudentIPD(longid=0)”。(3)析构函数也和类名一致,并且在前面加“~”以和构造函数区分,析构函数没有参数,故第3个标识下应添加“~CStudentID()”。(4)CStudentInfo包含的学生学号信息保存在类CStudentID的实例中,可通过调用类CStudentID的自定义构造函数初始化,第4个标识下应添加“CStudentlnfo(charstName[]=’’noname",longstID=0):id(stID)”。国家二级C++机试(综合应用题)模拟试卷第2套一、综合应用题(本题共5题,每题1.0分,共5分。)1、请使用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的最高次数。2、用VC6打开考生文件夹下的源程序文件modi3.cpp,这个程序完成输出到屏幕一些特定的信息,但工程有错误或者不完整,请完成以下功能:(1)初始化m_Num2的值为j,请在注释//********1********后添加适当的语句。(2)补充全局函数fun()使之能够调用类TestClass的成员变量,请在注释//********2********后添加适当的语句。(3)初始化静态变量,请在注释//********3********后添加适当的语句。(4)修改注释//********4********后的语句。使得程序输出以下内容:m_Num1=1m_Num2=2m_Num3=1m_Num1=4m_Num2=2m_Num3=7注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include<iostream.h>2classTestClass3{4public:5//********1********67TestClass,(inti,intj)8{9m_Num1=i;10m_Num3+=i;11}12voidPrint()13{14cout<<’’m_Num1=’’<<InNum1<<endl;15cout<<’’m_Num2=’’<<mNum2<<end1;16cout<<’’m_Num3=’’<<mNum3<<end1;17}18voidAdd(inti)19{20m_Num3+=i;21}22private:23intm_Num1;24constintm_Num2;25staticintm_Num3;26//********2********2728};29//********3********30voidfun()31{32TestClassNum(1,2);33Num.m_Num1=4;34//********4********35Num.Add();36Num.Print();37}38voidmain()39{40TestClasSNum(1,2);40Num.Print();42fun();43return;44}标准答案:(1)添加语句:TestClass(inti,intj):m_Num2(j)(2)添加语句:friendvoidfun();(3)添加语句:intTestClass::mNum3=0;(4)将“Num.Add();”补充完整为:Num.Add(5);知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和函数fun实现各种输出操作。(1)根据“constintm_Num2;”语句知道m_Num2为类TestClass中的私有数据,另外,C++定义构造函数的初始化数据成员的方法中可以在原有函数末尾加一个冒号,然后列出参数的初始化表实现,即“TestClass(inti,intj):m_Num2(j)”。(2)在C++中,如果在本类以外的其他地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了实现其对类TestClass中成员变量的调用,在类TestClass中补全“friendvoidfun();”,即声明fun()为类TestClass的友元函数。(3)在C++中,初始化类中数据成员的格式可以是“<类型>类名class::参数=”,其中<类型>为要初始化参数的类型,“::”为作用域符号,说明参数是class中的参数,所以这里补全“intTestClass::m_Num3=0;”0(4)函数fun()中“Num.Add();”语句应该是调用类“TestClass”中的成员函数“voidAdd(inti)”。其定义中存在参数inti,所以注释下修改的语句缺少参数。主函数首先调用“Num.Print();”,即实现题目中输出的前三条语句,而“fun();”语句实现后面三条语句的输出,即“m_Num3=7”才是调用Num.Add的输出结果,即“m_Num3+=i;”的计算结果。“TestClassNum(1,2);”中将i的值初始化为1,“m_Num3”的值在上一次“Num.Print();”调用中为1,如果计算结果为7,那么Add(inti)中i的初始化值为5,即“Num.Add(5);”。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与其他函数中的任何内容。#include<iostream.h>#include<fStream>#include<iomanip>#include<cmath>USingnamespacestd;voidWriteFile(intc){ofStreamout1;out1.open("modi3.txt",ios_base::app);out1<(c<<’’;out1.close();}voidWriteFile(char*str){ofstreamout1;out1.open("modi3.txt",iosbase::app);out1<<str:out1.close():}voidClearFile(){ofstreamout1;out1.open("modi3.txt");out1.close();}classDate{public:Date(inty,intm,intd){//********2********}voidprint()const;//********3********{month+=m;inti=month/12;intj=month%12;if(i==0){year+=(i-1),month=12;}else{year+=i;month=j;}return*this;}private://********1********};voidDate::Print()const{//********4********WriteFile(year);WriteFile("年");WriteFile(month);WriteFile("月");WriteFile(day);WriteFile("日");}intmain(){clearFile();Dateoly_day(2008,8,8);oly_day+=3;oly_day.print();return0;}标准答案:(1)添加语句:intyear,month,day;(2)添加语句:year=y;month=m;day=d;(3)添加语句:Date&operator+=(intm)(4)添加语句:cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;知识点解析:(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<<"月"<<daV<<"日"<<endl;”。4、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示坐标的类TestClass1,但类TestClass1的定义并不完整,按要求完成下列操作,将类的定义补充完整。(1)声明TestClass2类为TestClass1类的友元类,请在注释//********1********后添加适当的语句。(2)完成类的构造函数,分别对成员变量赋值,请在注释//********2********后添加适当的语句。(3)完成类的构造函数,分别对成员变量赋值,请在注释//********3********后添加适当的语句。(4)完成计算平面上两点之间的距离函数Distance,计算的方法如下:X坐标之差的平方与Y坐标之差的平方之和的开方。请在注释//********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include<iostream>2#include<cmath>3usingnamespacestd;4classTeStClass15{6//********1********78public:9//********2********1011{12X=a;13Y=b;14}15//********3********1617{18X=a;19Y=0;20}21voidprint()22{23cout<<’’x=’’<<X<<end1;24cout<<’’y=’’<<Y<<end1;25}26private:27floatX,Y;28};29classTestClass230{31public:32floatDistance(TestClass1&p,TestClass1&q);33};34floatTestClass2::Distance(TestClass1&p,TestClass1&q)35{36floatresult;37//********4********3839cout<<result<<end1;40returnresult;41}42intmain()43{44TestClass1p(10,10),q(20);45TestClass2d;46d.Distance(p,q);47return0;48}标准答案:(1)添加语句:friendclassTestClass2;(2)添加语句:TestClass1(floata,floatb)(3)添加语句:TestClass1(floata)(4)添加语句:result=sqrt((p.X-q.X)*(p.X-q.X)+(p.Y-q.Y)*(p.Y-q.Y));知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类TestClass实现各种输出操作。(1)题目1要求“声明TestClass2类为TestClass1类的友元类”。C++中声明友元类的一般形式为friend类名;,所以这里补全“friendclassTestClass2;”。(2)题目2要求“完成类的构造函数,分别对成员变量赋值”。程序中TestClass1类的构造函数缺少定义,构造函数首部的一般格式为:构造函数名(类型1形参1,类型2形参2,……),所以在第2个标识下补全“TestClass1(floata,floatb)”。(3)题目3要求“完成类的构造函数,分别对成员变量赋值”。同理,第三个标识下补全“TestClass1(floata)”。(4)题目4要求“完成计算平面上两点之间的距离函数Distance”。题目中已经给出了计算方法,X坐标之差的平方与Y坐标之差的平方之和的开方。利用C++中的开方函数sqrt补全函数中的两点之间的距离。即:result=sqrt((p.X-q.X)*(p.X-q.X)+(p.Y-q.Y)*(p.Y-q.Y);。5、使用VC6打开考生文件夹下的源程序文件modi3.cpp。通过继承完成输入到屏幕指定的信息:TestClassATestClassBTestClassC其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类B虚继承于A,请在注释,//****************后添加适当的语句。(2)完成类C虚继承于A,请在注释//********2********后添加适当的语句。(3)完成类D继承于B,C,请在注释//********3********后添加适当的语句。(4)函数fun通过调用基类的fun,完成所输出的内容,请在注释//******4******后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include<iostream.h>2ClassTestClassA3{4public:5voidfun(){6cout<<’’TestClassA’’<<end1;7}8};9//********1********10classTestClassB11{12public:13voidfun()14{15cout<<’’TestClassB’’<<end1;16}17};18//********2********19classTestClassC20{21public:22voidfun()23{24cout<<’’TestClassC’’<<end1;25}26};27//********3********28classTestClassD29{30public:31voidfun()32{33//********4********3435}36};37voidmain()38{39TestClasSDtest;40test.fun();41return;42};标准答案:(1)将“classTestClassB:”补充完整为:classTestClassB:virtualpublicTestClassA(2)将“classTestClassC:”补充完整为:classTestClassC:virtualpublicTestClassA(3)将“classTestClassD:”补充完整为:classTestClassD:publicTestClassB,publicTestClassC(4)添加语句:TestClassA::fun();TestClassB::fun();TestClassC::fun();知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类和函数fun实现各种输出操作。(1)题目1要求“完成类B虚继承于A”。在C++中,声明虚基类的一般形式为:class派生类名:virtual继承方式基类名,由题目知道TestClassA为基类,TestClassB为派生类,所以第1个标识下修改为“classTestClassB:virtualpublicTIestClassA”。(2)同(1),题目2和题目3中要求的标识2和3下的语句修改为“classTestClassC:virtualpublicTestClassA”和“classTestClassD:publicTestClassB,publicTestClassC”。(3)题目4要求“函数fun通过调用基类的fun,完成所输出的内容”。在C++中调用基类的成员函数,要使用作用域限定符“::”,类名A::函数fun,就是调用类A的函数fun,根据题目中的要求补全对类TestClassA、TestClassB以及TestClassC中的fun函数,即:TestClassA::fun();TestClassB::fun();TestClassC::fun();国家二级C++机试(综合应用题)模拟试卷第3套一、综合应用题(本题共5题,每题1.0分,共5分。)1、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程包含一个源程序文件proj3.epp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象myA~ay中,然后对整数序列按非递减排序,最后由函数writeToFile选择序列中的部分数据输出到文件out.dat中。文件in.dat中的整数个数不大于300个。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中。输出函数writeToFile已经给出并且调用。//proj3.cpp#include#include#includeusingnamespacestd;classintArray{private:int*array;//整数序列首地址intlength;//序列中的整数个数public://构造函数,从文件中读取数据用于初始化新对象。参数是文件名intArray(char*filename);voidsort();//对整数序列按非递减排序一intArray();voidwriteToFile(char*filename););intArray::intArray(char*filename){ifstreammyFile(filename);intlen=300;array=newint[1en];length=0;while(myFile>>array[1ength++]);length一一;myFile.close();}voidintArray::sort(){//**********333**********//**********666**********}intArray::intArray(){delete[]array;}voidintArray::writeToFile(char。filename){intstep=0;ofstreamoutFile(filename);for(inti=0;i标准答案:for(inti=0;iarray[j])//如果arrag[i]>array[j],把array[i]与ar—ray[i]进行对换{inttemp;//定义一个临时变量temptemp=array[i];//把array[i]值放到变量temparray[i]=array[j];//把array[j]值赋给array[i]array[j]=terap;//把变量temp存放在值array[j]中}for(inta:0;a知识点解析:本题主要考查intArray类,其中涉及构造函数、排序函数和析构函数。常用的排序算法有冒泡排序、选择排序、插入排序、堆排序等。【解题思路】题目要求对整数序列按非递减排序,要排序就必须要有比较,因此定义两个下标i和j,按题目非递减排序要求,当array[i]比array[j]大时就交换其值,利用中间变量temp来实现。【解题宝典】排序算法有多种,其基本思想是相同的,即先遍历,后比较,再交换。不同之处在于它们遍历数列的顺序不同。考生可选择一至两种算法重点理解。2、请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程prog3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ViArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArrayv1={1,2,3,4,5}ValArrayv2={1,2,3,4,5}要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为boj文件,并且在本程序中调用。//ValArray.h#includeusingnamespacestd;classValArray{int*y;intSize;public:ValArray(constint*P,intn):Size(n){v=newint[size];for(inti=0;i标准答案:size=other.size;v=newint[size];for(inti=0;i知识点解析:主要考查的是ValArray类,其中涉及动态数组、构造函数、复制构造函数、析构函数和const函数。注意动态数组的复制构造函数要先给动态数组分配空间,再逐个元素复制。【解题思路】主要考查考生对复制构造函数的掌握,ValArray类的复制构造函数应实现对象的深层复制。由ValArray类的构造函数:ValArray(constint*p,intn):size(n){v=newint[size];//给v分配大小为size的空间for(inti=0;i<size;i++)//遍厉pv[i]=p[i];//把p[i]赋值给v[i]}可知类中v是动态数组,size表示数组长度,因此要先给v分配空间为size,再逐个元素复制以达到对象的深层复制。3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有类Array的定义和主函数main的定义。请把主程序文件中的Array类的成员函数Contrary()的定义补充完整,经补充后运行程序,得到的输出结果应该是:585,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允许在“********333********”和“//********666********”之间填写内容,不允许修改其他任何地方的内容。//Array.h#include<iostream>usingnamespacestd;template<classType,intm>classArray(//数组类public:Array(Typeb[],intmm){//构造函数for(inti=0;i<m;i++)if(i<mm)a[i]=b[i];elsea[i]=0;}voidContrary();//交换数组a中前后位置对称的元素的值intLength()const{returnm;}//返回数组长度Typeoperator[](inti)const{//下标运算符重载为成员函数if(i<0‖i>=m){cout<<"下标越界!"<<end1;exit(1);}returna[i];}private:Typea[m];};voidwriteToFile(constchar*);//不用考虑此语句的作用//main.cpp#include"Array.h"//交换数组a中前后位置对称的元素的值template<classType,intm>voidArray<Type,m>∷Contrary(){//补充函数体//********333********//********666********}intmein(){intsl[5]={1,2,3,4,5};doubles2[6]={1.2,2.3,3.4,4.5,5.6,8.4);Array<int,5>d1(s1,5);Array<double,8>d2(s2,6);inti;d1.Contrary();d2.Contrary();cout<<d1.Length()<<"<<d2.Length()<<end1;for(i=0;i<4;i++)cout<<d1[i]<<",";cout<<d1[4]<<end1;for(i=0;i<7;i++)cout<<d2[i]<<",";cout<<d2[7]<<end1;writeToFile("");//不用考虑此语句的作用return0;}标准答案:for(inti=0,j=m-1;i<j;i++,j--){//i从0开始自加,j从数组最一位开始自减,条件是i<j,开始遍历数组aTypetemp=a[i];//把a[i]赋值给变量tempa[i]=a[j];//把a[j]赋值给[j]a[j]=temp;//把temp赋值给a[j],最终使a[i]与a[j]值的互换}知识点解析:主要考查考生对交换算法的掌握情况,根据题目对要完成的函数Contrary的要求:交换数组a中前后位置对称的元素的值。这里取下标i=0,即为数组中的第一个元素,j=m-1,即为数组中的最后一个元素,利用中间值temp交换元素的值,然后i逐次递增的同时j逐次递减,再交换,循环到i>j时停止交换即可。4、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成构造函数的定义,请在注释//********1********后添加适当的语句。(2)定义类的友元函数fun(),请在注释//********2********后添加适当的语句。(3)定义类的友元函数main(),请在注释//********3********后添加适当的语句。(4)补充语句,释放内存。请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2classTestClass3{4public:5//********1********67{8data=d;9next=NULL;10}11voidSetNext(TestClass*p)12{13next=p;14}15private:16intdata;17TestClass*next;18//********2********1920//********3********2122};23TestClass*fun(TestClass*h)24{25TestClass*t,*s,*u,*v;26s=h一>next;27h->next=NULL;28while(s!=NULL)29{30for(t=s,v=h;v!=NULL&&v->data<t->data;u=v,v=v一>next);31s=s一>next;32if(v==h)33h=t;34else35u->next=v;36t一>next=v;37}38returnh;39}40voidmain()41{42TestClass*h=NULL;43TestClass*q=NULL,44do{45intdata;46cout<<’’pleaseinputanumber,andendwith0’’<<end1;47cin>>data;48if(data==0)break,49TestClass*p=newTestClass(data);50if(h==NULL)51{52h=q=p;53}54else55{56q一>SetNext(p);57q=p;58}59}while(1);60h=fun(h);6162for(;h!=NULL,)63{64q=h一>next;65cout<<h一>data<<’’’’<<end1;66deleteh;67//********4********68}69return;70}标准答案:(1)添加语句:Testclass(intd)(2)添加语句:friendTestClass*fun(TestClass*);(3)添加语句:friendvoidmain();(4)添加语句:h=q;知识点解析:本题的功能是将键盘输入的数字建立一个链表。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和函数fun实现各种输出操作。(1)题目1要求“完成构造函数的定义”。构造函数是一种特殊的成员函数,它的名字必须与类同名,所以这里的构造函数名字是TestClass。根据构造函数内的“data=d;”语句,知道构造函数TestClass中参数d为int型,即这里补全“TestClass(intd)”。(2)题目2要求“定义类的友元函数fun()”。在C++中,如果在本类以外的其它地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了其实现对类TestClass中程序变量的调用,在类TestClass中补全“friendTestClass*fun(TestClass*);”。(3)题目3要求“定义类的友元函数main()。”同(2),这里补全“friendvoidmain();”。(4)题目4要求“补充语句,释放内存。”为了防止内存泄漏,在指针使用后要将其释放。第四个标识前面的“deleteh;”语句已经将指针h释放了,所以要释放指针q,只要将其指向h就可以了,即“h=q;”。5、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示雇员的Employee类,但类Employee的定义并不完整。请按要求完成下列操作,将类CEmployee的定义补充完成。(1)定义私有数据成员name、street、city、zipcode和age分别用于表示姓名、街道、城市、邮编、年龄,除年龄是整型外其余都是char型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CEmployee的定义,使其把参数传递给私有数据成员name、street、city、zipcode和age。请在注释//********2********之后添加适当的语句。(3)完成成员函数alterName(char*newName)的定义。请在注释//********3********之后添加适当的语句。(4)完成成员函数IsEqual(char*ename)的定义,实现当name相等时返回真,否则为假的功能,请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2#include<string.h>3#defineMAXLEN204classCEmployee5{6private:7//********1********89intage;10public:11CEmployee(char*newName,char*newStreet,char*newCt,char*newZp,intnewAge);12voidalterName(char*newName);13voiddisplay();14boolIsEqual(char*ename);15};16CEmpIoyee::CEmployee(char*newName,char*newStreet,char*newCt,char*newZp,intnewAge)17{18//********2********1920age=newAge;21}22voidCEmployee::alterName(char*newName)23{24//********3********2526}27boolCEmployee::IsEqual(char*ename)28{29//********4********3031}32voidCEmployee::display()33{34cout<<name<<’’’’<<street<<’’’’;35cout<<city<<’’’’<<zipcode<<’’’’<<age<<end1;36}37voidmain(void)38{39CEmployeeemployee[4]=40{41CEmployee(’’李伟’’,’’兴荣路213号’’,’’兰州’’,’’413412’’,21),42CEmployee(’’张星’’,’’南山街157号’’,’’贵州’’,’’534670’’,30),43CEmployee(’’赵曦’’,’’北大街108号’’,’’深圳’’,’’412440’’,43),44CEmployee(’’刘兰’’,’’南大街330号’’,’’北京’’,’’670893’’,17),45};46for(inti=0;i<4,i++)47employee[i].display(),49cout<<’’\n修改\’’张星\’’的名字为\’’刘新\’’\n’’<<end1;50for(intj=0;j<4;j++)51{52if(employee[j].IsEqual(’’张星’’))53{54employee[j].alterName(’’刘新’’);55employee[j].display();56break;57}58}59}标准答案:(1)添加语句:charname[MAXLEN],street[MAXLEN],city[MAXLZN],zipcode[MAXLEN];(2)添加语句:strcpy(name,newName);strcpy(street,newStreet);strcpy(city,newCt);strcpy(zipcode,newZp);(3)添加语句:strcpy(name,newName);(4)添加语句:returnstrcmp(name,ename)==0;知识点解析:程序中定义了一个表示雇员的类CEmployee,该类定义了私有数据成员name、street、city、zipcode和age分别用于表示姓名、街道、城市、邮编、年龄,同时定义了四个函数包括构造函数以及三个成员函数,分别实现更改雇员姓名,判断雇员姓名以及显示雇员信息功能。(1)第1个标识下要求补充类CEmployee的私有数据成员name、street、city、zipcode和age的定义,分别用于表示姓名、街道、城市、邮编、年龄,除年龄是整型外其余都是char型的数据,由主函数内的对象数组可知,name、street、city、zipcode均为字符数组,故第1个标识下应添加“charname[MAXLEN],street[MAXLEN],city[MAXLEN],zipcode[MAXLEN];”。(2)构造函数完成成员变量的初始化,这里需要给name、street、city、zipcode赋初值,可利用字符串拷贝函数将参数字符串拷贝到成员变量中,第2个标识下应添加“strcpy(name,newName);strcpy(street,newStreet);strcpy(city,newCt);strcpy(zipcode,newZp);”。(3)函数alterName(char*newName)是改变成员变量name的值,即将参数拷贝给name,可利用字符串拷贝函数strcpy()完成拷贝任务,故第3个标识下应添加“strcpy(name.newName);”。(4)IsEqual(char*ename)函数是比较name成员变量和参数newName是否相同,可使用字符串比较函数strcmp(),第4个标识下应添加“returnstrcmp(name,ename)==0;”。国家二级C++机试(综合应用题)模拟试卷第4套一、综合应用题(本题共5题,每题1.0分,共5分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.epp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示矩形的类MyRectangle;程序应当显示:(0,2)(2,2)(2,0)(0,0)4但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1******found****”的下方是构造函数的定义,它用参数提供的左上角和右下角的坐标对up_left和down_right进行初始化。(2)在“//**2******found****”的下方是成员函数getDownLeft的定义中的一条语句。函数getDownLeft返回用MyPoint对象表示的矩形的左下角。(3)在“//**3******found****”的下方是成员函数area的定义,它返回矩形的面积。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#include<iostream>usingnamespacestd;classMyPoint{//表示平面坐标系中的点的类doublex;doubley;public:MyPoint(doubleX,doubley){this->x=x;this->y=y;)doublegetX()const{returnx;)doublegetY()const{returny;)voidshow()const{cout<<’(

温馨提示

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

评论

0/150

提交评论