通过键盘,分别输入集合A和B中的数据元素,要求数据元素类型为整数类型,输出两个集合的交、并、差。

(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}

要注意输入的过程中,每输入一个元素都要检查输入的这个元素是否和前面的元素重复,如果重复,要求用户重新输入当前元素。

验收测试时要测试这种重复的情况。

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
//定义数组、全局变量,提前声明函数。 
int a[100], b[100];
int n, m;
int menu1();
int menu2(int i);
int enter();
void jiao();
void bing();
void M();
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;
	cout << "|        通过“Enter”进行下一步操作         |" << endl;
	cout << "———————————————————————" << endl;
	cin >> i;
	return i;
}

int menu2(int i)
{
	switch (i)
	{
	case 1:enter(); break;
	case 2:jiao(); break;
	case 3:bing(); break;
	case 4:M(); break;
	default:cout << "成功退出程序"; break;
	}
	return i;
}
int enter()
{
	cout << "集合A的元素个数为:" << endl;
	cin >> n;
	cout << "集合A为:" << endl;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (a[i] == a[j])
			{
				cout << "A中的元素出现重复" << endl;
				return 0;
			}
		}
	}
	cout << "集合B的元素个数为:" << endl;
	cin >> m;
	cout << "集合B为:" << endl;
	for (int i = 0; i < m; i++)
		cin >> b[i];
	for (int i = 0; i < m; i++)
	{
		for (int j = i + 1; j < m; j++)
		{
			if (b[i] == b[j])
			{
				cout << "B中的元素出现重复" << endl;
				return 0;
			}
		}
	}
}
void jiao()//通过对比两个集合数组内的元素来发现相同的元素,然后输出全部相同的元素。 
{
	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()
{
	int t;
	int c[100];
	for (int i = 0; i < n; i++)
		c[i] = a[i];
	for (int i = n; i < n + m; i++)
		c[i] = b[i - n];//数组c先收纳数组a和数组b里面所有的元素。 
	for (int i = 0; i < n + m; i++)
	{
		for (int j = 0; j < n + m - i; j++)
		{
			if (c[j] > c[j + 1])
			{
				t = c[j];
				c[j] = c[j + 1];
				c[j + 1] = t;
			}
		}
	}//排序(冒泡排序) 
	cout << "AB集合的并集为:" << endl;
	for (int i = 0; i <= n + m; i++)//因为前面的冒泡排序将并集的最后一个数赋值到c[m+n]上了,所以这里必须是i<=n+m!!
	{
		if (c[i-1] != c[i])
			cout << c[i] << " ";
	}
	cout << endl;
};
void M()
{
	int c[100];
	for (int i = 0; i < n; i++)
		c[i] = a[i];
	cout << "A集合减B集合为:";
	for (int i = 0; i < n; i++)
	{
		int x = 0;
		for (int j = 0; j < m; j++)
		{
			if (c[i] == b[j])
				x = 1;
		}
		if (x == 0)
			cout << c[i] << " ";
	}
	cout << endl;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值