国家二级C++机试(操作题)模拟试卷675
基本操作题
1.请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中每个注释“// ERROR****found*****之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
smaller
smaller
smaller
largest
注意:只修改注释“// ERROR**********found************的下一行语句,不要改动程序中的其他内容。
// proj1.cpp
#include <iostream>
using namespace std;
const int Size=4;
class MyClass
{
public:
MyClass(int x=0):value(x) { }
void Set(int x) {value=x; }
friend void Judge(MyClass &obj);
private:
int value;
};
// ERROR **********found**********
void MyClass::Judge(MyClass &obj)
{
if(obj.value==Size)
cout<<\\
(1)void Judge(MyClass &obj)
(2)(ptr+i)->Set (i+ 1);
(3)delete[ ] ptr;
解析:(1)主要考查考生对友元函数的掌握,由类的定义中关于Judge函数的声明可知该函数为友元函数,因此在定义时不能使用类名和作用域符。
(2)主要考查考生对指针的掌握,ptr是指针,(ptr+i)也是指针,表示指针ptr向后移动i个位置,因此在调用成员函数时要使用标识符’->。
(3)主要考查考生对delete语句的掌握,释放指针使用delete语句,其格式为:delete[ ]指针;。
简单应用题
2.请打开考生文件夹下的解决方案文件proj2,此工程中含有一个源程序文件proj2.cpp,其中定义了MyString类。MyString是一个用于表示字符串的类,其构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中;成员函数reverse的功能是对字符串进行反转操作,例如,字符串“ABCDE”经过反转操作后,会变为“EDCBA”;成员函数print的作用是将字符串输出到屏幕上。
请在横线处填写适当的代码并删除横线,以实现MyString类的功能。此程序的正确输出结果应为:
Before reverse:
abc
defg
After reverse:
cba
gfed
注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found*****\\
(1)strlen(s) +1
(2)delete [ ]m_str
(3)m_str[n-i-1]
(4)m_str[n-i-1]=tmp
解析:(1)考查使用new语句动态分配内存空间,要分配空间大小应为字符串的长度加1。
(2)主要考查考生对析构函数的掌握,析构函数使用delete语句释放指针。
(3)和(4)主要考查考生对成员函数的掌握,这里是一个变量交换操作,通过中间变量tmp交换。
综合应用题
3.请打开考生文件夹下的解决方案文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成proj3.h,重载+运算符。
要求:
补充编制的内容写在“//**********333**********”与“//**********666*******”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。
//proj3.h
#include <iostream>
#include <iomanip>
using namespace std;
class MiniString //+运算符重载
{public:\\t
friend ostream &operator<< ( ostream &output, const MiniString &s ) //重载流插入运算符
{\\toutput << s.sPtr;\\t\\treturn output;\\t}
friend istream &operator>>( istream &input, MiniString &s ) //重载流提取运算符
{\\tchar temp[100 ]; // 用于输入的临时数组
temp[0] = ’\0’;
\\tinput >> setw( 100 ) >> temp;
\\tint inLen = strlen(temp); //取输入字符串长度
\\tif( inLen != 0)
{
\\t s.length = inLen; //赋长度
\\t if( s.sPtr!= 0) delete [ ]s.sPtr; // 避免内存泄漏
\\t s.sPtr = new char[s.length + 1 ];
\\t strcpy( s.sPtr, temp ); \\t // 如果s 不是空指针,则拷贝内容
}
else s.sPtr[0 ] = ’\0’; \\t\\t // 如果s 是空指针,则为空字符串
return input;
}
MiniString( const char *s = \\
MiniString& operator+(const MiniString& s)
{
char *pt = new char [length+1]:
strcpy(pt, sPtr);
int blength = length;
length += s.length;
delete[ ]sPtr;
sPtr = new char[length+1];
strcpy(sPtr,pt);
delete [ ]pt;
for (int i= 0; i<length;++i)
sPtr[blength+i]=s.sPtr[i];
return *this;
}
解析:主要考查考生对运算符重载的掌握,因为有动态数组,所以要先分配空间,再复制字符串。
本文档预览:3600字符,共3476字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载