c语言完成下列任务:编写函数计算两个整数集合的交集和并集。 例如:A={1,2,3},B={2,3,4},则交集为C= {2,3}、并 集为D={1,2,3,4},集合可用数组存储。
时间: 2024-10-27 12:15:39 浏览: 36
在C语言中,我们可以创建两个函数,一个用于计算两个整数集合的交集,另一个用于计算并集。这里我们假设集合A和B都是已排序的整数数组。我们将使用标准库提供的`<stdbool.h>`和`<stdlib.h>`头文件。
首先,我们需要一个通用的函数来检查一个元素是否存在于给定数组中:
```c
#include <stdbool.h>
bool contains(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target)
return true;
}
return false;
}
```
接下来,我们可以分别编写交集和并集的函数:
```c
#include <stdio.h>
#include <stdlib.h>
void intersection(int* setA, int* setB, int sizeA, int sizeB, int result[]) {
int index = 0;
for (int i = 0; i < sizeA && index < sizeB; i++) {
if (contains(setB, sizeB, setA[i])) {
result[index++] = setA[i];
}
}
result[index] = '\0'; // 结束符,表示数组结束
}
void unionSet(int* setA, int* setB, int sizeA, int sizeB, int result[]) {
int countA = 0, countB = 0;
while (countA < sizeA && countB < sizeB) {
if (setA[countA] < setB[countB]) {
result[countA++] = setA[countA];
} else if (setA[countA] > setB[countB]) {
result[countB++] = setB[countB];
} else {
result[countA++] = setA[countA]; // 如果相等,只添加一次
countB++;
}
}
while (countA < sizeA) {
result[countA++] = setA[countA];
}
while (countB < sizeB) {
result[countA++] = setB[countB];
}
result[countA] = '\0';
}
// 主程序测试
int main() {
int A[] = {1, 2, 3};
int B[] = {2, 3, 4};
int lenA = sizeof(A) / sizeof(A[0]);
int lenB = sizeof(B) / sizeof(B[0]);
int intersect[50], unionResult[50];
intersection(A, B, lenA, lenB, intersect);
unionSet(A, B, lenA, lenB, unionResult);
printf("Intersection: ");
for (int i = 0; i < lenA && intersect[i] != '\0'; i++) {
printf("%d ", intersect[i]);
}
printf("\nUnion: ");
for (int i = 0; i < lenA + lenB && unionResult[i] != '\0'; i++) {
printf("%d ", unionResult[i]);
}
return 0;
}
```
在这个示例中,`intersection()`函数计算交集,`unionSet()`函数计算并集。注意,这个代码没有处理两个输入数组大小不同的情况,如果需要处理这种情况,可以在相应的函数内部增加适当的判断条件。
阅读全文