集合的定义
集合(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;
}