(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

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信