用c++实现正整数集合的交、并、差

用c++实现正整数集合的交、并、差

(1)实验目的

通过该实验,让学生复习巩固C语言中的循环结构、循环控制条件、分支结构和数组/链表、函数的调用等有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。

(2)实验内容

通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。

(3)实验要求

从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能,每个集合中不允许有重复的元素。集合可以用数组也可以用链表存储。
实现交、并、差运算时,分别把代码写成函数的形式,即实现交运算的函数,实现并运算的函数,实现差运算的函数,在主函数中分别调用三个函数。
使用菜单形式对应各个操作,应允许用户反复查看结果,想结束程序时,输入负数结束,使其编成一个完整的小软件。菜单参考示例如下:
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}

代码实现

(编译环境:vs2017)

#include "pch.h"
#include  <stdio.h> 
#include <iostream>
#include <stdlib.h>
using namespace std;
int array01[50];
int array02[50]; 
//检查重复的方法
bool CheckRepeat(int array[], int newNumber)
{

	int length = 50;
	for (int i = 0; i < length; i++)
	{
		if (newNumber == array[i])
		{

			return false;
		}	
	}
	return true;
}
//交集 
void IN(int array1[], int array2[],int length1,int length2)
{
	int newLength = length1 > length2 ? length1 : length2;
	int newArray[50];
	int a = 0;
	for (int i = 0; i < length1; i++)
	{
		
		if (!CheckRepeat(array2, array1[i]))
		{
			newArray[a++] = array1[i];
		}
	}
	cout << "交集的结果为" << endl;
	for (int  i = 0; i  <  length1; i++)
	{
		if (newArray[i] <= 0)break;
		cout << newArray[i] <<"  ";
		
	}
}
//并集
void Union(int array1[], int array2[],int length1,int length2)
{
	int newLength = length1 + length2;
	int newArray[100];
	for (int i = 0; i < length1; i++)
	{
		newArray[i] = array1[i];
	}
	for (int i = 0,j=0; i < length2; i++)
	{
		if (CheckRepeat(array1, array2[i]))
		{
			newArray[length1  + j] = array2[i];
			j++;
		}
	}
	cout << "并集的结果为" << endl;
	for (int i = 0; i < newLength; i++)
	{
		if (newArray[i] <= 0)break;
		cout << newArray[i] << "  ";

	}

}
//差
void Difference(int array1[], int array2[],int length1,int length2)
{
	int number = 0;
	int array01[50];
	for (int i = 0; i <length1; i++)
	{
		array01[i] = array1[i];
	}
	//以下是获取交集数组的过程
	int newArray[50];
	int a = 0;
	for (int i = 0; i < length1; i++)
	{

		if (!CheckRepeat(array2, array1[i]))
		{
			newArray[a++] = array1[i];
		}
	}
	//获取newArray为交集数组
	for (int i = 0; i < length1; i++)
	{
		if (!CheckRepeat(newArray,array01[i]))
		{
			array01[i] = 0;
			continue;
		}
	}
	cout << "差的结果为" << endl;
	for (int i = 0; i < length1; i++)
	{
		if (array01[i] > 0)
		
			cout << array01[i] << "  ";
		

	}

}
void MAIN(int array1[],int array2[],int length1,int length2)
{
	int inputNum=1;
	system("cls");
	while (inputNum != 0)
	{
		cout << "2---求集合A交B" << endl;
		cout << "3---求集合A并B" << endl;
		cout << "4---求集合A-B" << endl;
		cout << "输入0---退出" << endl;

		cin >> inputNum;
		switch (inputNum)
		{
		case 2:
			IN(array1, array2, length1, length2); break;
		case 3:
			Union(array1, array2, length1, length2); break;
		case 4:
			Difference(array1, array2, length1, length2); break;
		default:
			break;
		}
		cout << "输入数字回车跳转进入下一步" << endl;
		cin >> inputNum;
		system("cls");
	}
}

int main()
{int nums1=0;
int nums2=0;
//第一个集合输入
	while (true)
	{
		cout << "请输入第一个集合的元素个数" << endl;
		
		cin >> nums1;
		if (nums1 < 49 && nums1 > 0)
		{
			break;

		}
		else
		cout << "我只支持0~50的,这样不行哦" << endl;

	}
	int i = 0;
	while (true)
	{
		 int num = 0;
		cout << "请输入元素" << endl;
		cin >> num;
		if (i ==nums1-1)
		{
			cout << "已经够多了,容不下了" << endl;
			cout << "程序输入结束!" << endl;
			array01[i] = num;
			break;
		}
		if(num<0)
		{
			cout << "程序输入结束!" << endl;
			break;
		}
		array01[i] = num;
		i++;
	}
	cout << "第一个集合如下" << endl;
	for (int i = 0; i < nums1; i++)
	{
		cout << array01[i]<<"  ";
	}
	//第二个集合输入
	while (true)
	{
		cout << "请输入第二个集合的元素个数" << endl;

		cin >> nums2;
		if (nums2 < 49 && nums2 >= 0)
		{
			break;

		}
		else
			cout << "我只支持0~50的,这样不行哦" << endl;

	}
	i = 0;
	while (true)
	{
		 int num = 0;
		cout << "请输入元素" << endl;
		cin >> num;
		if (i == nums2-1)
		{
			cout << "已经够多了,容不下了" << endl;
			cout << "程序输入结束!" << endl;
			array02[i] = num;
			break;
		}
		if (num < 0)
		{
			cout << "程序输入结束!" << endl;
			break;
		}
		array02[i] = num;
		i++;
	}
	cout << "第二个集合如下" << endl;
	for (int i = 0; i < nums2; i++)
	{
		cout << array02[i] << "  ";
	}
	MAIN( array01,array02, nums1,  nums2);
	
}
运行页面部分截图

运行输入
输入2:
在这里插入图片描述

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值