给定两个集合A、B,验证集合的并、交、相对补和对称差运算。用c语言写
时间: 2024-01-24 18:04:57 浏览: 103
以下是用C语言实现集合的并、交、相对补和对称差运算的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 求集合的并
int set_union(int setA[], int setB[], int setSizeA, int setSizeB, int resultSet[]) {
int i, j, k = 0;
for (i = 0; i < setSizeA; i++) {
resultSet[k++] = setA[i];
}
for (i = 0; i < setSizeB; i++) {
int isInSetA = 0;
for (j = 0; j < setSizeA; j++) {
if (setB[i] == setA[j]) {
isInSetA = 1;
break;
}
}
if (!isInSetA) {
resultSet[k++] = setB[i];
}
}
return k;
}
// 求集合的交
int set_intersection(int setA[], int setB[], int setSizeA, int setSizeB, int resultSet[]) {
int i, j, k = 0;
for (i = 0; i < setSizeA; i++) {
for (j = 0; j < setSizeB; j++) {
if (setA[i] == setB[j]) {
resultSet[k++] = setA[i];
break;
}
}
}
return k;
}
// 求集合的相对补
int set_difference(int setA[], int setB[], int setSizeA, int setSizeB, int resultSet[]) {
int i, j, k = 0;
for (i = 0; i < setSizeA; i++) {
int isInSetB = 0;
for (j = 0; j < setSizeB; j++) {
if (setA[i] == setB[j]) {
isInSetB = 1;
break;
}
}
if (!isInSetB) {
resultSet[k++] = setA[i];
}
}
return k;
}
// 求集合的对称差
int set_symmetric_difference(int setA[], int setB[], int setSizeA, int setSizeB, int resultSet[]) {
int i, j, k = 0;
for (i = 0; i < setSizeA; i++) {
int isInSetB = 0;
for (j = 0; j < setSizeB; j++) {
if (setA[i] == setB[j]) {
isInSetB = 1;
break;
}
}
if (!isInSetB) {
resultSet[k++] = setA[i];
}
}
for (i = 0; i < setSizeB; i++) {
int isInSetA = 0;
for (j = 0; j < setSizeA; j++) {
if (setB[i] == setA[j]) {
isInSetA = 1;
break;
}
}
if (!isInSetA) {
resultSet[k++] = setB[i];
}
}
return k;
}
int main() {
int setA[MAX_SIZE], setB[MAX_SIZE], resultSet[MAX_SIZE];
int setSizeA, setSizeB, resultSetSize;
int i;
// 输入集合A
printf("请输入集合A的元素个数:");
scanf("%d", &setSizeA);
printf("请输入集合A的元素:");
for (i = 0; i < setSizeA; i++) {
scanf("%d", &setA[i]);
}
// 输入集合B
printf("请输入集合B的元素个数:");
scanf("%d", &setSizeB);
printf("请输入集合B的元素:");
for (i = 0; i < setSizeB; i++) {
scanf("%d", &setB[i]);
}
// 求集合的并
resultSetSize = set_union(setA, setB, setSizeA, setSizeB, resultSet);
printf("集合A和集合B的并为:");
for (i = 0; i < resultSetSize; i++) {
printf("%d ", resultSet[i]);
}
printf("\n");
// 求集合的交
resultSetSize = set_intersection(setA, setB, setSizeA, setSizeB, resultSet);
printf("集合A和集合B的交为:");
for (i = 0; i < resultSetSize; i++) {
printf("%d ", resultSet[i]);
}
printf("\n");
// 求集合的相对补
resultSetSize = set_difference(setA, setB, setSizeA, setSizeB, resultSet);
printf("集合A相对于集合B的补为:");
for (i = 0; i < resultSetSize; i++) {
printf("%d ", resultSet[i]);
}
printf("\n");
// 求集合的对称差
resultSetSize = set_symmetric_difference(setA, setB, setSizeA, setSizeB, resultSet);
printf("集合A和集合B的对称差为:");
for (i = 0; i < resultSetSize; i++) {
printf("%d ", resultSet[i]);
}
printf("\n");
return 0;
}
```
注意,以上代码只是一个示例,实际使用时需要注意输入数据的合法性,避免数组越界等错误。
阅读全文