使用C语言编写一个程序,该程序能够从键盘接收两个集合的输入,并计算它们的交集、并集、差集(相对补集)jige,集合可以包含负数
时间: 2024-12-12 20:32:30 浏览: 23
在C语言中,我们可以使用数组和标准库函数来处理集合的基本操作。这里是一个简单的例子,它会从用户输入读取两个整数数组作为集合,然后分别计算交集、并集和差集(即第二个集合去掉第一个集合的所有元素):
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
void read_set(int set[], int size) {
for (int i = 0; i < size; i++) {
scanf("%d", &set[i]);
}
}
// 计算交集
void intersection(int set1[MAX_SIZE], int set2[MAX_SIZE]) {
int intersection[MAX_SIZE] = {0};
int *p1 = set1, *p2 = set2;
while (*p1 != -1 && *p2 != -1) {
if (*p1 == *p2) {
intersection[*(intersection + p1)] = *p1;
++p1;
++p2;
} else if (*p1 < *p2) {
++p1;
} else {
++p2;
}
}
printf("Intersection: ");
for (int i = 0; intersection[i] != -1; i++) {
printf("%d ", intersection[i]);
}
printf("\n");
}
// 计算并集
void union_set(int set1[MAX_SIZE], int set2[MAX_SIZE]) {
printf("Union: ");
for (int i = 0; set1[i] != -1; i++) {
printf("%d ", set1[i]);
}
for (int i = 0; set2[i] != -1; i++) {
if (set2[i] != -1 && !binary_search(set1, set1 + MAX_SIZE, set2[i])) {
printf("%d ", set2[i]);
}
}
printf("\n");
}
// 判断元素是否存在于已排序数组中
int binary_search(const int *arr, const int *end, int target) {
int low = 0, high = end - arr;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target)
return 1;
else if (arr[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return 0;
}
// 计算差集
void difference(int set1[MAX_SIZE], int set2[MAX_SIZE]) {
printf("Difference (relative complement): ");
for (int i = 0; set1[i] != -1; i++) {
if (!binary_search(set2, set2 + MAX_SIZE, set1[i])) {
printf("%d ", set1[i]);
}
}
printf("\n");
}
int main() {
int set1[MAX_SIZE], set2[MAX_SIZE];
int size1, size2;
printf("Enter elements of Set 1 separated by spaces (-1 to stop): ");
read_set(set1, &size1);
printf("Enter elements of Set 2 separated by spaces (-1 to stop): ");
read_set(set2, &size2);
intersection(set1, set2);
union_set(set1, set2);
difference(set1, set2);
return 0;
}
```
这个程序首先定义了读取集合元素的函数`read_set()`,以及计算交集、并集和差集的函数`intersection()`、`union_set()` 和 `difference()`。`binary_search()`用于查找目标值在已排序数组中的位置。
运行程序后,按照提示输入两个集合,程序将显示各自的交集、并集和差集结果。请注意,为了简单起见,我们假设用户输入的集合大小不超过`MAX_SIZE`,并且我们使用 `-1` 表示结束输入。
阅读全文