资源描述
东南大学08级C++(下)上机试卷A-答案
一、改错题(50分)本题共10个错误,每个错误5分
#include<iostream>
#include<iomanip>
using namespace std;
class Array{
int *p;
int last; //最后一个元素下标
public:
Array(int=20); //创建一定长度的空表,给定长度缺省值为20
~Array();
void insertOrder(int); //在升序表中插入一个元素,使之仍然升序
void print();
};
Array::Array(int max){ //去掉 void
last=-1;
p=new int[max]; //初始化为给定长度 //增加max
}
Array::~Array(){delete []p;} //p[]位置错
void Array::print(){ //增加Array::
for(int i=0;i<=last;i++) cout<<setw(4)<<p[i];
cout<<endl;
}
void Array::insertOrder(int key){ //将关键字插入到数组中某个位置 //增加int key
if(last==-1){last++; p[last]=key;} //=
int i=last;
while(i>=0&&key<p[i]){
p[i+1]=p[i];
i--;
}
p[i+1]=key; //p[i]
last++;
}
void main(){
Array a; //创建数组 //去掉()
int t;
for(int i=0;i<10;i++){ //读入10个数据创建一个升序数组
cin>>t;
a.insertOrder(t); //去掉 int
}
a.print(); //输出数组 //少了a.
}
二、编程题(50分)程序结构及完整性10分,读文件操作15分,写文件10分,文件分别放在构造析构函数中5分,<<运算符重载10分。红字为要求设计的部分。
#include<iostream>
#include<fstream>
using namespace std;
class Array;
ostream& operator<<(ostream &os,Array &a);
class Array{
int v[30];
int last; //最后一个元素下标
public:
Array(); //创建表,从文件中读取数据进行初始化
~Array(); //数据保存到文件中
void insertAfter(int); //在当前表的最后添加一个元素
friend ostream& operator<<(ostream &, Array &);
};
Array::Array(){
ifstream file("vdata.txt");
int t;
last=-1;
if(file) //文件打开成功
while(!file.eof()){
file>>t;
if(!file.eof()){last++; v[last]=t;}
}
file.close();
file.clear(0);
}
Array::~Array(){
ofstream file("vdata.txt");
for(int i=0;i<=last;i++) file<<v[i]<<" ";
file.close();
}
void Array::insertAfter(int t){
last++;
v[last]=t;
}
ostream& operator<<(ostream &os,Array &a){
for(int i=0;i<=a.last;i++) os<<a.v[i]<<" ";
os<<endl;
return os;
}
void main(){
Array vector; //创建数组
int t;
cout<<vector;
cout<<"向数组添加3个数:";
for(int i=0;i<3;i++){ //向数组中添加3个数据
cin>>t;
vector.insertAfter(t);
}
cout<<"当前数组内容:"<<endl;
cout<<vector;
}
展开阅读全文