c++程序设计:整数集合运算的实现 50
一、程序功能运用两种运算符重载的方法,编写一个程序,实现一个以下整数集合的基本运算:S1+S2两个整数集合的并运算S1-S2两个整数集合的差运算S1*S2两个整数集合的交...
一、程序功能
运用两种运算符重载的方法,编写一个程序,实现一个以下整数集合的基本运算:
S1 + S2 两个整数集合的并运算
S1 - S2 两个整数集合的差运算
S1 * S2 两个整数集合的交运算
S1 <= S2 判定集合s1是S2的子集
二、提示分析
1.定义一个表示整数集合的类set,声明两个私有数据成员num(int类型,表示集合中元素的个数)和data(int型数组,存放集合元素);
2.在set类中声明并定义下列公有函数成员:
void insert(int e); // 在集合中添加一个元素e
int length(); // 返回集合的大小(元素个数)
int getelem(int i); // 返回集合中第i个元素
void print(); // 输出集合集合的所有元素
3.在set类中定义如下运算符重载的函数成员(方法一),实现集合运算:
set operator +(set s); // 重载+运算符,实现并运算
set operator -(set s); // 重载-运算符,实现差运算
set operator *(set s); // 重载*运算符,实现交运算
int operator <=(set s); // 重载<=运算符,实现判定子集运算
4.定义运算符重载的友元函数(方法二),实现集合运算:
friend set operator +(set s1,set s2);
friend set operator -(set s1,set s2);
friend set operator *(set s1,set s2);
frinend int operator <=(set s1,set s2);
5.或通过重载 << 运算符,来实现集合的输出:
ostream &operator <<(operator &); // 函数成员
friend ostream &operator <<(operator &,set &);
// 友元函数 展开
运用两种运算符重载的方法,编写一个程序,实现一个以下整数集合的基本运算:
S1 + S2 两个整数集合的并运算
S1 - S2 两个整数集合的差运算
S1 * S2 两个整数集合的交运算
S1 <= S2 判定集合s1是S2的子集
二、提示分析
1.定义一个表示整数集合的类set,声明两个私有数据成员num(int类型,表示集合中元素的个数)和data(int型数组,存放集合元素);
2.在set类中声明并定义下列公有函数成员:
void insert(int e); // 在集合中添加一个元素e
int length(); // 返回集合的大小(元素个数)
int getelem(int i); // 返回集合中第i个元素
void print(); // 输出集合集合的所有元素
3.在set类中定义如下运算符重载的函数成员(方法一),实现集合运算:
set operator +(set s); // 重载+运算符,实现并运算
set operator -(set s); // 重载-运算符,实现差运算
set operator *(set s); // 重载*运算符,实现交运算
int operator <=(set s); // 重载<=运算符,实现判定子集运算
4.定义运算符重载的友元函数(方法二),实现集合运算:
friend set operator +(set s1,set s2);
friend set operator -(set s1,set s2);
friend set operator *(set s1,set s2);
frinend int operator <=(set s1,set s2);
5.或通过重载 << 运算符,来实现集合的输出:
ostream &operator <<(operator &); // 函数成员
friend ostream &operator <<(operator &,set &);
// 友元函数 展开
展开全部
/* 实现一个整数集合的基本运算:
s1+s2 两整数集合的并运算
s1-s2 两整数集合的差运算
s1*s2 两整数集合的交运算*/
////
#include<iostream>
const int MAX=100; //集合中最多的元素个数
class Set{
protected:
int len;
int s[MAX];
public:
Set(){ len=0;}
void insert(int d){
for(int i=0;i<len;i++)
if(s[i]=d) return; //重复的元素不插入
s[len]=d;
len++;
}
int length(){
return len;
}
int getd(int i){
if(i>=0 && i<len)
return s[i];
else return -1;
}
void disp(){
for(int i=0;i<len;i++)
cout<<s[i]<<" ";
cout<<endl;
}
Set operator +(Set s1){
int len1=len,same;
for(int i=0;i<s1.len;i++){
same=0;
for(int j=0;j<len1;j++)
if(s1.getd(i)==getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==0){ //未找到重复元素,则插入
s[len]=s1.getd(i);
len++;
}
}
return (*this);
}
Set operator -(Set s1){
int same;
for(int i=0;i<len;i++){
same=0;
for(int j=0;j<s1.len;j++)
if(s[i]==s1.getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==1){ //找到重复元素,则删除之
for(int k=i;k<len;k++) s[k]=s[k+1];
i--; //下次循环前要做for里面的i++,所以这里先自减一下
len--;
}
}
return (*this);
}
Set operator *(Set s1){
int same;
for(int i=0;i<len;i++){
same=0;
for(int j=0;j<s1.len;j++)
if(s[i]==s1.getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==0){ //未找到重复元素,则删除之
for(int k=i;k<len;k++) s[k]=s[k+1];
i--; //下次循环前要做for里面的i++,所以这里先自减一下
len--;
}
}
return (*this);
}
Set operator =(Set s1){
this->len=s1.len;
for(int i=0;i<s1.len;i++)
this->s[i]=s1.getd(i);
return (*this);
}
};
void main(){
Set s1,s2,s3,s4;
s1.insert(2);
s1.insert(4);
s1.insert(1);
s1.insert(3);
s1.insert(5);
s3=s1;
s4=s1;
cout<<"s1的元素个数:"<<s1.length()<<endl;
cout<<"s1集合中的元素:";
s1.disp();
s2.insert(2);
s2.insert(5);
s2.insert(10);
cout<<"s2集合中的元素:";
s1.disp();
s1+s2;
cout<<"s1+s2运算后的结果:";
s1.disp();
s3-s2;
cout<<"s1-s2运算后的结果:";
s3.disp();
s4*s2;
cout<<"s1*s2运算后的结果:";
s4.disp();
}
s1+s2 两整数集合的并运算
s1-s2 两整数集合的差运算
s1*s2 两整数集合的交运算*/
////
#include<iostream>
const int MAX=100; //集合中最多的元素个数
class Set{
protected:
int len;
int s[MAX];
public:
Set(){ len=0;}
void insert(int d){
for(int i=0;i<len;i++)
if(s[i]=d) return; //重复的元素不插入
s[len]=d;
len++;
}
int length(){
return len;
}
int getd(int i){
if(i>=0 && i<len)
return s[i];
else return -1;
}
void disp(){
for(int i=0;i<len;i++)
cout<<s[i]<<" ";
cout<<endl;
}
Set operator +(Set s1){
int len1=len,same;
for(int i=0;i<s1.len;i++){
same=0;
for(int j=0;j<len1;j++)
if(s1.getd(i)==getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==0){ //未找到重复元素,则插入
s[len]=s1.getd(i);
len++;
}
}
return (*this);
}
Set operator -(Set s1){
int same;
for(int i=0;i<len;i++){
same=0;
for(int j=0;j<s1.len;j++)
if(s[i]==s1.getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==1){ //找到重复元素,则删除之
for(int k=i;k<len;k++) s[k]=s[k+1];
i--; //下次循环前要做for里面的i++,所以这里先自减一下
len--;
}
}
return (*this);
}
Set operator *(Set s1){
int same;
for(int i=0;i<len;i++){
same=0;
for(int j=0;j<s1.len;j++)
if(s[i]==s1.getd(j)){
same=1; //找到重复元素,则same=1
break;
}
if(same==0){ //未找到重复元素,则删除之
for(int k=i;k<len;k++) s[k]=s[k+1];
i--; //下次循环前要做for里面的i++,所以这里先自减一下
len--;
}
}
return (*this);
}
Set operator =(Set s1){
this->len=s1.len;
for(int i=0;i<s1.len;i++)
this->s[i]=s1.getd(i);
return (*this);
}
};
void main(){
Set s1,s2,s3,s4;
s1.insert(2);
s1.insert(4);
s1.insert(1);
s1.insert(3);
s1.insert(5);
s3=s1;
s4=s1;
cout<<"s1的元素个数:"<<s1.length()<<endl;
cout<<"s1集合中的元素:";
s1.disp();
s2.insert(2);
s2.insert(5);
s2.insert(10);
cout<<"s2集合中的元素:";
s1.disp();
s1+s2;
cout<<"s1+s2运算后的结果:";
s1.disp();
s3-s2;
cout<<"s1-s2运算后的结果:";
s3.disp();
s4*s2;
cout<<"s1*s2运算后的结果:";
s4.disp();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询