集合的并、交和差运算 c语言程序
时间: 2024-01-26 15:03:48 浏览: 39
以下是C语言中集合的并、交和差运算的程序示例:
```c
#include <stdio.h>
void setUnion(int set1[], int set2[], int n1, int n2) {
int i, j, k, flag;
int set3[n1+n2];
// 将set1中的元素拷贝到set3中
for (i=0; i<n1; i++) {
set3[i] = set1[i];
}
// 遍历set2中的元素,如果不在set3中,则将其加入set3中
k = n1;
for (i=0; i<n2; i++) {
flag = 0;
for (j=0; j<n1; j++) {
if (set2[i] == set1[j]) {
flag = 1;
break;
}
}
if (flag == 0) {
set3[k++] = set2[i];
}
}
// 输出set3中的元素
printf("Set Union: { ");
for (i=0; i<k; i++) {
printf("%d ", set3[i]);
}
printf("}\n");
}
void setIntersection(int set1[], int set2[], int n1, int n2) {
int i, j, k=0;
int set3[n1];
// 遍历set1中的元素,如果在set2中,则将其加入set3中
for (i=0; i<n1; i++) {
for (j=0; j<n2; j++) {
if (set1[i] == set2[j]) {
set3[k++] = set1[i];
break;
}
}
}
// 输出set3中的元素
printf("Set Intersection: { ");
for (i=0; i<k; i++) {
printf("%d ", set3[i]);
}
printf("}\n");
}
void setDifference(int set1[], int set2[], int n1, int n2) {
int i, j, k=0;
int set3[n1];
// 遍历set1中的元素,如果不在set2中,则将其加入set3中
for (i=0; i<n1; i++) {
for (j=0; j<n2; j++) {
if (set1[i] == set2[j]) {
break;
}
if (j == n2-1) {
set3[k++] = set1[i];
}
}
}
// 输出set3中的元素
printf("Set Difference: { ");
for (i=0; i<k; i++) {
printf("%d ", set3[i]);
}
printf("}\n");
}
int main() {
int set1[5] = {1, 3, 5, 7, 9};
int set2[5] = {2, 4, 6, 8, 10};
int n1 = sizeof(set1)/sizeof(set1[0]);
int n2 = sizeof(set2)/sizeof(set2[0]);
setUnion(set1, set2, n1, n2);
setIntersection(set1, set2, n1, n2);
setDifference(set1, set2, n1, n2);
return 0;
}
```
输出结果如下:
```
Set Union: { 1 3 5 7 9 2 4 6 8 10 }
Set Intersection: { }
Set Difference: { 1 3 5 7 9 }
```
注意:这里的集合是指不重复元素的序列,因此程序中没有去重操作。如果需要去重,可以使用哈希表等数据结构。