(1)实验目的
通过该实验,让学生复习巩固C语言中的分支结构、循环结构、数组、链表、函数的调用等有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。
(2)实验内容
通过键盘,分别输入集合A和B中的数据元素,要求数据元素类型为整数类型,输出两个集合的交、并、差。
(3)实验要求
a)从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能,每个集合中不允许有重复的元素。集合可以用数组存储,也可以用链表存储。
b)实现交、并、差运算时,分别把代码写成函数的形式,即实现交运算的函数,实现并运算的函数,实现差运算的函数,在主函数中分别调用三个函数。
c)使用菜单形式对应各个操作,应允许用户反复查看结果,想结束程序时,输入负数结束,使其编成一个完整的小软件。菜单参考示例如下:
1---输入集合A和B
2---求集合A交B
3---求集合A并B
4---求集合A-B
退出,输入一个负数!
菜单:建议不要做成清屏和刷屏的效果,否则后面截图会比较麻烦。
(4)验收/测试用例
如:输入: A={1,2,3,4,5} B={3,4,5,6,7}
要注意输入的过程中,每输入一个元素都要检查输入的这个元素是否和前面的元素重复,如果重复,要求用户重新输入当前元素。
验收测试时要测试这种重复的情况。
输出:A交B={3, 4, 5} A并B={1,2,3,4,5,6,7} A-B={1, 2}
代码如下:
#include<iostream>
using namespace std;
int menu1();
int menu2(int i);//多级菜单
void shuru();
void jiao();
void bing();
void jian();//功能函数
int a[100],b[100];
int n=0,m=0,g=0;//定义全局变量
int main()
{
int a=0;
while(a>=0)
{
a=menu2(menu1());
}
}
int menu1()
{
int i;
cout<<"**************************************"<<endl;
cout<<"**1---输入集合A和B **"<<endl;
cout<<"**2---求集合A交B **"<<endl;
cout<<"**3---求集合A并B **"<<endl;
cout<<"**4---求集合A-B **"<<endl;
cout<<"** 退出,输入一个负数! **"<<endl;
cout<<"**请您选择(输入数字):"<<endl;
cin>>i;
return i;
}
int menu2(int i)
{
switch(i)
{
case 1:shuru();break;
case 2:jiao();break;
case 3:bing();break;
case 4:jian();break;
default:cout<<"程序已退出.......";break;
}
return i;
}
void shuru()
{
char k,l;
cout<<"请输入集合a"<<endl;
for(n;k!='\n';n++)
{
cin>>a[n];
k=getchar();
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
cout<<"错误...集合a中元素重复......"<<endl;
return;
}
}
}
cout<<"请输入集合b"<<endl;
for(m;l!='\n';m++)
{
cin>>b[m];
l=getchar();
}
for(int i=0;i<m;i++)
{
for(int j=i+1;j<m;j++)
{
if(b[i]==b[j])
{
cout<<"错误...集合b中元素重复......"<<endl;
return;
}
}
}
g=1;
}
void jiao()
{
if(g==0)
{
cout<<"请先输入ab集合的值"<<endl;
return;
}
cout<<"ab两个集合的交集为:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i]==b[j])
cout<<a[i]<<" ";
}
}
cout<<endl;
}
void bing()
{
if(g==0)
{
cout<<"请先输入ab集合的值"<<endl;
return;
}
int temp;
int c[n+m];
for(int i=0;i<n;i++)
c[i]=a[i];
for(int i=n;i<n+m;i++)
c[i]=b[i-n];//将两个集合组合成一个数组
for(int i=1;i<n+m;i++)
{
for(int j=0;j<n+m-i;j++)
{
if(c[j]>c[j+1])
{
temp=c[j];
c[j]=c[j+1];
c[j+1]=temp;
}
}
} //冒泡排序
cout<<"ab两个集合的并集为:"<<endl;
for(int i=0;i<n+m;i++)
{
if(c[i]!=c[i+1])
cout<<c[i]<<" ";
}
cout<<endl;
}
void jian()
{
if(g==0)
{
cout<<"请先输入ab集合的值"<<endl;
return;
}
cout<<"a集合减b集合的结果为:";
for(int i=0;i<n;i++)
{
int x=0;
for(int j=0;j<m;j++)
{
if(a[i]==b[j])
x=1;
}
if(x==0)
cout<<a[i]<<" ";
}
cout<<endl;
}
代码仅作参考 切勿照搬 避免查重QAQ