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