欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-22 19:22:18
...

用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);
	
}

运行页面部分截图

用c++实现正整数集合的交、并、差
输入2:
用c++实现正整数集合的交、并、差

上一篇: Java8新特性

下一篇: 03-时间日期类