国家二级C++机试(操作题)模拟试卷434
基本操作题
1.使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正main()函数中的错误,使程序的输出结果如下:
Constructor.
Default constructor.
Area is 12
Area is 0
Area is 12
注意:错误的语句在//*****error******的下面,修改该语句即可。
#include
class CRectangle
{
private:
double length,width;
public:
CRectangle()
{
cout<<\\
(1)CRectangle Rect2;
(2)CRectangle Rect3(Rect1);
(3)Rect2.Set(0,0);
解析:(1)构造函数CRectangle()不带有参数,CRectangle(double1,double w)带有2个参数,在创建对象时会自动调用构造函数,但是参数必须匹配,第1个标识下定义Rect2对象时,有一个参数,而类CRectangle()并没有重载一个参数的构造函数,编译后出错,因此第1标识下应改为“CRectangle Rect2;”。
(2)Rect3.GetArea()输出的结果和Rect1.GetArea()输出结果一致,因此对象Rect3和对象Rect1两者具有相同的length和width值,除定义Rect3对象之外没有改变Rect31的length和width值,因此Rect3成员变量的初始化是通过拷贝构造函数类实现的,即用Rect1对象去初始化Rect3,因此第2个标识下应改为“CRectangle Rect3(Rect1);”。
(3)Rect2.GetArea()的输出结果为0,说明Rect2的成员变量length和width值至少一个为0,而Set()函数必须有两个参数,这里Rect2.Set(0)参数不匹配,应改为“Rect2.Set(0,0);”或者“Rect2.Set(0,5)”,两个参数当中至少一个为0即可。
简单应用题
2.使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。补充函数convert(long s,long*str),使之从低位开始取出长整型变量S中奇数位上的数,依次存放在数str中。
例如,当s中的数为:7654321时,str中的数为:7531。
注意:请勿改动主函数。
#include
void convert(long s,long *str)
{
}
void main()
{
long s,res,
cout<<\\
long s1=10;
*str=s%10;//先取个位数
while(s>0)
{
s=s/100; //每次除以100,
*str=s%10*s1+*str; //取除
以100后的个位数,str增加1位
s1=s1*10;
}
解析:(1)由审题分析可知,奇数位即为个位数、百位数、万位数……,取个位数比较简单,s%10便得到了个位数。获取百位数可由s/100后,再和lO取余得到,同样万位数可由s/10000,再和10取余得到,从百位数开始后面的奇数位都是在上次的基础上再除以100后再取余数,因此可利用循环。
(2)在循环外先取S的个位数,然后进入循环,s=s/100,获取除以100的个位数方法为s%10,这个数是*str的高一位,乘以它所在*str中的位置的权值,然后和以前的值相加便得到这次*sir值,如此循环,直到s为0为止。
综合应用题
3.使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:
(1)完成构造函数的定义,使得数据成员变量filename和contex为空,内容长度FileLength为0。请在注释//********1********后添加适当的语句。
(2)完成析构函数,对contex内存的释放。请在注释//********2********后添加适当的语句。
(3)完成WriteFile()函数,用来对contex内容进行设置填充内容,如果以前有内容,则删除以前的内容,重新填写。请在注释//********3********后添加适当的语句。
(4)完成CopyFile()函数,完成将参数对象的contex的内容拷贝到当前的文件内容中,请在注释//********4********后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include
class MyFileClass
{
private:
char filename[64];
char *contex;
int FileLength;
public:
MyFileClass()
{
//********1********
contex=NULL;
FileLength=0;
}
~MyFileClass()
{
if(FileLength)
//********2********
}
void OpenFile(char *str,int
len)
{
for(int i=0;i<len;i++)
{
filename[i]=str[i];
}
filename[len]=0;
FileLength=0;
if(contex)
{
delete[]contex;
contex=NULL;
}
}
void WriteFlie(char *str,int len)
{
if(contex!=NULL)
//********3********
contex=new char[len+1];
for(int i=0;i<len;i++)
contex[i]=str[i];
contex[len]=0;
FileLength=len;
}
void CopyFile(MyFileClass&file)
{
//********4********
}
void display()
本文档预览:3600字符,共4453字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载