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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷8(共9套)(共28题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:Number=7Number=12注意:错误的语句在∥********error********的下面,修改该语句即可。#1nclude<10Stream.h>ClasSCMyClasS{public:∥********error********CMyClass(inti):Number=i{errorreturnNumber;}voidset(inti){Number=i;}voiddisplay(){cout<<”Number=”<display();P一>set(12);P一>display();return;}标准答案:(1)CMyClass(inti):Number(i)(2)应删除:returnNumber;(3)CMyClass*P=newCMyClass(7),知识点解析:(1)第1个标识下是声明构造函数,并使用初始化列表完成成员变量的初始化,可知第1标识下的初始化列表错误,正确的应该是“CMyClass(inti):Number(i)”。(2)构造函数不能有返回值,不能用return来返回值,故第2个标识下应将“returnNumber;”删除。(3)类实例在不指定构造函数的情况下,调用的是默认无参数的构造函数,此时成员变量Number是不确定的,在定义对象时应使用已定义的构造函数,根据输出结果可知P指向的对象的Number初始化值为7,故第3个标识下应改为“CMyClass*P=newCMyClass(7);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。完成函数fun(char*S,inta[]),其功能是把S中出现的数字转换成数字存储在a口中,然后返回转换的个数。例如:s=”1234abcdef567”:则:a[]中存储着1234567返回:7注意:不能修改程序的其他部分,只能修改fun()函数。#lnclude<10Stream.h>intfun(char*s,inta[]){}intmain(){inta[1024];intlen=fun(“1234abcdef567”.a);for(inti=0;i标准答案:intj=0;for(inti=0;s[i]!=0;i++)//字符串内循环{if(S[i]>=‘0’&&s[i]<=‘9’)//判断字符是否为0~9的字符(a[j++]=s[i]一‘0’;//如果为0~9的字符,转换为整型}}returnj;//返回数字个数知识点解析:(1)该程序功能是把字符串中出现的数字转换成数字存储在数组中,然后返回转换的个数。其中,字符和整型的ASCII差为96,即为’0’的ASCII码值。(2)从已给部分源程序的main主函数开始入手,核心函数fun实现题目中要求的功能,其中intfun(char*s,inta[])中的S为要转换的字符串,a为存放转换为数字的数组,返回值为转换的个数。解题思路(1)i变量用来记录转换的个数,首先初始化为0。(2)然后利用for循环对每一个当前字符进行判断是否为数字字符。(3)如果为数字字符,就将其减去字符‘0’,即实现字符和整型的转换。并且,将i的变量值加1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)重载运算符int,请在注释∥********1********后添加适当的语句。(2)重载运算符“<<”,请在注释∥********2********后添加适当的语句。(3)在主函数main()中定义变量i,并调用对象obj的int运算符,给变量赋初值为10,请在注释∥********3********后添加适当的语句。(4)调用obj的“<<”运算符输出:HelloTIest注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include<10stream>usingnamespacestd;C1assTestClass{public:∥********1********{cout<<”int”<标准答案:(1)添加语句:operatorint()(2)添加语句:operator<<(char*str)(3)添加语句:inti=int(obj);(4)添加语句:obj<<“HelloTest”;知识点解析:本题的功能是通过重载运算符实现字符串输出。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类TestClass的运算符重载函数实现各种输出操作。解题思路(1)题目1要求“重载运算符int”的定义。运算符重载的方法是定义一个重载运算符的函数,其一般格式为:函数类型operator运算符名称(形参列表){对运算符的重载处理}。所以第1个标识下,重载运算符int的语句为“operatorint()”。(2)题目2要求“重载运算符‘<<”’。同(1),第2个标识下“<<”的重载函数定义为“operator<<(chaLr*str)”。(3)题目3要求“在主函数main()中定义变量i,并调用对象obj的int运算符,给变量赋初值为10。”定义变量i,即inti。“()”中的返回值为10,所以调用对象obj的int运算符,给变量赋初值为10,就是int(obj),即第三个标识下添加“inti=int(obj);”。(4)题目4要求“调用obj的“《”运算符输出“HelloTest””。重载运算符“<<”后,不仅能输出标准类型数据,而且可以输出用户自己定义的类对象。所以直接添加要输出的字符串即可,即“obj<<"HelloTest";”。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到sl,s2中。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includevoidmain(){char*s1;chars2[1024];cout<<”pleaseinputastring:”<标准答案:(1)s1=newchar[1024];(2)delete[]s1;’(3)删除“deletes2;”语句知识点解析:本题是主要是处理程序运行后是否有内存遗漏的问题。对于这类问题主要是根据调试环境中的错误提示以及警告提示进行处理。解题思路(1)sl变量为指针变量,在使用前要对其分配空间,所以第1个标识下添加“sl:=newchar[1024.];”。(2)为了防止内存空间的泄漏,指针变量使用后,要将其空间释放,第二个标识下“delete口s1;”。(3)s2是数组变量,空间是在使用前静态分配的,不是使用前动态分配的,所以使用后不用释放内存空间,这里应该删除“deletes2;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数func(intd[],intn)的功能是将长度为num的数组d的每一个数字是奇数的扩大l倍,并存储到数组d中。例如:123456789返回:226410614818将func(intd[],intnum)%b充完整。注意:请勿改动主函数。#includevoidfunc(intd[],intnum){}intmain(){intData[]={1,2,3,4,5,6,7,8,9),func(Data,9);for(inti=0;i标准答案:1for(inti=0;i知识点解析:(1)由审题分析可知,利用循环来逐个判断d[]中的元素,d[]中元素个数为num,因此循环变量从0变化至lqtlm。(2)在循环内,用if判断该元素是不是奇数,即if(d[i]%2!=0),将满足条件的d[i]扩人一一倍。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开源程序文件modi3.cpp。此程序的功能是将outl.txt文件中的内容输出到屏幕与文件中。输出如下:李一1.78m21王一1.65m23out2.txt文件的内容如下:李一1.78m21王一1.65m23其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)以输入方式打开文件outl.txt,请在注释∥********1********后添加适当的语句。(2)以输出方式打开文件out2.txt,请在注释∥********2********后添加适当的语句。(3)从文件中获得一个字符,判断是否结束,如果结束则退出输出。请在注释∥********3********后添加适当的语句。(4)把获得的字符输出到文件中,请在注释∥********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#include#include#includevoidmain(){charch;fstreaminfile,outfile;∥********2********infile.open(“outl.txt”);if(!infile){cout<<"outI.txt文件不能打开II<标准答案:(1)将“infile.open(”OUtl.txt.”);”补充完整为:infile.open(”ontl.txt”,iOS::in);(2)将“outfile.open(ut2.txt”);”补充完整为:outfile.open(”out2.txt”,ios::out);(3)将“while()”补充完整为:wh.ile(infile.get(ch))(4)添加语句:outfile<知识点解析:本题的功能是将outl.txt文件中的内容输出到屏幕与文件中。解题思路为在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序是对文件的操作。解题思路(1)题目1要求“以输入方式打开文件outl.txt”。在C++中调用文件流的成员函数open的格式为,文件流类.open(…’文件名”,ios::in),所以第1个标识下语句就该为“infile.open(”outl.txt",ios::in);”。(2)题目2要求“以输出方式打开文件out2.txt”。同理第2个标识下修改为“outflle.open(“out2.txt",ios::out);”。(3)题目3要求“从文件中获得一个字符,判断是否结束”。程序中的“while()”循环判断语句中缺少从文件中获得的字符,所以这里补全while循环判断条件,即“while(infile.get(ch))”。(4)题目4要求“把获得的字符输出到文件中"。在C++中,用流插入运算符为“<<”,所以根据题干中的要求在第四个标识下补全写入文件的流操作语句,即“outfile<国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,请修改程序中的错误,使程序能得出正确的结果:num:0num:1num:10注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//*******error*******的下面。#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<知识点解析:(1)打开modi1.cpp,调试程序,显示错误提示为第二标识下“modi1.cpp(22):errorC2512:TestClass’:noappropriatedefaultconstructoravailable”,主函数中首先调用的就是第2个标识下的TestClassprint函数,构造函数的名字和类的名字是一样的,而程序中给出的“TestClassprint;”没有给出参数,所以程序调试时无法确定调用的函数。根据TestClass构造函数“TestClass(inti)”的定义,应该存在int型参数,并且题目要求第一次输出的值为“0”,所以第2个标识正确的调用函数为“TestClassprint(0);”。(2)运行,发现第一次的输出正确,但是第二次的输出值为“-858993460”,并不是题目中要求的“1”。在主函数中,可知第二次输出调用的是“print.Print();”,即类TestClass的成员函数“Print()”。成员函数Print的定义“voidPrint()const”中的输出语句为“cout<<”num."<i=i+1;”或“TestClass::i=i+1;”或“(*this).i=i+1;”。(3)主函数中通过“cout<<”num"”<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi.cpp。请完成函数fun(char*s1,char*s2),此函数的功能是计算s1中出现s2的个数,当不出现时,则返回0。如:s1为"1112223333aaaaeeffd"s2为"11"则返回1s2为"aa"则返回2注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。{}include//注意只能使用int类型,不能类型转换intfun(char*s1,char*s2){}voidmain(){chars1[1024];chars2[256];cout<<"pleaseinputastring:"<标准答案:intsize=0;//初始化字符串统计变量个数intsllen;ints2len;for(sllen=0;s1[sllen]!=0;sllen++);//第一个字符串循环for(s2len=0;s2[s2len]!=0;s2len++);//第二个字符串循环for(inti=0;i知识点解析:(1)size变量用来存放s1中出现s2的个数,初始值赋为0。(2)然后利用for循环对s2中的每一个字符与s1中的字符进行比较。(3)如果循环中有符合条件的字符串,就将变量size个数加1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、用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与其他函数中的任何内容。#includeclassTestClass{public://********1********TestClass(inti,intj){m_Num1=i;m_Num3+=i;}voidPrint(){cout<<"m_Num1="<标准答案:(1)添加语句:TestClass(inti,intj):m_Num2(j)(2)添加语句:friendvoidfun();(3)添加语句:intTestClass::m_Num3=0;(4)将“Num.Add();”补充完整为:Num.Add(5);知识点解析:(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;”。(4)函数fun()中“Num.Add();”语句应该是调用类“TestClass”中的成员函数“voidAdd(inti)”。其定义中存在参数inti,所以注释下修改的语句缺少参数。主函数首先调用“Num.Print();”,即实现题目中输出的前三条语句,而“fun();”语句实现后面三条语句的输出,即“m_Num3=7”才是调用Nmn.Add的输出结果,即“m_Num3+=i;”的计算结果。“TestClassNum(1,2);”中将i的值初始化为1,“m_Num3”的值在上一次“Num.Print();”调用中为1,如果计算结果为7,那么Add(inti)中i的初始化值为5,即“Num.Add(5);”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:(4,5)7,8(4,8)注意:错误的语句在∥********error********的下面,修改该语句即可。#includeclasSCobj0{public:cobj0(inti,intj){x=i;y=j;}∥********4********virtualvoidmove(inta;intb){x+=a;y+=b;}voidprint(){cout<<¨(“<标准答案:(1)virtualVoidmove(inta,intb)(2)CObj1(inti,intj,intk,int1):CObj0(i,j)(3)CObj0::print();知识点解析:(1)编译程序可知第1标识下有错误,此处是声明虚函数,虚函数的声明方式为:virtual<类型说明符><函数名>(<参数表>),参数表中各参数之间应该用“,”隔开,因此第1个标识下应改为“virtualvoidmove(inta,intb)”0(2)在主函数里“CObjlobjl(1,3,7,8);”,可知构造函数CObjl()有四个参数,完成变量m、n、x和Y的初始化,k和l赋值给m和n,i和j赋值给X和Y,X和y的初始化可通过基类构造函数来完成对X和Y的初始化,第2个标识下应改为CObj1(inti,intj,intk,int1):CObjO(id)。(3)由程序运行结果可知标识3下调用的是基类的print()~数,而“print();”是调用的派生类的print()函数,因此此时只能通过类名来直接调用print()函数,即第3个标识下应改为“CObj0::print();”0二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。程序的功能是寻找1~500以内的亲和数并显示出来,函数amicableNum(intm,intn)判定两个数是否是亲和数。亲和数的定义为:两个数m和n,如果n的所有因子之和(因子除掉自身)等于m,且m的所有因子等于n,则m、n是互为亲和数。注意:不能修改程序的其他部分,只能补充amicableNum(intm,intn)函数。#includeintamicableNum(intn){intsum=0;for(inti=1;i标准答案:if(amicableNum(m)==n&&amicableNum(n)==m)return1;return0;知识点解析:(1)程序中定义了两个amicableNumO函数,由于参数个数不同重载了amicableNumO函数,函数amicableNum(intn)返回n的因子和,而函数amicableNum(intin,intn)~lJ是判断m和n是不是亲和数,两个函数功能并不相同。(2)在amicableNum(intm,intn)函数中,可调用amicableNum(hatn)函数求m和11的凶子和,然后比较两个因子和,如果两个因子和相同则返回真,否则返回假。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成类Rect的构造函数,实现对变量left、fight、top、bottom的初始化,缺省值都为0,请在注释∥********1********后添加适当的语句。(2)完成类Rectangle的构造函数,请在注释∥********2********后添加适当的语句。(3)完成计算矩形对角线长度函数Diagonal0,请在注释∥********3********后添加适当的语句。(4)完成计算周长函数Girth(),请在注释∥********4********后添加适当的语句。程序输出:50140注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include#includeclassRectangle{public:intlefttrightltoplbottom;∥********1********{left=1;right=r;top=t;bottom=b;}∥********2********{1eft=rc.1eft;right=rc.right;top=rc.top;bottom=rc.bottom;}floatDiagonal(){∥********3********return}intGirth(){∥********4********return}};intmain(){Rectanglerect(20,50,40,80);Rectanglerect2(rect);cout<标准答案:(1)添加语句:Rectangle(int1,intr,intt,intb)(2)添加语句:Rectangle(Rectangle&rc)(3)将“return”补充完整为:returnsqrt((right—left)*(right—left)+(bottom—top)*(bottom—top));(4)将“return”补充完整为:return2*((right—left)+(bottom—top));@解题思路@(1)构造函数函数名和类名一致,构造函数可以重载,即多个构造函数有相同的名字不同的参数,显然题目当中两个构造函数均有参数,由函数体体内“left=1;right=r;top=t;bottom=b;”,说明l,r,t,b为构造函数的参数,因此第1标识处应添加“Rectangle(int1,intr,intt,intb)”。(2)和题目1一样,构造函数名和类名一致,函数体内:“left:re.1eft;right=re.right;top=rc.top;bottom=rc.bottom;”,显然re是Rect对象,故该构造函数的参数为re对象,故第2标识处应添加“Rectangle(Rectangle&rc)”。(3)由对象的left、fight、top、boaom值可以求得矩形的长和宽,因此可采用勾股定理计算对角线长度,即第3标识处补充完整为:returnsqrt((right—left)*(right—left)+(bottom-top)*(bottom-top))。(4)同样的周长可由长和宽的数值计算得到,长和宽之和的两倍即周长,第4标识处补充完整为:return2木((right—left)+rbottom—top))。知识点解析:暂无解析国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程proj1,该工程中包含程序文件main.epp,其中有类Foo和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:X=aY=42注意:只修改每个“//ERROR**********found**********”下的那一行,不要改动程序中的其他内容。#includeusingnamespacest;d;classFoo{public:Foo(charx){x=x;)chargetX()const{returnxj}public:staticintY;private:charx_;};//ERROR*********found*********intFoo.y_=42;intmain(intargo,char*argv[]){//ERROR*********found*********Foof;//ERROR*********found*********cout<<”X=”<标准答案:(1)intFoo::y_=42;(2)Foof(’a’);(3)cout<<”X=”<知识点解析:(1)主要考查考生对静态成员的掌握,因为静态整型变量y_是Foo类的公有成员,所以给y_赋值时要加上“Foo::”,即intFoo::Y_=42;。(2)主要考查考生对构造函数的掌握,题目要求程序输出:X=aY=42可以知道,在给Foo类的f声明时要同时初始化为字符a,即语句Foof(‘a’);。(3)主要考查考生对成员函数的掌握,因为x是类Foo的私有成员,所以不能在main函数中直接调用,要通过公有成员函数getX()调用。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹prog2下的工程prog2,此工程中包含一个程序文件main.cpp,其中有“班级”类Class和“学生”类Student的定义,还有主函数main的定义。在主函数中定义了两个“学生”对象,他们属于同一班级。程序展示,当该班级换教室后,这两个人的教室也同时得到改变。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:改换教室前:学号:0789姓名:张三班级:062113教室:521学号:0513姓名:李四班级:062113教室:521改换教室后:学号:0789姓名:张三班级:062113教室:311学号:0513姓名:李四班级:062113教室:311注意:只能在横线处填写适当的代码,不要改动程序中的其他内容。#includeusingnamespacestd;classClass{//“班级”类public:ClasS(constchar*id,constchar。room){strcpy(classid,id);//*********found**********}constchar*getClassID()const{re-turnclassid;}//返回班号//*********found*********constchar*getClassroom()const{______}//返回所在教室房号voidchangeRoOmTO(constchar*newroom){//改换到另一个指定房号的教室strcpy(classroom,newroom);}private:charclassid[20];//班号charclassroom[20];//所在教室房号};classStudent{//“学生”类charmy_id[10];//学号charmy_name[20];//姓名Class&my_class;//所在教室public://**********found**********Student(constchar*the—id,constchar*the—name,Class&the—class):_______{strcpy(my_id,the_id);strcpy(my_name,the_name);}constchar*getID()const{returnmy_id;)constchar*getName()const{returnmy_name;)ClassgetClass0const{returnmy_class;)};voidshowStudent(Student*Stu){cout<<”学号:”<getID()<<"";cout<<”姓名:”<getName()<<"";cout<<”班级:”<getClass().getClassID()<<””;cout<<“教室:”<getClass().getClassr00m()<标准答案:(1)strcpy(classroom,room);(2)retumclassroom;(3)my_class(the_class)(4)cla.changeRoomTo(”311”):知识点解析:(1)主要考查考生对strcpy函数的掌握情况,根据上一条语句:strcpy(class_id,id);可知,这条语句要复制字符串room,因此使用strcpy函数复制,即strcpy(classroom,room);。(2)主要考查考生对函数返回值的掌握情况,根据函数要求:返回所在教室房号及函数要求返回的类型为constchar*,可以得出这里直接使用return语句返回classroom即可。(3)主要考查考生对构造函数的掌握情况,先看函数体中:strcpy(my_id,the_id);strcpy(my_name,the_name);可知只有参数Class&the_class未使用,因此在这里使用成员列表初始化给my_class赋初始值。(4)主要考查考生对成员函数调用的掌握,程序要求062113班的教室由521改换到311。在类Class中已经定义了函数:voidchangeRoomTo(constchar*new_room),因此直接调用函数changeRoomTo即可。三、综合应用题(本题共2题,每题1.0分,共2分。)3、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,该文件中定义了用于表示日期的类Date、表示人员的类Person和表示职员的类Staff;程序应当显示:张小丽123456789012345但程序中有缺失部分,请按以下提示把缺失部分补充完整:(1)在“//**1******found****”的下方是析构函数定义中的语句,它释放两个指针成员所指向的动态空间。(2)在“//**2******found****”的下方是rename函数中的一个语句,它使指针name指向申请到的足够容纳字符串new_name的空间。(3)在“//**3******found****”的下方是构造函数定义的一个组成部分,其作用是利用参数表中前几个参数对基类Person进行初始化。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一行中完成,否则评分将产生错误。//proj3.cpp#includeusingnamespacestd;ClaSSPerson{char*idcardno;//用动态空间存储的身份证号char*name;//用动态空间存储的姓名boolismale;//性别:true为男,false为女public:Person(constchar*pid,constchar*pname,boolpmale);一Person(){//**1************found**********____________;}constchar*getIDCardNO()const{returnidcardno;)constchar*getName()const{returnname;)voidrename(constchar*newname);boolisMale()const(returnismale;)},classStaff:publicPerson{char*department;doublesalary;public:Staff(constchar*idcardno,constchar*P_name,boolis_male,constchar*dept,doublesal);—Staff(){delete[]department;)constchar*getDepartment()const{returndepartment;)voidsetDepartment(constchar*d);doublegetSalary()const{returnsalary;)voidsetSalary(doubleS){salary=S;}},Person::Personfconstchar*idcardno,constchar*P_name,bool_is_male):ismale(iSmale){idcardno=newchar[strlen(idcardno)+1];strcpy(idcardno,idcardno);name=newchar[strlen(pname)+1];strcpy(name,Pname);}voidPerson::rename(constchar*newname){delete[]name;//**2************found**********_______;strcpy(name,newname);}Staff::Staff(constchar*idcardno,constchar*Pname,boolismale,//**3************found**********constchar*dept,doublesal):________{department=newchar[strlen(dept)+1];strcpy(department,dept);salary=sal;}voidStaff::setDepartment(constchar*dept){delete[]department;department=newchar[strlen(dept)+1];strcpy(department,dept);}intmain(){StaffZhangsan(”123456789012345”,"张三",false,”人事部”,1234.56);Zhangsan.rename(”张小丽”);cout<标准答案:(1)delete[]idcardno,name(2)name=newchar[strlen(new_name)+1](3)Person(id_card_no,p_name,is_male)知识点解析:(1)主要考查考生对析构函数的掌握,题目要求释放两个指针成员所指向的动态空间。释放动态空间应使用delete语句,因为要释放两个指针,使用语句:delete[°]idcardno,name;实现。注意当释放多个指针时,中间用逗号隔开。(2)考查动态数组分配空间,题目要求指针natne指向申请到的足够容纳字符串new_name的空间。使用strlen(new_name)得到字符串new_name的长度,但是这里要注意加1。(3)主要考查考生对派生类构造函数的掌握,题目要求利用参数表中前几个参数对基类Person进行初始化。派生类的构造函数要使用成员列表初始化法对基类初始化,因此为constchar*dept.,doublesal):Person(id_card_no,p_name,is_male)。4、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1*******found****”的下方是构造函数的定义,它用参数提供的坐标对x和y进行初始化。(2)在“//**2******found****”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其X坐标等于两向量X坐标之差,其Y坐标等于两向量Y坐标之差。(3)在“//**3******found****”的下方,语句的功能是使变量v3获得新值,它等于向量v1与向量v2之和。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#include<iostream>usingstd::ostream;usingstd::cout;usingstd::endl;classMyVector{//表示二维向量的类doubleX;//x坐标值doubley;//Y坐标值public:MyVector(doublei=0.0,doublej=0.0);//构造函数MyVectoroperator+(MyVectorj);//重载运算符+friendMyVectoroperator一(MyVec—tori,MyVectorj);//重载运算符一friendostream&operator<<ostream&OS,MyVectorv);//重载运算符<<};//**1************found**********___________(doublei,doublej):X(i),Y(j){)MyVectorMyVector::operator+(MMVecorj){returnMyVector(x+j.X,Y+j.y);}MyVectoroperator一(MyVectori,MyVectorJ){//**2*************found***********returnMyVector(_______);}ostream&operator<<(ostream&OS,MyVectorV){OS<<’(’<<v.X<<’,’<<v.Y<<’)’;//输出向量v的坐标returnOS;}intmain(){MyVectorvl(2,3),v2(4,5),v3;//**3************found**********v3=__________;cout<<v3<<end1;return0;}标准答案:(1)MyVector::MyVector(2)i.x—j.x,i.y—j.y(3)v1+v2知识点解析:(1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即MyVector::MyVectoro(2)主要考查重载运算符“一”的返回语句,返回值应为向量i和j的差,即MyVector(i.x—j.x,i.y—j.y);。(3)主要考查重载运算符“+”的使用,由题目可知v3是vl和v2的和,前面我们已经重新定义了运算符“+”,所以在这里直接使用语句v3=v1+V2;即可。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR*********found**********”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:NUM=0Value=1注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<lostEeam>usingnamespacestd;classMyClass{int_i;friendVOidIncrement;(MyClass&f);public:constintNUN;//ERROR*******found*******NyClass(inti=0){NUM=0;_i=i;}intGetValue()const{return_i;}};//ERROR*******found*******voidIncrement(){f._i++;)intmain(){HyClassobj;//ERROR*******found*******NyClass::TncEement(ohj);cout<<"NUN="<<oh3.NUN<<endl<<"Value="<<obj.GetValLie()<<endl;retuEn0;}标准答案:(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、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有坐标点类point、线段类Line和三角形类Triangle的定义,还有main函数的定义。程序中两点间距离的计算是按公式d=实现的,三角形面积的计算是按公式f=实现的,其中s=请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:Side1:9.43398Side2:5Side3:8area:20注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostEeam>#include<cmath>usingnamespacestd;classPoint{//坐标点类public:constdoublex,y;Point(doublex=0.0,doubley=0.0):x(x),y(y){}//*******found*******doubledistanceTo(_______)const{//到指定点的距离returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));}};classLine{//线段类public:constPointp1,p2//线段的两个端点//*******found*******Line(Pointp1,Pointp2):_______{}doublelength()const{returnp1.distanceTo(p2);}//线段的长度};classTriangle{//三角形类public:constPointp1,p2,p3;//三角形的三个顶点//*******found*******Triangle(_______):p1(p1),p2(p2),p3(p3){}doublelengthl()const{//边p1,p2的长度returnLine(p1,p2).length();}doublelength2()const{//边p2,p3的长度returnLine(p2,p3).length();}doublelength3()const{//边p3,p1的长度returnLine(p3,p1).length();}doublearea()const{//三角形面积//*******found*******doubles=_______;returnsqrt(s*(s-lengthl())*(s-length2())*(s-length3()));}};intmain(){Triangler(Point(0.0,8.0),Point(5.0,0.0),Point(0.0,0.0));cout<<"Side1:"<<r.length1()<<endl;cout<<"Side2:"<<r.length2()<<endl;cout<<"Side3:"<<r.length3()<<endl;cout<<"area:"<<r.area()<<endl;return0;}标准答案:(1)constPoint&p(2)pl(p1),p2(p2)(3)Pointp1,Pointp2,Pointp3(4)(length1()+length2()+length3())/2知识点解析:(1)主要考查考生对函数形参的掌握,由函数的注释可知有本坐标点到达某个坐标点类的距离,再根据函数体returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));可知,该坐标点类名为p,因此可以知道形参为Point&p,为了不改变该坐标点的值,前面要加上const。(2)主要考查考生对构造函数的掌握,对于常变量型私有成员constPoint.p1,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、请打开考生文件夹下的解决方案文件proj3,其中定义了一个字符串变量类StringVar。类成员的说明在程序注释中。请在//********333********和//********666********之间填写StringVar成员函数和友元函数的实现代码。在main函数中给出了一组测试数据,运行时输入:HelloKitty此情况下程序的输出应该是:HelloKittyBorgBorg注意:只需在//********333********和//********666********之间填入所编写的若干语句,不要改动程序中的其他内容。//StringVar.h#include<ioStream>#include<cstdlib>#include<cstddef>#include<cstring>usingnamespacestd;VOidwriteToFile(constchar*path);classStringVar{public:StringVar(intsize);//构造函数,size为字符串长度(字符个数)初始值;字符串内容初始化为空串StringVar(constchara[]);//构造函数,用参数数组a的内容初始化当前对象StringVar(constStringVar&strobj);//复制构造函数~StringVar(){delete[]value;};//析构函数intlength()const{returnstrlen(value);}//从输入流ins输入一个字符串,其中可以包括空格voidinput_line(istream&ins);//返回字符串首地址char*getValue()const{returnvalue;}private:char*value;//字符串首地址intmax_length;//字符串最大长度(字符个数最大值)};//将thestring通过输出流outs输出ostream&operator<<(ostream&outs,constStringVarthe_string);//main.cpp#include<iostream>#include<string>#include"StringVar.h"//********333********//********666********intmain(){StringVarnamel(30),name2("Borg");name1.input_line(cin);StringVarname3(name2);cout<<name1<<endl;cout<<name2<<endl;cout<<name3<<endl;writeToFile(".\\");return0;}//writeToFile.cpp#include<iostream>#include<fstream>#include<SStream>#include<string>usingnamespacestd;#include"StringVar.h"voidwriteToFile(constchar*path){charfilename[30];strcpy(filename,path);strcat(filename,"out.dat");ofstreamfout(filename);istringstreamis(string("JennyZheng"));StringVarname1(40),name2("John");name1.inputline(is);StringVarname3(name2);fout<<name1<<name2<<name3;fout.close();}标准答案:StringVar::StringVar(intsize):max_length(size)//使用成员初始化列表初始化max_length{value=newchar[size];value[0]=’\0’;}StringVar::StringVar(constchara[]){max_length=strlen(a)+1;value=newchar[max_length];Strcpy(value,a);}StringVar::StringVar(constStringVar&strobj){max_length=strobj.max_length;value=newchar[strlen(strobj.value)+1];strcpy(value,strobj.value);}voidStringVar::input_line(istream&ins){inti=0;charch;while(i<maxlength-1&&(ch=ins.get())!=’\n’){value[i++]=ch;}value[i]=’\0’;}ostream&operator<<(ostream&outs,constStringVarthe_string){outs<<the_string.getValue()<<endl;returnouts;}知识点解析:由StringVar.h这个头文件可知:头文件中定义了StringVar类,它包含的成员信息如下:两个数据成员:char*类型的value,指向字符串的首地址;int类型的max_length,表示字符串的最大长度。两个构造函数:接收int类型的构造函数和接收constchara[]的构造函数。一个复制构造函数:用参数strobj对象的成员值给当前对象的成员赋值;析构函数:使用delete[]释放value指向的地址空间;length()成员函数:返回成员value指向的字符串长度;input_line()成员函数:使用输入流参数输入一个字符串,保存到value指向的内存空间;getValue()成员函数:常成员函数,返回value的值。另外类定义体外部还声明一个重载“<<”运算符函数,将StringVar对象中value指向的字符串输出,并返回输出流outs的引用StringVar.h中,已经给出的定义有:析构函数、length()函数和getValue()函数,所以需要我们完成的函数定义有:构造函数、复制构造函数、input_line()函数和重载的“<<”运算符函数①StringVar(intsize);题意指出,size为字符串长度(字符个数)初始值,字符串内容初始化为空串,所以需要使用size设置成员max_length,为value申请size个字符的存储空间,并把value的第一个字符设置为’\0’表示空串,这样保证析构函数的delete[]也是正确的。②StringVar(constchara[]);题意指出,使用参数数组a的内容初始化对象的成员,即将数组a中的内容,存放到value指向的内存空间,由于value是使用new分配的(保证析构函数的delete[]是正确的),所以不能简单的把数组a的首地址赋给value,需要将数组a的内容复制到value指向的内存空间中,另外成员max_length,初值最小必须是value指向的内存空间长度,即value指向的字符串长度+l(题意中max_length表示字符个数的最大值,所以需要包含字符串结束符’\0’)(此构造函数的形参必须传人的是字符串,如果是字符数组,必须传入数组的长度,以防数组a的最后一个字符不是结束符’\0’,此时strlen()函数获取的长度,就不是字符数组a的字符个数)③slringVar(constslringVar&strobj);复制构造函数需要将形参strobj的成员赋给当前调用该复制构造函数的对象成员,在赋值value时,同样需要为value分配足够的内存空间。④input_line(istrearn&ins);input_line()函数需要使用形参ins输入流,输入一个字符串存放到value中,题意要求可以输入空格,所以我们不能直接用输人流ins和输入运算符,因为输入运算符会丢弃空白符、空格符和制表符,可以使用输入流ins的成员函数:get()和while循环,逐个输入字符存放到value下标i的字符中,直到输入的字符为换行符或value存满(i=max_length)为止,当这两个条件满足其一,那么就应该停止输入,另外需要注意:value指向的字符串结尾,必须包含空字符’\0’,所以下标。max_length-1必须是空字符,循环输入时,i取值最大为max_length-2。⑤ostream&operator<<(oStream&outs,conststringVarthe_string);输出运算符重载函数,题意要求将the-string通过输出流outs输出,由于the_string是StringVar对象,所以输出的应该是对象的成员value指向的字符串,根据返回值可知,函数必须返回输入流ostream的引用;另外由于第一形参是输入流outs,所以无法通过stringVar对象来调用,该函数不是类的成员函数,函数定义时,不能限定stringVar作用域,由于该函数不是类的成员函数,所以使用输出流outs输出value指向的字符串时,不能直接使用私有成员value,而是应该使用getValue()公有成员函数,返回value的值,再输出。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到s1,s2中。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includeVoidmain(){char*s1;chars2[1024];cout<<“pleaseinputastring:”<标准答案:(1)S1=newchar[1024];(2)delete[]s1;(3)删除“defetes2;”语句知识点解析:本题是主要是处理程序运行后是否有内存遗漏的问题。对于这类问题主要是根据调试环境中的错误提示以及警告提示进行处理。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入0时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数fun(),函数fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助表元。注意:不能修改程序的其他部分,只能修改fun()函数。#includeclassNODE{public:intdata;NODE*nexl;};voidfun(NODE*list,intx){}voidmain(){intx;NODE*head,*P;/*首先建立只有辅助表元的空链表*/head=newNODE;head->next=NULL;std::couL<<“Enterintegers,endwith0”<>x;if(x==0)break;fun(head,x);}for(P=head一>next;P!=NULL;p=p一>next)std::cout<data<<‘’;std::cout<next;delerehead;head=P;}while(P);}标准答案:NODE*u,*v,*p;u=list;v=u一>next;while(v!=NULL&&Xdata)//寻找插入的位置{u=v;v=v->next;}if(v==NULL‖X>v一>data)//判断是否为新的元素{p=newNODE;P一>data=x;//生成新的元素P一>next=v:u->next=p;//插入新的元素}知识点解析:(1)该程序功能是构造一个以大到小顺序链接的链表。它的解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。(2)从己给部分源程序的main主函数开始入手.核心函数voidfun(NODE*list,intx)中的list参数为单链表,x为要插入的数据。三、综合应用题(本题共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)完成成员函数isInclude(intn)的定义,该函数检查参数n是否在类的数据成员数组elems中,如果在返回1,否则返回0。请在注释∥********4********之后添加语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#defineMAXLENGTH500classCArray{public:CArray()

温馨提示

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

评论

0/150

提交评论