资源描述
C++上机考试题A(2007.6.)
(考试时间80分钟,满分30分,每题15分)
1.由人员类派生学生类。人员类已定义完整,成员组成见类定义及注释。请根据主函数和输出结果补全派生类中的代码。
要求:将源程序文件以文件名myfile1.cpp保存到考试盘的学号文件夹中。
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class Person{
string name; //姓名
char sex; //性别
public:
Person(string n="noname",char s='m'){ //构造函数
name=n; sex=s;
}
friend ostream& operator<<(ostream& dist,Person& ps);//输出姓名、性别
};
ostream& operator<<(ostream& dist,Person& ps){
dist<<ps.name<<'\t'<<ps.sex<<'\t';
return dist;
}
class Student:public Person{
int id; //学号
int Eng,Math,Phy; //三门课成绩
double ave; //平均成绩
ofstream ofile;
public:
Student(string="noname",char='m',int=0,int=0,int=0,int=0); //构造函数
~Student(); //将对象数据成员存入磁盘文件myfile.txt;需借用this指针
void CalAve(); //计算平均成绩
friend ostream& operator<<(ostream& dist,Student& st);
//输出姓名、性别、学号、三门课成绩、平均成绩
};
//在此添加代码包括析构函数、构造函数、求平均成绩函数和输出运算符重载函数。
int main(){
Student st("wang",'m',22061,90,80,85);
st.CalAve();
cout<<"name"<<'\t'<<"sex"<<'\t'<<"id"<<'\t';
cout<<"Eng"<<'\t'<<"Math"<<'\t'<<"Phy"<<'\t'<<"ave"<<endl;
cout<<st<<endl;
return 0;
}
2.定义一个整型数组类,成员组成见定义和说明。根据主函数,补全对数组进行升序冒泡排序的成员函数代码。
要求将源程序文件以文件名myfile2.cpp保存到考试盘的学号文件夹中。
提示:对n个数据进行升序冒泡排序的算法思想:对数组共进行n-1次“冒泡”操作,每次“冒泡”可将本次中的一个最小元素置于该批数据首位。
第i次“冒泡”算法思想(前i-1次冒泡已排好i-1个数据):从最后一个元素开始,直到第i个元素,相邻两元素比较,如果前大后小,则交换;
某轮冒泡如果没有发生元素交换,说明数据已排好序,冒泡过程可以中止。
#include<iostream>
using namespace std;
template<typename T,int size> class array{
T a[size];
int last;
int maxSize;
public:
array(){last=-1;maxSize=size;}
bool isfull(){if(last==maxSize-1) return true; else return false;}
void insertRear(T data){ //将data插在数组最后一个元素位置,可用于创建数组
if(!isfull()){last++;a[last]=data;}
else cout<<"array is full,can not insert!"<<endl;
}
void bubbleSort(); //将数组元素用冒泡法升序排列
void print(){ //输出数组
for(int i=0;i<=last;i++) cout<<a[i]<<'\t';
cout<<endl;
}
};
//此处添加冒泡排序函数代码
int main(){
array<char,9> list;
char m;
cout<<"请输入9个字母:"<<endl;
for(int i=0;i<9;i++){ //创建数组
cin>>m;
list.insertRear(m);
}
list.print();
list.bubbleSort(); //排序
list.print();
return 0;
}
展开阅读全文