C语言/C++语言程序设计集合运算 集合的交集、并集、补集运算

使用C/C++实现集合的交集、并集、补集运算

不墨迹,直接上代码,祝大家学习愉快。

#include<stdio.h>
#define MAX1 5
#define MAX2 4
void display(int a[],int n)//输出数组元素
{
	
	printf("\n");
	for(int i=0;i<n;i++)
		printf("%d ",a[i]);
	printf("\n");
}

void complementary(int a[],int n,int b[],int m)//相对补集运算 假设全集为长度较长的数列
{
	printf("补集: ");
	if(n==m){printf("\n两数组长度相等,不符合条件,不进行补集运算\n");return;}
	if(n>m)
	{
		int *t=a;
		a=b;
		b=t;
		int temp=n;
		n=m;
		m=temp;
	}
	int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储补集元素 
	int i,j,jj;//循环控制变量 
	i=0; 
	for(jj=0;jj<m;jj++)//进行筛选
	{
		int flag=1;
		for(j=0;j<n;j++)
		{
			if(b[jj]==a[j]){flag=0;break;}
		}
		if(flag)c[i++]=b[jj];
	}
	
	display(c,i);//将补集数列输出
}


void intersection(int a[],int n,int b[],int m)//求数组a[]与数组b[]的交集 
{
	
	int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储交集元素 
	int i,j,jj;//循环控制变量 
	i=0;
	for(jj=0;jj<m;jj++)//进行筛选
	{
		int flag=0;
		for(j=0;j<n;j++)
		{
			if(b[jj]==a[j]){flag=1;break;}
		}
		if(flag)c[i++]=b[jj];
	}
	printf("交集: ");
	display(c,i);//将交集数列输出
}


void unionSets(int a[],int n,int b[],int m)//求数组a[]与数组b[]的并集 
{
	int c[MAX1+MAX2];//定义一个n+m长的数组用c[]来存储并集元素
	if(n<m)
	{
		int *t=a;
		a=b;
		b=t;
		int temp=n;
		n=m;
		m=temp;
	} 
int i,j,jj;//循环控制变量 
for(i=0;i<n;i++)//首先将a[]中的元素依次放进c[]中 
{
	c[i]=a[i];
}
//此时的变量i的值为n,为接下来的筛选两个数列中的元素做铺垫
for(jj=0;jj<m;jj++)//进行筛选
	{
		int flag=1;
		for(j=0;j<n;j++)
		{
			if(b[jj]==a[j]){flag=0;break;}
		}
		if(flag)c[i++]=b[jj];
	}
	printf("并集:");
	display(c,i);//将并集数列输出 
}

//接下来我们使用main测试一下
void main()
{
	int a[MAX1]={1,5,2,6,7};//举例子
	int b[MAX2]={1,4,5,6};//举例子
	complementary(a,MAX1,b,MAX2);//调用补集运算函数
	intersection(a,MAX1,b,MAX2);//调用交集运算函数
	unionSets(a,MAX1,b,MAX2);//调用并集运算函数
	
}

今天的教程到此结束,望谅解,白天比较忙,只有晚上才有时间和大家交流学习,最后,祝大家圣诞节快乐。在这里插入图片描述

  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
下面是用C语言实现集合交集并集补集的程序: ```c #include <stdio.h> int main() { int set1[100], set2[100], intersection[100], unionSet[200], complement[100], i, j, k, n1, n2, n3 = 0; // 输入第一个集合 printf("Enter number of elements in set1: "); scanf("%d", &n1); printf("Enter elements of set1: "); for (i = 0; i < n1; i++) { scanf("%d", &set1[i]); } // 输入第二个集合 printf("Enter number of elements in set2: "); scanf("%d", &n2); printf("Enter elements of set2: "); for (i = 0; i < n2; i++) { scanf("%d", &set2[i]); } // 计算交集 k = 0; for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (set1[i] == set2[j]) { intersection[k++] = set1[i]; break; } } } printf("Intersection of set1 and set2: "); for (i = 0; i < k; i++) { printf("%d ", intersection[i]); } printf("\n"); // 计算并集 k = 0; for (i = 0; i < n1; i++) { unionSet[k++] = set1[i]; } for (i = 0; i < n2; i++) { for (j = 0; j < n1; j++) { if (set2[i] == set1[j]) { break; } } if (j == n1) { unionSet[k++] = set2[i]; } } printf("Union of set1 and set2: "); for (i = 0; i < k; i++) { printf("%d ", unionSet[i]); } printf("\n"); // 计算补集 k = 0; for (i = 0; i < n1; i++) { for (j = 0; j < n2; j++) { if (set1[i] == set2[j]) { break; } } if (j == n2) { complement[k++] = set1[i]; } } printf("Complement of set1 with respect to set2: "); for (i = 0; i < k; i++) { printf("%d ", complement[i]); } printf("\n"); return 0; } ``` 程序首先输入两个集合,然后计算它们的交集并集补集,并输出结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

覃定忠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值