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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷35(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR**********found**********”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:NUM=0Value=1注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#inccludeusingnamespacestd;classMyClass{inti;friendVOidIncrement(MyClass&f);public:constintNUN;//ERROR********found********MyClass(inti=0){NUN=0;i=i;}intGetValue()const{returni;}};//ERROR********found********voidIncrement(){f.i++;}intmain(){NyClassobj;//ERROR****found****NyClass::Increment(obj);cout<<"NUN="<标准答案:(1)MyClass(inti=0):NUM(0){(2)voidIncrement(MyClass&f){f._i++;}(3)Increment(obj);知识点解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,并且要使用关键字const修饰。该题的前一条语句constintNUM;,说明NUM是常量数据成员。(2)主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分:friendvoidIncrement(MyClass&f);,返回类型为void,函数参数为MyClass&f;再比较出错的语句:voidIncrement(){f._i++;},错误在于该函数没有参数,应把MyClass&f填在括号内。(3)主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加类名及作用域,只需要像调用普通函数一样即可。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类Set和用于测试该类的主函数main。类Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为100。为该类实现一个构造函数Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放人一个字符。此外,还要为该类实现另一个成员函数InSet(charC),用于测试一个字符c是否在一个集合中,若在,则返回true;否则返回false。构造函数Set和成员函数InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。提示:在实现构造函数时,可以调用InSet函数来判断一个字符是否已经在集合中。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#includeusingnamespacestd;constintMAXNUM=100;classSet{private:intnum;//元素个数charsetdata[MAXNUM];//字符数组,用于存储集合元素public:Set(char*s);//构造函数,用字符串S构造一个集合对象BoolInSet(charC);//判断一个字符c是否在集合中,若在,返回true,否则返回falsevoidPrint()const;//输出集合中所有元素};Set::Set(char*s){num=0;while(*s){//************found************if(________)//TODO:添加代码,测试元素在集合中不存在//************found************________;//TODO:添加一条语句,加入元素至集合中s++;}}boolSet::InSet(charc){for(inti=0;i标准答案:(1)!InSet(*s)(2)setdata[num++]=*s(3)c==setdata[i](4)returntrue知识点解析:(1)主要考查考生对成员函数的掌握,题目要求:添加代码,测试元素在集合中不存在,由类的定义可知函数boolInSet(charc)可以测试字符c是否在集合中,因此这里直接调用函数boolInSet(charc)即可。(2)题目要求:添加一条语句,加入元素至集合中,集合用数组setdata表示,直接把元素添加到数组中即可。(3)主要考查考生对if语句的掌握,题目要求:测试元素c是否与集合中某元素相同。前一条语句是个for循环,利用下标i遍历整个集合,通过if语句中的判断条件判断c是否在集合中,用“==”判断。(4)主要考查考生对成员函数的掌握,先看函数的注释:判断一个字符c是否在集合中,若在,返回true,否则返回false。if语句成立时,说明字符c存在于集合中,因此应该返回truec。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数remove。在main函数中给出了一组测试数据,此时程序的正确输出结果应为:234527283166752345627283166752345619272831667534561927283166753456192728316675要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。//IntegorSet.h#ifndefINTEGERSET#defineINTEGERSET#includeusingnamespacestd;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"#includeIntegerSet::IntegerSet(intdata[],intsize):counter(0){for(inti=0;i0;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***********//***********666***********}voidIntegerSet::show()const{for(inti=0;i标准答案:for(inti=0;1知识点解析:主要考查考生对有序数组的掌握,题目要求成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。遍历数组elem中的元素,找出与形参element相等的元素,并将其删除,每删除一个元素,即将该元素之后的每个元素前移一位,如果不存在与形参element相等的元素则没有操作。使用下标i遍历数组,if语句判断是否与element相等。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为:Constructor,i=O,Destructor注意:错误的语句在∥********4********的下面,修改访语句即可。#includeclassCObj{inti;public:CObj();voiddisplay();-CObj();};∥********error********CObj:cobj(){cout<<“Constructor"‘<“.”,i=0;}{CObj:display(){cout<<“i=”<标准答案:(1)CObj::CObj()(2)VOidcobj::display()(3)CObj::~CObj()知识点解析:(1)在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符(::),作用域运算符用来表示某个成员属于哪个类,使用格式为:<类名>::<成员函数>(<参数函数>),因此第1个标识下应改为CObj::CObi(),默认构造函数没有参数。(2)第2个标识下“COb.j:display()”,从其后的语句看,这是在类外实现COb.j函数,因此也有作用域运算符使用错误问题,display()函数返回值为void,因此第2个标识下应改为voidCObj::display()。(3)第3个标识下“CObj:CObj()”,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名字和类名相同,并在前面加“~”字符,用来与构造函数加以区别,因此第3个标识下应改为CObj::一CObj()。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使函数fun()实现以下功能:找出一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后开方,如果开方后的结果满足条件,即是结果。#include#includevoidfun(){}intmain(){fun();return0;}标准答案:longinti,x,y,z;f017。(i=1;i<100000;i++){x=sqrt(i+100);//x为加上100后开方后的结果y=sqrt(i+268);//y为再加上268后开方的结果if(x*x==i+100&&y*y==i+268)//如果一个数的平方根的平方等于该数,说明此数是完全平方数cout<知识点解析:(1)该程序功能是找出一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数。它的解题思路,根据题干中给出的分析可知解题思路为,先将该数加上100后再开方,再将该数加上268后开方,如果开方后的结果满足条件,即是结果。(2)从已给部分源程序的main主函数开始入手,核心函数voidfun()实现题目中的功能。【解题思路】(1)利用循环找到满足条件的整数。(2)首先计算x加上100和y加上268的开方。(3)一个数的平方根的平方等于该数,说明此数是完全平方数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。程序通过继承关系,实现对姓名的控制。类TestClass1实现对名字访问的接口,TestClass2实现对名字的设置和输出。程序输出为:TestClass2NameMay其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)在类TestClassl中定义接口函数GetName,为纯虚函数。请在注释∥********1********后添加适当的语句。(2)函数GetName20实现获得名字的缓存,但是只获得读允许操作这个缓存,请在注释∥********2********后添加适当的语句。(3)实现TestClass2的构造函数,请在注释∥********3********后添加适当的语句。(4)完成TestClass2的构造函数,实现对名字的处理。请在注释∥********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeclassTestClassl{public:∥********1********};classTestClass2:publicTestClassl{public:voidGetName(){cout<(”TestClass2Name”<GetName();cout<标准答案:(1)添加语句:virtualvoidGetName():0;(2)添加语句:constchar*GetName2()(3)添加语句:TestClass2(char*str)(4)添加语句:mstr[i]=0;知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和接口函数Getname实现各种输出操作。解题思路(1)题目l要求“在类TestClassl中定义接口函数GetName,为纯虚函数”。在C++中,在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidGetName0=0;”。(2)题目2要求“函数GetName20实现获得名字的缓存,但是只获得读允许操作这个缓存”。只能引用数据成员,而不能修改,那么使用常成员函数。一般形式为,const函数类型函数名,即“constchar*GetName20”。(3)题目3要求“实现TestClass2的构造函数”。TestClass2的构造函数与类TestClass2名应该相同,而且第三个标识下的大括弧中是对字符数组str的操作,所以类TestClass2的构造函数中的参数为str,即这里补全为“TestClass2(char*str)”。(4)题目4要求“完成TestClass2的构造函数,实现对名字的处理”,补全类TestClass2的构造函数,构造函数中的名字变量s仃对应于类TestClass中的成员变量mstr,所以这里补全变量赋值操作“mstr[i]=0;990国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,—num:num:10#includeinti=10;C1assTestClass{public:TestClass(inti){cout<<“num:”<标准答案:(1)this一>i=i+1;或TestClass::i=i+1;或(*this).i=i+1;(2)TestClassprint(0);(3)cout<<”num:”(<::i<知识点解析:程序要求输出member的值为O,1,10。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的TestClass构造函数的调用实现第一次hum值的输出;然后通过调用类TestClass中的成员函数Print实现第二次hum值的输出;最后通过输出函数cout实现第三次hum值的输出。解题思路(1)打开modil.cpp,调试程序,显示错误提示为第二标识下“modil.cpp(22):errorC2512:‘TestClass’:noappropriatedefaultconstructoravailable”,主函数中首先调用的就是第2个标识下的TestClassprint函数,构造函数的名字和类的名字是一样的,而程序中给出的“TestClassprint;”没有给出参数,所以程序调试时无法确定调用的函数。根据TestClass构造函数“TestClass(int”的定义,应该存在int型参数,并且题目要求第一次输出的值为“0”,所以第2个标识正确的调用函数为“TestClassprint(0);”(2)运行,发现第一次的输出正确,但是第二次的输出值为“858993460”,并不是题目中要求的“1”。在主函数中,可知第二次输出调用的是“print.Print();”即类TestClass的成员函数“Print()”。成员函数Print的定义“voidPrintoconst”中的输出语句为“tout<<“num:”<i=i+1;”或“TestClass::i=i+1;”或“(*this).i=i++”。(3)主函数中通过“cout<<“num:”<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是:一个四位长的整数,每位数字加上3然后除以9的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的密码。程序输出:76542108注意:不能修改其他部分的代码。#include#includeintfun(intn){}intmain(){inti=1234;cout<标准答案:inti,a[4],t;a[0]=n%10;//取整型n的第一位数字a[1]=n%100/10;//取整型n的第2位数字a[2]=n%1000/100;//取整型n的第3位数字a[3]:n/1000;//取整型n的第4位数字for(i=0;i<=3;i++)//每位数字加3,取余{a[i]+=3;a[i]%=9;}t=a[0];//根据加密算法交换a[0]=a[3];a[3]=t;t=a[1];a[1]=a[2];a[2]=t;returna[3]*1000+a[2]*100+a[1]*10+a[0];//重组,返回加密数字知识点解析:暂无解析三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。其中:定义了类circle和column,column类由circle类protected派生,但是两个类的定义并不完整,请按照以下的要求,将程序补充完整。(1)定义类circle的保护数据成员函数r和area,它们都是double型的数据,请在注释∥********1********后完成。(2)添加类circle的无参数的构造函数,使得类circle对象的r默认值为0,请在注释∥********2********后完成。(3)添加派生类column的构造函数的定义,使得参数为double型的height和radius并将其分别赋给数据成员h和基类的r请在注释∥********3********之后完成。(4)完成派生类column的成员函数print()的定义,请在注释∥********4********料之后完成,使得输出为:radius=5area=78.54height=10vol=785.4注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeconstdoublepi=3.1416;C1asscircle{protected:∥********1********publiC:∥********2********{r=0.0;}Circle(doubleradius){r=radius;}voidprint(){area=r*r*pi;cout<<“radius=”<标准答案:(1)添加语句:doubler,area;(2)添加语句:Circle()(3)添加语句:column(doubleradius,doubleheight)(4)添加语句:cout<<”height=”<知识点解析:本题的功能是计算圆的面积和周长。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的mam主函数开始入手,可以看出程序通过调用类和成员函数实现各种输出操作。解题思路(1)题目1要求“定义类circle的保护数据成员函数r和area,它们都是double型的数据”。保护成员与private和public一样是用来声明成员的访问权限的。在已有程序circle类中的protected:区域,添加变量r和area的定义,即“doubler,area;”。(2)题目2要求“添加类circle的无参数的构造函数,使得类circle对象的r默认值为0”。在C++中,构造函数是一种特殊的成员函数,它的名字与类同名,没有参数的构造函数一般形式为:构造函数名(),所以这里添加“circleO”。(3)题目3要求“添加派生类column的构造函数的定义”。同(2),另外带参数的构造函数的一般格式为:构造函数名(类型1形参1,类型2形参2,……),所以这里添加“column(doubleradius,doubleheight)”。(4)题目4要求“完成派生类column的成员函数print()的定义”。根据题干中输出结果,知道第一个输出值为height,第二个输出值为vol,即area*h,所以这里添加“cout<<”height=”<国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:2123注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。1#include2usingnamespacestd;34classABC{5public:6//ERROR**********found**********7ABC(){a=0;b:0;c=0;}8ABC(intas,intbb,intcc);9voidSetab(){++a,++b;}10intSum(){returna+b+c;}11private:12inta,b;13constintc;14};1516ABC::ABC(intaa,intbb,intcc):c(cc){a=as;b:bb;)1718intmain()19{20ABCx(1,2,3),y(4,5,6);21ABCz,*w=&z;22w->Setab();23//ERROR**********found**********24ints1=x.Sum()+y->Sum();25cout<标准答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=sl+w->Sum():知识点解析:(1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:constintc;可知,c为常变量,因此构造函数必须使用成员列表初始化来给C赋初始值。(2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“->”。(3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABCz,*w=&z;可知,w是ABC类的指针,指向z,因此w调用ABC类的成员函数时要使用标识符“->”,而不是“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有坐标点类point、线段类Line和三角形类Triangle的定义,还有main函数的定义。程序中两点间距离的计算是按公式实现的,三角形面积的计算是按公式f=请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:Side1:9.43398Side2:5Side3:8area:20注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。1#include2#include3usingnamespacestd;4classPoint{//坐标点类5public:6constdoublex,y;7Point(doublex=0.0,doubley=0.0):x(x),y(y){}8//**********found**********9doubledistanceTo(——)10const{11//到指定点的距离12returnsqrt((x-p.x)*(x-o.x)+(y-p.y)*(y-p.y));13}14};15classLine{//线段类16public:17constPointp1,p2;//线段的两个端点18//**********found**********19Line(Pointp1,Pointp2):_____20{}21doublelength()const{returnp1.distanceTo(p2);)//线段的长度22};23classTriangle{//三角形类24public:25constPointp1,p2,p3;//三角形的三个顶点26//**********found**********27Triangle(______):p1(p1),p2(p2),p3(p3){)28doublelengthl()const{//边p1,p2的长度29returnLine(pl,p2).1ength();30}31doublelength2()const{//边p2,p3的长度32returnLine(p2,p3).1ength();33}34doublelength3()const{//边p3,p1的长度35returnLine(p3,p1).1ength();36}37doublearea()const{//三角形面积38//**********found**********39doubles=——————————;40returnsqrt(s*(s-lengthl())*(s-length2())*(s-length3()));41}42};43intmain(){44Triangler(Point(0.0,8.0),Point(5.0,0.0),Point(0.0,0.0));45cout<<“Side1:”<标准答案:(1)constPoint&p(2)p1(p1),p2(p2)(3)Pointp1,Pointp2,Pointp3(4)(lengthl()+:length2()+length3())/2知识点解析:(1)主要考查考生对函数形参的掌握,由函数的注释可知有本坐标点到达某个坐标点类的距离,再根据函数体returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));可知,该坐标点类名为p,因此可以知道形参为Point&p,为了不改变该坐标点的值,前面要加上const。(2)主要考查考生对构造函数的掌握,对于常变量型私有成员constPointp1,p2,只能用成员初始化列表进行赋值。(3)主要考查考生对构造函数的掌握,由空格后面的语句:p1(p1),p2(p2),p3(p3){}可知,该构造函数需要进行成员列表初始化,再看类的私有成员constPointp1,p2,p3,可知p1,p2,p3是Point类型,因此形参为Pointp1,Pointp2,Pointp3。(4)主要考查考生对成员函数的掌握,根据函数注释,可知本函数要求计算三角形面积,再看题目的提示:s=(a+b+c)/2。可知空格处要填的是三角形的三条边之和除以2,而求边长的函数已经给出,这里直接调用即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:Zhang20Tsinghua。注意:只能在函数address_change的“//********333********”和“//********666********”之间填人若干语句,不要改动程序中的其他内容。程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。1//proj3.h2#include3#include4usingnamespacestd;5clasSPerson{6charname[20];7intage;8char*address;9public:10Person(){age=0;address=0;)11voidname_change(char*_name);12//名字修改函数13voidage_change(int_age);14//年龄修改函数15voidaddresschange(char*add);16//地址修改函数17voidinfodisplay();18//人员信息显示19~Person();20//析构函数21};22voidwriteToFile(constchar*path);1proj3.cpp2#include3#include4#include"proj3.h"5usingnamespacestd;67voidPerson::namechange(char*_name)8{9strcpy(name,_name);10}11voidPerson::age_change(int_age)12{13age=_age;14}15voidPerson::address_change(char*_16add)17{18if(address!=NULL)delete[]ad-19dress;20//********333********21//********666********22}23voidPemson::info_display(){24cout<标准答案:1address=newchar[strlen(add)+1];//给类成员变量动态分配空间2strcpy(address,_add);//把字符串add复制给address知识点解析:函数address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为add字符串。类的私有成员address是字符指针,因此首先要给address分配空间,通过new语句来实现:address=newchar[strlen(_add)+1];。接下来就是要复制字符串,使用系统函数strcpy,其用法为strcpy(参数1,参数2),将参数2的内容复制到参数1中。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容:0012FF6810012FF3C50012FF6C20012FF4440012FF7030012FF4C30023FF7440012FF5420012FF7850012FF5C1006AFDCC~006AFDEF数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为4的连续地址即可。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includeusingnamespacestd;intmain(){int*p,a[5]={1,2,3,4,5};double*q,b[5]={5.0,4.0,3.0,2.0,1.0};intx;p=a;q=b;//********error********for(x=0;x<=5;x++)//********error********cout<标准答案:(1)for(x=0;x<5;x++)(2)cout<知识点解析:(1)根据数组a、b定义,它们都是5个元素,而第1个标识下的“for(x=0;x<=5;x++)”循环了6次,应该是5次,所以第1个标识下的将其修改为“for(x=0;x<5;x++)”(2)第2个标识下的P变量为指针型变量,p+x为指向数组中第x个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数func(intd[],intn)的功能是将长度为num的数组d的每一个数字是奇数的扩大1倍,并存储到数组d中。例如:123456789返回:226410614818将func(intd[],intnum)补充完整。注意:请勿改动主函数。#includeVoidfunc(intd[],intnum){}intmain(){intData[]={1,2,3,4,5,6,7,8,9);func(Data,9);for(inti=0;i标准答案:for(inti=0;i知识点解析:(1)由审题分析可知,利用循环来逐个判断d[]中的元素,d[]中元素个数为num,因此循环变量从0变化至num。(2)在循环内,用if判断该元素是不是奇数,即if(d[i]%2!=0),将满足条件的d[i]扩大一倍。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)重载运算符int,请在注释//********1********后添加适当的语句。(2)重载运算符“<<”,请在注释//********2********后添加适当的语句。(3)在主函数main()中定义变量i,并调用对象obi的int运算符,给变量赋初值为10,请在注释//********3********后添加适当的语句。(4)调用obj的“<<”运算符输出:HelloTest注意:增加代码,或者修改代码的伊鼠已经川符号表示出来。请不要修改其他的程序代码。#includeusingnamespacestd;ClassTestClass{public://********1********{cout<<"int"<标准答案:(1)添加语句:operatorint()(2)添加语句:operator<<(char*str)(3)添加语句:inti=int(obj);(4)添加语句:obj<<"HelloTest";知识点解析:(1)题目1要求“重载运算符int”的定义。运算符重载的方法是定义一个重载运算符的函数,其一般格式为:函数类型opemmr运算符名称(形参列表){对运算符的重载处理)。所以第1个标识下,重载运算符int的语句为“operatorint()”。(2)题目2要求“重载运算符‘<<’”。同(1),第2个标识下“<<”的重载函数定义为“operator<<(char*str)”。(3)题目3要求“在主函数main()中定义变量i,并调用对象obj的int运算符,给变量赋初值为10。”定义变量i,即inti。“operatorint()”中的返回值为10,所以调用对象obi的int运算符,给变量赋初值为10,就是int(obj),即第三个标识下添加“inti=int(obj);”。(4)题目4要求“调用0bj的“<<”运算符输出“HelloTest”"。重载运算符“<<”后,不仅能输出标准类型数据,而且可以输出用户自己定义的类对象。所以直接添加要输出的字符串即可,即“obj<<"HelloTest";”。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程pmj1。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:value=63number=1注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeUSingnamespacestd;classMyClass{int*P;constintN;public://ERROR**********found**********MyClass(intval):N=1{P=newint;‘P=val;)//ERROR**********found***********~MyClass(){delete*P;}friendvoidprint(MyClass&obj);};//ERROR**********found***********voidMyClass::print(MyClass&obj){cout<<”value=”<<“(obj.P)<<endl;cout<<”number=”<标准答案:(1)MyClass(intval):N(1)(2)~MyClass(){delete[]p;}(3)voidprint(MyClass&obj)知识点解析:本题考查MyClass类,其中涉及动态数组、构造函数、析构函数和友元函数。构造函数的成员列表初始化格式为:私有成员(参数)……{},不能用赋值语句。析构函数使用delete语句,delete语句的语法是:delete[]指针。【解题思路】(1)主要考查考生对构造函数的掌握,在这里不能使用赋值语句。(2)主要考查考生对析构函数的掌握,析构函数的delete语句要使用标识符“[],’,即delete[]p;。(3)主要考查考生对友元函数的掌握,友元函数并不属于类,因此定义时前面不用加类名和作用域符号。【解题宝典】友元函数考查较少,但也是很关键的,友元函数并不属于类,只是可以使用类的私有成员而已,因此定义的时候就当作普通函数处理即可。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了Component类、Composite类和Leaf类。Component是抽象基类,Composite和Leaf是Compo-nent的公有派生类。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:LeafNode注意:只能在横线处填写适当的代码,不要改动程序中的其他内容.也不要删除或移动“//****found****”。#includeusingnamespacestd;classComponent{public://声明纯虚函数print()//**********found**********};classComposite:publicComponent{public://**********found**********voidsetChild(__________){mchild=chiid;}virtualvoidprint()const{mchild一>print();}private:Component*m—child;};classLeaf:publicComponent{public:virtualvoidprint()const{//**********found**********_____________}};intmain(){Leafnode;Compositecomp;comp.setChild(&node);Component*P=&comp;P一>print();return0;}标准答案:1)virtualvoidprint()const=0;(2)Component*child(3)cout<<“LeafNode”<知识点解析:本题考查抽象类Component类及其派生类Composite和Leaf,其中涉及纯虚函数和成员函数。纯虚函数要根据在派生类中该函数的返回值、参数、有无const来确定。【解题思路】(1)主要考查考生对纯虚函数的掌握,题目要求声明纯虚函数print()。在其派生类中print()函数的定义为virtualvoidprint()const,由此可知纯虚函数为virtualvoidprint()const=0(2)主要考查考生对成员函数的掌握,题目要求填写函数voidsetChild的形参,由setChild的函数体可知形参为child,再看类的私有成员m—child的定义:Component*m—child;。由此可知形参为:Component*child。(3)主要考查考生对纯虚函数的掌握,先看主函数的程序:Leafnode;Compositecomp;comp.setChild(&node);Componen*p=&comp;p一>print();第一条和第二条语句都是定义语句,第三条语句调用函数setChild,由setChild函数的定义可知,comp中的m—child等于node,第四条语句定义了个指针p指向comp的地址,也就是node,最后一条语句通过指针p调用函数print,也就是调用类Leaf的函数print,因为题目要求输出:LeafNode,因此在这里添加语句:cout<<”LeafNode’’<三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中定义的Matrix是一个用于表示矩阵的类。成员函数max_value的功能是求出所有矩阵元素中的最大值。例如,若有3×3矩阵则调用max_value函数,返回值为3。请编写成员函数max—valueo要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//Matrix.h#include#includeusingnamespacestd;constintM=18;constintN=18;classMatrix{intarray[M][N];public:Matrix(){)intgetElement(inti,intJ)const{returnarray[i][J];)voidsetElement(inti,intJ,intvalue){array[i][J]=value;)intmaxvalue()const;voidshow(constchar*s)const{cout<voidreadFromFile(constchar*f,Matrix&m){ifstreaminfile(f);if(infile.fail()){cerr<<”打开输入文件失败!;return;)intk;for(inti=0;i>k;m.setElement(i,j,k);}}intMatrix::maxvalue()const{//*********333*********//*********666*********}intmain(){Matrixm;readFromFile(“”,m);m.show(“Matrix:”);cout<标准答案:Inttemp;//定义整数变量temp,并赋值为零for(inti=0;i知识点解析:本题考查Matrix类,其中涉及构造函数、二维数组、成员函数和const函数。【解题思路】主要考查考生对二维数组的掌握,题目要求成员函数max—value的功能是求出所有矩阵元素中的最大值。因此只要逐个元素比较即可,下标i和j作为矩阵行和列的标记,使用双层for循环来遍历数组中的所有元素。【解题宝典】主要考查考生对二维数组的掌握,二维数组使得存储的数据大幅增加,只要把二维数组想象成矩阵,利用矩阵相关知识求解即可。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:30130注意:错误的语句在//*****error******的下面,修改该语句即可。#includeinta=10;classCObj{public:CObj(){a=b=0;}voiddisplay(){//*****error******cout<标准答案:(1)cout<a+=a;(3)a+=::a;知识点解析:(1)成员函数display()打印变量a和b的值,即cout输出a和b的值,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,因此第1个标识下应改成cout<a+=a;”。(3)func2()函数虽然没有参数,但是成员变量a和全局变量a重名,第3个标识下“a+=a”也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用func2()函数后,输出“130”,说明a为13,b为0,因此是成员变量与全局变量a的和赋给成员变量a,正确的写法是“a+=::a;”,“::a”表示是全局变量a。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数num(char*str)实现返回字符串中非数字的个数。例如:abc123abc45返回输出:6将函数num()补充完整。注意:请勿改动主函数。#includeintnum(char*str){}intmain(){charstr[1024];cout<<"pleaseinputastrfng:"<标准答案:intnumber=0;for(inti=0;str[i]!=0;i++)if(Str[i]>’9’||str[i]<’0’)//非数字字符number++;returnnumber;知识点解析:(1)利用循环搜索数组str中的元素,循环变量从0开始,直到str[i]=0(到了字符数组的尾),不断地读取str中读取元素。(2)每读到一个元素判断是否是非数字字符,即满足条件“str[i]>’9’‖str[i]<’0’”的字符为非数字字符,非数字字符个数加1,循环结束就得到了非数字字符的个数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数,设置数组元素的个数为0,请在注释//********1********之后添加语句。(2)完成函数AddMember(intn),如果参数n包含在类的数据成员数组中,则返回0,否则把数据写入数组,然后返回1,请在注释//********2********之后添加语句。(3)完成函数DelMember(intn),如果变量在数据中,则删除该变量,并且返回1,如果不存在则返回0,请在注释//********3********之后添加语句。(4)完成成员函数islnclude(intn)的定义,该函数检查参数n是否在类的数据成员数组elems中,如果在返回1,否则返回0。请在注释//********4********之后添加语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#defineMAX_LENGTH500classCArray{public:CArray(){//********1********}intAddMember(intn){for(inti=0;i标准答案:(1)添加语句:length=0;(2)将“if(Array[i]=n)”补充完整为:if(Array[i]==n)或if(n==Array[i])(3)将“if()”补充完整为:if(i知识点解析:(1)使length的初始化为0,因此添加语句:“length=0;”(2)第2个标识下是检查n是否已经在数组当中存在,用if语句来判断,即if(Array[i]==n)或if(n==Array[i])。(3)DelMember(intn)函数删除指定的元素,由于元素在数组当中的位置未知,因此必须先查找该元素的位置,在该函数的实现过程当中通过for循环来完成,即第一个for循环查找n在数组中的位置。如果n存在于数组中,那么if中的break语句就会执行跳出循环,此时循环变量i的值会小于length,即通过判断i的值是否小于length值可以知道n是否存在数组中,如果存在数组中接下来进行删除操作。即第3个标识下应改为if(i国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN20voidfun(int*a){inti,x,n=0;x=rand()%20;/*********found*********/while(n<【1】){for(i=0;i标准答案:(1)N或20(2)break(3)n知识点解析:填空1:变量n用于存储数组的下标,要通过while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20。填空2:通过一个for循环判断x是否与数组中已存的元素重复,若重复则跳出for循环结束。填空3:若for循环是由break语句结束的,则x与数组中的元素重复,此时i必然小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明x的值与数组中的元素不重复,则此时i的值等于n。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:删除指针p所指字符串中的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用“#”结束输入。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includefun(char*p){inti,t;charc[80];/*********found*********/For(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];/*********found*********/c[t]="\0";strcpy(p,c);}voidmain(){charc,s[80];Inti=0;printf("Inputastring:");c=getchar();while(c!=’#’){s[i]=c;i++;c=getchar();)s[i]=’\0’;fun(s);puts(s);}标准答案:(1)for(i=0,t=0;p[i];i++)(2)c[t]=’\0’;知识点解析:该题目考查C语言关键字的书写,c语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为‘\0’,而非“\0”,“\0”表示一个字符串。该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否为空格、跳格符(制表符)或换行符。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,若二维数组中的数据为:333333334444444455555555则一维数组中的内容应该是:333333334444444455555555。注意:部分源程序在文件PROGl.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#includevoidfun(int(*s)[10],int*b,int*n,intmm,intnn){}voidmain(){FILE*wf;intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",w[i][j]);printf("\n");}fun(w,a,&n,3,4);printf("TheAarray:\n");for(i=0;i标准答案:voidfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j,k=0;for(i=0;i知识点解析:本题可以用两个循环来处理,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:for(i-0;i国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用菜单命令或直接使用VC6打开考生文件夹下的工程projl。程序中位于每个//ERROR**********found**********下的语句行有错误,请加以更正,不得修改程序的其他部分。更正后程序的输出应该是:两点之间的距离为:7.5231注:意:只能修改每个//ERROR**********found**********下的那一行,不要改动程序中的其他内容。#include#includeusingnamespacestd;classPoint{private:doublex,y,public:Point(doublexx,doubleYY)(x=xx;y=yy;}//ERROR**********found**********doubleMyDistance(Point&a,Point&b);},doubleMyDistance(Point&a,Point&b){//ERROR**********found**********doubledx:x—b.x;//ERROR**********found**********doubledy=a.y—y;returnsqrt(dx*dx+dy*dy);}intmain(){Pointp1(3.6,6.4),p2(8,0.3);doubled=MyDistance(pl,p2);cout<<“两点之间的距离为:”<标准答案:(1)frienddoubleMyDistance(Point&a,Point&b);(2

温馨提示

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

评论

0/150

提交评论