C语言实现集合的基本运算

集合的定义

集合(Set)是数学中一个基本的概念,它指的是一个无序的不重复元素序列。在集合论中,集合的基本运算包括并集、交集、差集和对称差集。

集合基本运算类型的说明

并集(Union)

 给定两个集合A和B,它们之间的并集A ∪ B是所有属于A或属于B的元素组成的集合,即A ∪ B = {x|x ∈ A ∨ x ∈ B}。

 交集(Intersection)

给定两个集合A和B,它们之间的交集A ∩ B是所有既属于A又属于B的元素组成的集合,即A ∩ B = {x|x ∈ A ∧ x ∈ B}。

 差集(Difference)

给定两个集合A和B,A与B的差集A - B是所有属于A但不属于B的元素组成的集合,即A - B = {x|x ∈ A ∧ x ∉ B}。

 对称差集(Symmetric Difference)

给定两个集合A和B,A与B的对称差集A ⊕ B是所有属于A但不属于B或属于B但不属于A的元素组成的集合,即A ⊕ B = (A - B) ∪ (B - A)。

推广

这些基本集合运算可以推广到多个集合的情况,例如:

1. 并集:A ∪ B ∪ C = A ∪ (B ∪ C) = (A ∪ B) ∪ C。
2. 交集:A ∩ B ∩ C = A ∩ (B ∩ C) = (A ∩ B) ∩ C。
3. 差集:A - B - C = A - (B ∪ C) = (A - B) - C。
4. 对称差集:A ⊕ B ⊕ C = (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C)。

注意事项

需要注意的是,这些集合运算是不满足交换律的,即一般而言,A ∪ B ≠ B ∪ A、A ∩ B ≠ B ∩ A、A - B ≠ B - A、A ⊕ B ≠ B ⊕ A。

C语言代码实现集合的基本运算

#include 
void jiaoyunsuan(int a[], int b[], int c[])//进行集合交运算的函数
{
	int i, j, k = 0;
	for (i = 0; i < 5; i++) {
		for (j = 0; j < 5; j++) {
			if (a[i] == b[j]) {
				c[k] = a[i];
				k++;
				break;
			}
		}
	}
	for (i = 0; i < k; i++) {
		printf("%d ", c[i]);
	}
	printf("\n");
}
void bingyunsuan(int a[], int b[], int c[])//进行集合并运算的函数
{
	int i, j, k = 0;
	for (i = 0; i < 5; i++) {
		c[k] = a[i];
		k++;
	}
	for (i = 0; i < 5; i++)
	{
		int flag = 1;
		for (j = 0; j < 5; j++)
		{
			if (b[i] == a[j])
			{
				flag = 0;
				break;
			}
		}
		if (flag) {
			c[k] = b[i];
			k++;
		}
	}
	for (i = 0; i < k; i++)
	{
		printf("%d ", c[i]);
	}
	printf("\n");
}
void chayunsuan(int a[], int b[], int c[])//进行集合差运算的函数
{
	int d[5], i, j, k = 0;
	for (i = 0; i < 5; i++) {
		c[i] = a[i];
	}
	for (i = 0; i < 5; i++) {
		int flag = 1;
		for (j = 0; j < 5; j++) {
			if (c[i] == b[j]) {
				flag = 0;
				break;
			}
		}
		if (flag) {
			d[k] = c[i];
			k++;
		}
	}
	for (i = 0; i < k; i++) {
		printf("%d ", d[i]);
	}printf("\n");
}
void buyunsuan(int a[], int c[], int e[])//进行集合补运算的函数
{
	int i, k = 0, j;
	for (i = 0; i < 10; i++) {
		int flag = 1;
		for (j = 0; j < 5; j++) {
			if (e[i] == a[j]) {
				flag = 0;
				break;
			}
		}
		if (flag) {
			c[k] = e[i];
			k++;
		}
	}
	for (i = 0; i < k; i++) {
		printf("%d ", c[i]);
	}printf("\n");
}
void duidengchayunsuan(int a[], int b[], int c[])//进行集合对称差运算的函数
{
	int d[10], i, j, k = 0;
	for (i = 0; i < 5; i++) {
		c[i] = a[i];
	}
	for (i = 0; i < 5; i++) {
		int flag = 1;
		for (j = 0; j < 5; j++) {
			if (c[i] == b[j]) {
				flag = 0;
				break;
			}
		}
		if (flag) {
			d[k] = c[i];
			k++;
		}
	}
	for (i = 0; i < 5; i++) {
		c[i] = b[i];
	}
	for (i = 0; i < 5; i++) {
		int flag = 1;
		for (j = 0; j < 5; j++) {
			if (c[i] == a[j]) {
				flag = 0;
				break;
			}
		}
		if (flag) {
			d[k] = c[i];
			k++;
		}
	}
	for (i = 0; i < k; i++) {
		printf("%d ", d[i]);
	}
}

int main()
{
	int a[5] = { 0 }, b[5] = { 0 }, c[10] = { 0 }, e[10];
	int i;
	printf("输入集合A的元素:\n");
	for (i = 0; i < 5; i++) {
		scanf("%d", &a[i]);
	}
	printf("输入集合B的元素:\n");
	for (i = 0; i < 5; i++) {
		scanf("%d", &b[i]);
	}
	printf("输入全集E的元素:\n");
	for (i = 0; i < 10; i++) {
		scanf("%d", &e[i]);
	}
	printf("集合A和集合B的交集:\n");
	jiaoyunsuan(a, b, c);
	printf("集合A和集合B的并集:\n");
	bingyunsuan(a, b, c);
	printf("集合A和集合B的差运算:\n");
	chayunsuan(a, b, c);
	printf("集合A的补运算:\n");
	buyunsuan(a, c, e);
	printf("集合B的补运算:\n");
	buyunsuan(b, c, e);
	printf("集合A和集合B的对称差运算:\n");
	duidengchayunsuan(a, b, c);
	return 0;
}

代码运行结果 

C语言实现集合的基本运算_第1张图片

你可能感兴趣的:(c语言,算法,数据结构)