集合的运算

集合的一些运算(交,并,补,对称差)

集合运算介绍

  • 交集

集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(intersection),记作A∩B。 即:A∩B= {x|x∈A∧x∈B}。

  • 并集

若A和B是集合,则A和B并集是有所有A的元素和所有B的元素,而没有其他元素的集合。A和B的并集通常写作 “A∪B”,读作“A并B”,用符号语言表示,即:A∪B={x|x∈A,或x∈B}
形式上,x是A∪B的元素,当且仅当x是A的元素,或x是B的元素。

  • 补集

1、相对补集
若A和B 是集合,则A 在B 中的相对补集是这样一个集合:其元素属于B但不属于A,B - A = { x| x∈B且x∉A}。
2、绝对补集
若给定全集U,有A⊆U,则A在U中的相对补集称为A的绝对补集(或简称补集),写作∁UA。
注意:学习补集的概念,首先要理解全集的相对性,补集符号∁UA有三层含义:
1、A是U的一个子集,即A⊆U;
2、∁UA表示一个集合,且∁UA⊆U;
3、∁UA是由U中所有不属于A的元素组成的集合,∁UA与A没有公共元素,U中的元素分布在这两个集合中。

  • 对称差

对称差相当于两个相对补集的并集,即:
也可以表示为两个集合的并集减去它们的交集:
或者用 异或 运算表示:
在对称差运算中,空集是单位元,任何元素都是其自身的逆元。

代码展示

#include<stdio.h>
#include<string.h>
 char jiaoji[100][20],a[100][20],b[100][20],bingji[200][20],buji[100][20],duichengcha[200][20]; 
 int c;
 int main(){
 memset(jiaoji,'\0',sizeof(jiaoji));
 memset(a,'\0',sizeof(a));
 memset(b,'\0',sizeof(b));
 memset(bingji,'\0',sizeof(bingji));
 memset(buji,'\0',sizeof(buji));
 
  memset(duichengcha,'\0',sizeof(duichengcha));
     void dui(int m,int n,int u);
    void bu(int m,int n,int u);
	void jiao(int m,int n);
   void bing(int m,int n,int u);
	int i,j,m,n;
	printf("请输入2个集合的元素个数:\n"); //输入两个集合元素个数 
	scanf("%d%d",&m,&n);
		     
	printf("请输入第一个集合元素:\n"); //输入两个集合元素
	for(i=0;i<m;i++)
      scanf("%s",a[i]);
      printf("请输入第二个集合元素:\n");
    for(j=0;j<n;j++)
       scanf("%s",b[j]); 
       
	jiao(m,n);  //集合的子函数 
	bing(c,n,m);	
	bu(c,n,m);
	dui(c,n,m);
	
	
	
	printf("集合的交集:\n");      //打印交集 
	for(i=0;jiaoji[i][0]!='\0';i++){
		printf("%s",jiaoji[i]);
		printf("  ");
	}
	printf("\n");
	printf("集合的并集:\n");     //打印并集 
	for(i=0;bingji[i][0]!='\0';i++){
		printf("%s",bingji[i]);
		printf("  ");
	}
	
	printf("\n");
	printf("集合B对于A补集:\n");     //打印补集 
	for(i=0;buji[i][0]!='\0';i++){
		printf("%s",buji[i]);
		printf("  ");
	}
	printf("\n");
	printf("集合AB对称差:\n");     //打印对称差 
	for(i=0;duichengcha[i][0]!='\0';i++){
		printf("%s",duichengcha[i]);
		printf("  ");
	}
    return 0;
} 
void jiao(int m,int n){
	c=0;
	int i,j;
	for(i=0;i<m;i++){
			for(j=0;j<n;j++){
				if(strcmp(a[i],b[j])==0)strcpy(jiaoji[c++],a[i]);
			}
	} 	
	
}

void bing(int m,int n,int u){     //m为交集元素个数,n为b数组元素个数,u为a数组元素个数 
	
	int i,j;
	int k=1;
	for(i=0;i<u;i++){
		strcpy(bingji[i],a[i]);
	}
	
	int h=u;
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			if(strcmp(jiaoji[j],b[i])==0)k=0;
		}
		if(k)strcpy(bingji[h++],b[i]);
		k=1;
	}	
}
void bu(int m,int n,int u){     //m为交集元素个数,n为b数组元素个数,u为a数组元素个数 
	int i,j;
	int k=1;
	int q=0;
	for(i=0;i<u;i++){
		for(j=0;j<m;j++){
				if(strcmp(jiaoji[j],a[i])==0)k=0;
		}
		if(k)strcpy(buji[q++],a[i]);
		k=1;
	
	}
}

 void dui(int m,int n,int u){   //m为交集元素个数,n为b数组元素个数,u为a数组元素个数 

 	int i,j;
 	int p=0;
 	int k=1;
 	for(i=0;i<u;i++){
		for(j=0;j<m;j++){
				if(strcmp(jiaoji[j],a[i])==0)k=0;
		}
		if(k)strcpy(duichengcha[p++],a[i]);
		k=1;
	
	}
    for(i=0;i<n;i++){
		for(j=0;j<m;j++){
				if(strcmp(jiaoji[j],b[i])==0)k=0;
		}
		if(k)strcpy(duichengcha[p++],b[i]);
		k=1;
	
	}

 }

在这里插入图片描述

总结

代码的每个子函数功能很明确
要有清晰的思路也还是不难的,打这些运算时不要手忙脚乱,打出来还是可以的

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@别样

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

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

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

打赏作者

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

抵扣说明:

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

余额充值