国家二级C++机试(操作题)模拟试卷668
基本操作题
1.请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found*****之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:
There are 2 object(s).
注意:只修改注释“// ERROR****found*****的下一行语句,不要改动程序中的其他内容。
// proj1.cpp
#include <iostream>
using namespace std;
class MyClass {
public:
// ERROR **********found**********
\\tMyClass(int i = 0) value = i
{count++; }
\\tvoid Print()
\\t{cout << \\
(1)MyClass(inti=0):value(i)
(2)int MyClass::count =0;
(3)obj2.Print();
解析:(1)主要考查考生对构造函数的掌握,使用成员列表初始化给常变量赋初始值。
(2)主要考查考生对静态数据成员的掌握,静态数据成员的赋值不需要使用static关键字。
(3)主要考查考生对成员函数调用的掌握,MyClass是类名,不能调用函数,应使用对象obj2调用函数
简单应用题
2.凡是使用过C语言标准库函数strcpy(char*s1,char*s2)的程序员都知道使用该函数时有一个安全隐患,即当指针s1所指向的空间不能容纳字符串s2的内容时,将发生内存错误。类String的Strcpy成员函数能进行简单的动态内存管理,其内存管理策略为:①若已有空间能容纳新字符串,则直接进行字符串拷贝;②若已有空间不够时,将重新申请一块内存空间(能容纳下新字符串),并将新字符串内容拷贝到新申请的空间中,释放原字符串空间。
请打开考生文件夹下的解决方案文件proj2,此工程中含有一个源程序文件proj2.cpp。其中定义了类String和用于测试该类的主函数main,且成员函数Strcpy的部分实现代码也已在该文件中给出,请在标有注释“// TODO:“的行中添加适当的代码,将这个函数补充完整,以实现其功能。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found*****。
// proj2.cpp
#include <iostream>
using namespace std;
class String {
private:
\\tint size;\\t\\t\\t\\t// 缓冲区大小
\\tchar *buf;\\t\\t\\t\\t// 缓冲区
public:
\\tString(int bufsize);
\\tvoid Strcpy(char *s); \\t// 将字符串s复制到buf中
\\tvoid Print() const;
\\t~String() {if (buf != NULL) delete [ ] buf; }
};
String::String(int bufsize)
{
\\tsize = bufsize;
\\tbuf = new char[size];
\\t*buf = ’\0’;
}
void String::Strcpy(char *s)
{
\\tchar *p,*q;
\\tint len = strlen(s);
\\tif (len+1 > size) {// 缓冲区空间不够,须安排更大空间
\\t\\tsize = len+1;
\\t\\tp = q = new char[size];
//**********found**********
\\twhile((*q=*s)!=0){__________} // TODO: 添加代码将字符串s拷贝到字符指针q中
\\t\\tdelete [ ] buf;
\\t\\tbuf = p;
\\t}
\\telse {
//**********found**********
\\tfor(p=buf;_________________;p++,s++); // TODO: 添加代码将字符串s拷贝到buf中
\\t\\t
\\t}
}
void String::Print() const
{
\\tcout << size << ’\t’ << buf << endl;
}
int main()
{
\\tchar s[100];
\\tString str(32);
\\tcin.getline(s, 99);
\\tstr.Strcpy(s);
\\tstr.Print();
\\treturn 0;
}
(1)++q;++s;
(2)(*p=*s) !=0
解析:(1)主要考查考生对while循环的掌握,先看语句注释:添加代码将字符串s拷贝到字符指针q中。程序已经给出了赋值语句,这里只要使q和s递增即可。
(2)主要考查考生对for循环的掌握,先看语句注释:添加代码将字符串s拷贝到buf中。因为循环体中没有语句,直接用分号结束,因此需要在循环条件中完成赋值,同时进行条件判断,赋值语句为*p=*s,判断条件为当前字符不是字符串结束。
综合应用题
3.请打开考生文件夹下的解决方案文件proj3。该工程中包含一个源程序文件proj3.cpp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示圆形的类MyCircle;程序应当显示:
(1.2).5.31.4159.78.5398
但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:
(1)在//**1** ****found****的下方是构造函数的定义,它用参数提供的圆心和半径分别对cen和rad进行初始化。
(2)在//**2** ****found****的下方是非成员函数perimeter的定义,它返回圆的周长。
(3)在//**3** ****found****的下方是友元函数area的定义,它返回圆的面积。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found*****。
// proj3.cpp
#include<iostream>
#include<cmath>
using namespace std;
class MyPoint{//表示平面坐标系中的点的类
double x;
double y;
public:
MyPoint (double x,double y){this->x=x;this->y=y;}
double getX()co
本文档预览:3600字符,共4944字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载