国家二级C++机试(操作题)模拟试卷514
基本操作题
1.请打开考生文件夹下的解决方案文件proj1,其中:有点类Point和线段类Line和主函数main的定义,程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出应为:
p1=(8,4)p2=(3,5)
注意:只修改两个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。
#inclucle<iostream>
#include<cmath>
using namespace std;
class Point{
double x,y;
public:
Point(double x=0.0,double y=0.0)
//ERROR*******found*******
{x=x;y=y;}
double getX( )const{return x;}
double getY( )const{return y;}
//ERROR*******found*******
void show( )const{cout<<’(’<<x<<’,’<<y<<’)’}
};
class Line{
Point;p1,p2;
public:
Line(Point;pt1,Pointpt2)
//ERROR*******found*******
{pt1=p1;pt2=p2;}
Point getP1( )const{returnp1;}
Point getP2( )const{returnp2;}
};
int main( ){
Line line(Point:(8,4),Point(3,5));
cout<<\\
(1):x(x),y(y){}或{this->x=x,this->y=y;}
(2)void show( )const{eout<<’(’<<x<<’,’<<y<<’)’;}
(3):p1(pt1),p2(pt2){}或{p1=pt1;p2=pt2}
解析:(1)主要考查考生对构造函数的掌握,因为形参名和私有成员名称一样,因此不能直接赋值,在这里使用成员列表初始化,也可以使用this指针赋值。
(2)主要考查考生对语句基本语法的掌握,根据语句:void show( )const{tout<<’(’<<x<<’,’<<y<<’)’}。可看出函数体内并没有“;”作为tout语句的结束符,因此程序错误。
(3)主要考查考生对构造函数的掌握,形参是pt1和pt2,这里写反了,也可以他用成员列太表初始化法,可以避免这种错误。
简单应用题
2.请打开考生文件夹下的解决方案文件proj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Mouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:
ELEPHANT
MOUSE
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
#include<iostream>
using namespace std;
enum category{ENPTY,ELEPHANT,NOUSE);
char*output[ ]={\\
(1)char[strlen(str)+1];
(2)Mammal(str)
(3)return output[MOUSE];
(4)Elephant
解析:(1)主要考查分配空间,程序要给name分配空间,由下一条语句中strcpy(name,str)可知程序要把字符串str复制给name,因此要分配的空间大小为strlen(str)+1。
(2)主要考查考生对构造函数的掌握,因为Elephant类是Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。
(3)主要考查考生对枚举类型的掌握,先看程序:enum category{EMPTY,ELEPHANT,MOUSE}。再参考Elephant类中的WhoAmI函数:char*WhoAmI( ){return output[ELEPHANT];}。可知这里要填写的返回语句为:return output[MOUSE];。
(4)主要考查考生对派生类的掌握,题目要求输出:
ELEPHANT
MOUSE
可知,要先调用Elephant类的WhoAmI函数,因此给指针pm分配Elephant类空间。
综合应用题
3.请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:
ValArray v1={1,2,3,4,5}
ValArray v2={2,2,2,2,2}
要求:
补充编制的内容写在“//*******333*******”与“//********666********”之间。不要修改程序的其他部分。
注意:
相关文件包括:main.cpp、ValArray.h。
程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。
//ValArray.h
#include<iostream>
using namespace std;
class ValArray{
int*v;
int size;
public:
ValArray(const int*p,intn):size(n)
{
v=new int[size];
for(int i=0;i<Size;i++)
v[i]=p[i];
}
ValArray(const ValArray&other);
~ValArray( ){delete[ ]v;}
void setElement(int i,int val)
{
v[i]=val;
}
void print(ostream&out)const
{
out<<’{’;
for(int i=0;i<size-1;i++)
out<<v[i]<<\\
size=other.size;//把对象数组的大小赋值给size
v=new int[other.size];//根据对象数组的大小动态分配数组v
for(int i=0;i<size;++i)
v[i]=other.v[i];//遍历整个对象的数组把值other.v[i]放到数组v中
解析:主要考查考生对复制构造函数的掌握。由函数名:ValArray::ValArrav(
本文档预览:3600字符,共3744字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载