n5.print(); n6.print(); return 0; }
6. 简单集合运算 10分
a) 题目描述
请设计实现集合类,元素类型为整形。该集合类支持集合元素增加、删除、查询;并支持集合并、交、差运算;利用你设计的集合类,实现本题要求。程序应体现面向对象程序设计思想,结构合理。为保证结果唯一,集合元素递增排列。假设集合元素个数不超100个 b) 输入描述
开始为两个正整数m,n;后续m个整数构成集合A,再后续n个整数构成集合B c) 输出描述
集合A、B和他们的并、交、差集;每个集合元素间以,分隔;不同集合显示在不同行 d) 样例输入
3 5 1 2 3 3 5 8 2 1 e) 样例输出
{1,2,3} {1,2,3,5,8} {1,2,3,5,8} {1,2,3} {}
参考程序:
/******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming) Task 6
Programmed by YE Huanzhuo Lakeside Nov.28, 2012
********************************************************/ #include
class Set { int e[100];
int num; public: Set():num(0) {} bool Insert(int a); bool Delete(int a); bool Check(int a); Set operator +(Set B); Set operator *(Set B); Set operator -(Set B); void Show(); };
bool Set::Insert(int a) { int i; for(i=num-1; i>=0; i--) if(e[i]>a) e[i+1]=e[i]; else if(e[i]==a) return false; //already exist, do not insert else break; e[i+1]=a; num++; return true; }
bool Set::Delete(int a) { int i, j; for(i=0; i bool Set::Check(int a) { int i; for(i=0; i Set Set::operator +(Set B) { Set C; int i, j, k; i=j=k=0; while(i Set Set::operator *(Set B) { Set C; int i, j, k; i=j=k=0; while(i C.e[k++]=e[i++]; j++; } } C.num=k; return C; } Set Set::operator -(Set B) { Set C; int i, j, k; i=j=k=0; while(i void Set::Show() { cout<<\ int i; if(num) cout< int main() { } int m, n, i, k; Set A, B, C; cin>>m>>n; for(i=0; i for(i=0; i A.Show(); B.Show(); C=A+B; C.Show(); C=A*B; C.Show(); C=A-B; C.Show(); return 0; 7. 图形类——继承和派生 a) 题目描述 定义一个图形类,其中有保护类型的成员数据:高度和宽度,一个公有的构造函数。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含一个函数Area(),分别用来计算矩形和等腰三角形的面积。提示: class pic { }; class recg:public pic { }; class tag:public pic { }; b) 输入描述 输入矩形的长和宽以及等腰三角形的底边长和高。 c) 输出描述 矩形的面积和等腰三角形的面积 d) 样例输入