1、国家二级 C+机试(操作题)模拟试卷 435及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modilcpp,但该程序运行时有错,请改正 main()函数中的错误,使程序的输出结果如下: Constructor Default constructor Area is 12 Area is 0 Area is 12 注意:错误的语句在*error*的下面,修改该语句即可。#includeiostreamhclass CRectangleprivate:double length,width;public:
2、 CRectangle() cout“Default constructorn“; CRectangle(double 1,double w) length=1;width=w; cout“Constructor n“; void Set(double 1,double w) this-length=1; this-width=w; void GetArea() cout“Area is“length*widthend1; void main() CRectangle Rect1(30,40); *error* CRectangle Rect2(1); *error* Rect1GetArea
3、(); *error* Rect2Set(0); Rect2GetArea();Rect3GetArea(); (分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码。补充函数convert(long s,long*str),使之从低位开始取出长整型变量 S中奇数位上的数,依次存放在数 str中。例如,当 s中的数为:7654321 时,str 中的数为:7531。 注意:请勿改动主函数。 #include void convert(long s,long *str) void main() lon
4、g s,res, couts; convert(s,&res); couts; convert(s,&res); cout“The result is: “ res_正确答案:(正确答案:long s1=10; *str=s10;先取个位数 while(s0) s=s100; 每次除以 100, *str=s10*s1+*str; 取除 以 100后的个位数,str 增加 1位 s1=s1*10; )解析:解析:(1)由审题分析可知,奇数位即为个位数、百位数、万位数,取个位数比较简单,s10便得到了个位数。获取百位数可由 s100 后,再和 lO取余得到,同样万位数可由 s10000,再和 1
5、0取余得到,从百位数开始后面的奇数位都是在上次的基础上再除以 100后再取余数,因此可利用循环。 (2)在循环外先取 S的个位数,然后进入循环,s=s100,获取除以 100的个位数方法为 s10,这个数是*str的高一位,乘以它所在*str 中的位置的权值,然后和以前的值相加便得到这次*sir 值,如此循环,直到 s为 0为止。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成构造函数的定义,使得数据成员变量 filename和 contex为空,
6、内容长度 FileLength为 0。请在注释*1*后添加适当的语句。 (2)完成析构函数,对 contex内存的释放。请在注释*2*后添加适当的语句。 (3)完成 WriteFile()函数,用来对 contex内容进行设置填充内容,如果以前有内容,则删除以前的内容,重新填写。请在注释*3*后添加适当的语句。 (4)完成 CopyFile()函数,完成将参数对象的 contex的内容拷贝到当前的文件内容中,请在注释*4*后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeiostreamhclass MyFileClassprivate: char
7、 filename64; char *contex; int FileLength;public: MyFileClass() *1* contex=NULL; FileLength=0; MyFileClass() if(FileLength) *2* void OpenFile(char *str,intlen) for(int i=0;ilen;i+) filenamei=stri; filenamelen=0; FileLength=0;if(contex) deletecontex; contex=NULL; void WriteFlie(char *str,int len) if(
8、contex!=NULL) *3* contex=new charlen+1; for(int i=0;ilen;i+) contexi=stri; contexlen=0; FileLength=len; void CopyFile(MyFileClass&file) *4* void display() coutcontexend1; ;int main() MyFileClass file1,file2; filelOpenFile(“txt1“,4); file2OpenFile(“txt2“,4); file1WriteFlie(“hello“,6); file2CopyFile(f
9、ile1); file1display(); file2display(); return 0;(分数:2.00)_正确答案:(正确答案:(1)添加语句:filename0=0;或 filename0=NULL; (2)添加语句:deletecontex; (3)添加语句:delete contex; (4) 添加语句:WriteFlie(filecontex,fileFileLength);)解析:解析:(1)构造函数 MyFileClass()完成类成员变量的初始化,将数据成员变量 filename和 contex为空,内容长度 FileLength为 0,因此第 1个标识下应添加“fil
10、ename0=0;”或“filename0=NULL;”。 (2)析构函数用来释放一个对象,在对象删除前,用它来做一些清理工作,WriteFlie()函数会申请内存空间,因此在对象删除的时候必须将这些内存空间释放,这个工作可以放在析构函数中来处理,第 2个标识下是释放由 new申请的内存空间,因此第 2个标识下应添加“deletecontex;”。 (3)WriteFile()数首先对 contex内容清空,第 3个标识下应添加“delete contex;”。 (4)CopyFile(MyFileClass&file)函数完成将参数 file对象的 contex的内容拷贝到当前的文件内容中,可直接调用 WriteFlie()函数,因此第 4个标识下应添加“WriteFlie(filecontexfileFileLength);”。