集合的交并差补运算c语言代码
时间: 2023-09-26 22:13:59 浏览: 38
以下是集合的交并差补运算的C语言代码示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 集合结构体
typedef struct Set {
int size;
int data[MAX_SIZE];
} Set;
// 初始化集合
void initSet(Set *s) {
s->size = 0;
}
// 添加元素到集合中
void addElement(Set *s, int x) {
if (s->size == MAX_SIZE) {
printf("Set is full!\n");
return;
}
for (int i = 0; i < s->size; i++) {
if (s->data[i] == x) {
return;
}
}
s->data[s->size++] = x;
}
// 打印集合
void printSet(Set *s) {
printf("{ ");
for (int i = 0; i < s->size; i++) {
printf("%d ", s->data[i]);
}
printf("}\n");
}
// 集合的交运算
Set intersection(Set *s1, Set *s2) {
Set result;
initSet(&result);
for (int i = 0; i < s1->size; i++) {
for (int j = 0; j < s2->size; j++) {
if (s1->data[i] == s2->data[j]) {
addElement(&result, s1->data[i]);
break;
}
}
}
return result;
}
// 集合的并运算
Set unionSet(Set *s1, Set *s2) {
Set result;
initSet(&result);
for (int i = 0; i < s1->size; i++) {
addElement(&result, s1->data[i]);
}
for (int i = 0; i < s2->size; i++) {
addElement(&result, s2->data[i]);
}
return result;
}
// 集合的差运算
Set difference(Set *s1, Set *s2) {
Set result;
initSet(&result);
for (int i = 0; i < s1->size; i++) {
int flag = 0;
for (int j = 0; j < s2->size; j++) {
if (s1->data[i] == s2->data[j]) {
flag = 1;
break;
}
}
if (!flag) {
addElement(&result, s1->data[i]);
}
}
return result;
}
// 集合的补运算
Set complement(Set *s1, Set *s2) {
Set result;
initSet(&result);
for (int i = 0; i < s1->size; i++) {
int flag = 0;
for (int j = 0; j < s2->size; j++) {
if (s1->data[i] == s2->data[j]) {
flag = 1;
break;
}
}
if (!flag) {
addElement(&result, s1->data[i]);
}
}
for (int i = 0; i < s2->size; i++) {
int flag = 0;
for (int j = 0; j < s1->size; j++) {
if (s2->data[i] == s1->data[j]) {
flag = 1;
break;
}
}
if (!flag) {
addElement(&result, s2->data[i]);
}
}
return result;
}
int main() {
Set s1, s2, s3;
initSet(&s1);
initSet(&s2);
addElement(&s1, 1);
addElement(&s1, 2);
addElement(&s1, 3);
addElement(&s1, 4);
addElement(&s2, 3);
addElement(&s2, 4);
addElement(&s2, 5);
addElement(&s2, 6);
printf("s1 = ");
printSet(&s1);
printf("s2 = ");
printSet(&s2);
printf("s1 ∩ s2 = ");
s3 = intersection(&s1, &s2);
printSet(&s3);
printf("s1 ∪ s2 = ");
s3 = unionSet(&s1, &s2);
printSet(&s3);
printf("s1 - s2 = ");
s3 = difference(&s1, &s2);
printSet(&s3);
printf("s2 - s1 = ");
s3 = difference(&s2, &s1);
printSet(&s3);
printf("s1' = ");
s3 = complement(&s1, &s2);
printSet(&s3);
printf("s2' = ");
s3 = complement(&s2, &s1);
printSet(&s3);
return 0;
}
```
运行结果:
```
s1 = { 1 2 3 4 }
s2 = { 3 4 5 6 }
s1 ∩ s2 = { 3 4 }
s1 ∪ s2 = { 1 2 3 4 5 6 }
s1 - s2 = { 1 2 }
s2 - s1 = { 5 6 }
s1' = { 1 2 5 6 }
s2' = { 1 2 }
```