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

本文介绍了集合在数学中的概念,重点阐述了并集、交集、差集和对称差集的基本运算,并给出了C语言的代码实现示例,展示了如何通过编程计算集合之间的关系。
摘要由CSDN通过智能技术生成

集合的定义

集合(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 <stdio.h>
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;
}

代码运行结果 

  • 17
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的C语言代码示例,演示了集合的并、交、差等基本运算: ```c #include <stdio.h> // 定义集合的最大容量 #define MAX_SIZE 100 // 定义集合结构体 typedef struct { int elements[MAX_SIZE]; int size; } Set; // 初始化集合 void initializeSet(Set* set) { set->size = 0; } // 添加元素到集合 void addElement(Set* set, int element) { if (set->size < MAX_SIZE) { set->elements[set->size] = element; set->size++; } } // 打印集合元素 void printSet(Set set) { printf("{ "); for (int i = 0; i < set.size; i++) { printf("%d ", set.elements[i]); } printf("}\n"); } // 求两个集合的并集 Set unionSet(Set set1, Set set2) { Set resultSet; initializeSet(&resultSet); // 将set1的元素添加到resultSet for (int i = 0; i < set1.size; i++) { addElement(&resultSet, set1.elements[i]); } // 将set2中不重复的元素添加到resultSet for (int i = 0; i < set2.size; i++) { int element = set2.elements[i]; bool alreadyExists = false; // 检查element是否已经存在于resultSet中 for (int j = 0; j < resultSet.size; j++) { if (resultSet.elements[j] == element) { alreadyExists = true; break; } } // 如果element不存在于resultSet中,则添加到resultSet if (!alreadyExists) { addElement(&resultSet, element); } } return resultSet; } // 求两个集合的交集 Set intersectSet(Set set1, Set set2) { Set resultSet; initializeSet(&resultSet); // 遍历set1中的元素,如果存在于set2中,则添加到resultSet for (int i = 0; i < set1.size; i++) { int element = set1.elements[i]; for (int j = 0; j < set2.size; j++) { if (set2.elements[j] == element) { addElement(&resultSet, element); break; } } } return resultSet; } // 求两个集合的差集 Set differenceSet(Set set1, Set set2) { Set resultSet; initializeSet(&resultSet); // 遍历set1中的元素,如果不存在于set2中,则添加到resultSet for (int i = 0; i < set1.size; i++) { int element = set1.elements[i]; bool existsInSet2 = false; // 检查element是否存在于set2中 for (int j = 0; j < set2.size; j++) { if (set2.elements[j] == element) { existsInSet2 = true; break; } } // 如果element不存在于set2中,则添加到resultSet if (!existsInSet2) { addElement(&resultSet, element); } } return resultSet; } int main() { // 初始化集合 set1 = {1, 2, 3} Set set1; initializeSet(&set1); addElement(&set1, 1); addElement(&set1, 2); addElement(&set1, 3); // 初始化集合 set2 = {2, 3, 4} Set set2; initializeSet(&set2); addElement(&set2, 2); addElement(&set2, 3); addElement(&set2, 4); // 计算并集 Set unionResult = unionSet(set1, set2); printf("Union: "); printSet(unionResult); // 计算交集 Set intersectResult = intersectSet(set1, set2); printf("Intersection: "); printSet(intersectResult); // 计算差集 Set differenceResult = differenceSet(set1, set2); printf("Difference: "); printSet(differenceResult); return 0; } ``` 在上面的代码示例中,我们定义了一个`Set`结构体来表示一个集合,包含了一个整型数组`elements`和集合的大小`size`。通过函数来实现集合的初始化、元素的添加、集合的打印,以及并、交、差等基本运算。 在`main`函数中,我们创建了两个集合`set1`和`set2`,并调用相应的函数来进行并、交、差等运算,并将结果打印出来。 你可以根据自己的需求,修改和扩展这段代码来实现更复杂的集合运算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值