面向对象编程程序设计复习题
一、编程题
1. 试定义一个表示学生成绩的结构体,要求包含学号(no)、姓名(name)、数
学成绩(math)、英语成绩(eng)、C++语言成绩(c)和三门课程的总分(sum),
再定义两个变量(s1,s2)。
2. 定义一个第1 题的结构体类型的结构体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩。
3. 定义一个学生类,其中有3 个数据成员:学号、姓名、年龄,以及若干成
员函数。同时编写main 函数使用这个类,实现对学生数据的赋值和输出。 4. 计算两点之间的距离。可以定义点类(Point),再定义一个类(Distance)
描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。
5. 编写一个程序,设计一个产品类Product,要求包含数据成员:产品名称,
产品单价, 剩余产品数量,同时要求有构造函数,析构函数,显示剩余产品数量的成员函数。
6. 编写一个程序计算两个给定的长方形的周长和面积,要求定义一个长方形
rectangle的类。
7. 声明一个Shape 基类,在此基础上派生出Rectangle 和Circle 类,二者都
有GetArea()函数计算对象的面积。使用Rectangle 类创建一个派生类正方
形Square类。
8. 声明一个哺乳动物Mammal 类,再由此派生出狗Dog 类,声明一个Dog 类的
对象,观察基类与派生类的构造函数与析构函数的调用顺序。
9. 定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教
师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。 10. 例7.2 对候选人得票的统计程序。设有3个候选人,最终只能有1人当选为
领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
11. 定义一个国家基类Country,包含国名、首都、人口等属性,派生出省类
Province,增加省会城市、人口数量属性。 12. 定义一个车基类Vehicle,含私有成员speed,weight。派生出自行车类
Bicycle,增加high 成员;汽车类Car,增加seatnum 成员。从bicycle 和car 中派生出摩托车类Motocycle。
13. 声明一个Rectangle 类,有长(itsWidth)、宽(itsLength) 等属性,重载其构造函数Rectanle()和Rectangle(int width,int length)
14. 写一个Complex类,将运算符“+”重载为适用于复数加法,重载函数不作为
成员函数,而放在类外,作为Complex类的友元函数。如例题10.3 15. 例9.2 有两个长方柱,其长、宽、高分别为: (1)12,20,25;(2)10,14,20。求
它们的体积。编一个基于对象的程序,在类中用带参数的构造函数。 16. 例11.8 声明一个教师(Teacher)类和一个学生(Student)类,用多重继承的方
式声明一个研究生(Graduate)派生类。教师类中包括数据成员name(姓名)、age(年龄)、title(职称)。学生类中包括数据成员name1(姓名)、age(性别)、score(成绩)。在定义派生类对象时给出初始化的数据,然后输出这些数据。 17. 写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle,Square,
Rectangle,Trapezoid,Triangle。用虚函数分别计算几种图形的面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类的对象。(第12章的习题5)
18. 例13.11 有一个整型数组,含10个元素,从键盘输入10个整数给数组,将
此数组送到磁盘文件中存放。 19. 例13.12 从例13.11建立的数据文件f1.dat中读入10个整数放在数组中,找
出并输出10个数中的最大者和它在数组中的序号。 20. 定义一个Dog 类,包含体重和年龄两个数据成员及相应的成员函数。声明
一个实例dog1,体重为5,年龄为10,使用I/O 流把dog1 的状态写入磁盘
文件;再声明另一个实例dog2,通过读文件把dog1 的状态赋给dog2。
21. 第13章的习题3 二、阅读题
1.
#include
char line[20]; cin>>line;
cout<<\return 0;
}
如运行时输入This is example.
2. 写出下列程序运行结果: #include
struct point
{ int x; int y; } st[5]={1,2,3,4,5,6,7,8,9,10}; void main() { int i; point *p; p=st;
for(i=0;i<5;i++)
{ cout< 3. 写出下列程序运行结果: #include public: int a; A():a(10) {cout< int main() { A obj1; A obj2(obj1); cout< } 4. 下列程序的输出结果是__ #include T maxv=x[0]; for(int i=1;i if(maxv return maxv; } int main() { int a[]={3,2,4,5,9,10}; double b[]={1.2,4.6,3.6,9.0}; cout< 5. 下列函数average 功能是计算10名学生3门课成绩的平均分,请填空。 #include char name[16]; float mark[m]; float ave; }; void average(stud st[]) {int i,j; float sum; for(i=0;i void main() {stud preson[n]; average(preson); } 6. 函数findbook 的功能是:在有n 个元素的数组s 中查找名为a 的书若找到, 函数返回数组下标,否则,函数返回-1,请填空。 struct data { int id; char name[20]; double price; } book[100]; int findbook(data s[],int n,char a[]) {int i; for(i=0;i if( (1) ) return i; //1 (2) ; //2 } 7. 学生姓名(name)和年龄(age)存于结构体数组person 中,函数fun 的功能是: 找出年龄最小的那名学生,找出程序错误,并改正。 #include } ; fun (stud person[],int n) // 1 { int min; min=0; for(i=0;i if(person[i] } void main(){ stud a[]={{\int n=4; stud minpers; minpers=fun(a,n); cout<<\年龄最小者是:\} 8. 写出下列程序的运行结果 #include void main() { ab x={\ cout< 9. 写出下列程序的运行结果 #include void f(ab &y) { y.a='W'; y.b=90.5; } void main() { ab x={'L',89.5}; f(x); cout< 10. 写出下列程序的运行结果 #include using namespace std; enum week {sun,mon,tue,wed,thu,fri,sat} ; void main() { char *w[ ]={\cout<