从标准输入中输入两组整数(每组不超过20个整数,每组整数中元素不重复),合并两组整数,重复的整数只出现一次,并按从小到大顺序排序输出(即两组整数集的“并集”)。用C语言编程
时间: 2024-10-16 20:18:56 浏览: 34
在C语言中,你可以使用`scanf`函数读取用户输入的整数,然后用数组存储这两个集合。接着,通过遍历两个数组,将重复的整数添加到第三个数组中,并用`qsort`函数对结果数组进行排序。最后,再遍历一次排序后的数组,输出每个元素一次,即可得到合并且去重且排序的结果。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 比较函数,用于排序
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
void mergeAndSort(int arr1[], int n1, int arr2[], int n2, int result[]) {
// 合并并排序
for (int i = 0; i < n1; i++) {
for (int j = 0; j < n2; j++) {
if (arr1[i] != arr2[j]) {
result[i + j] = arr1[i];
i++;
break;
}
}
}
// 如果arr2还有剩余未添加,直接复制
while (j < n2) {
result[i++] = arr2[j++];
}
qsort(result, i, sizeof(int), compare);
}
int main() {
int n1, n2, i, j;
printf("Enter the number of elements in the first set: ");
scanf("%d", &n1);
int* arr1 = malloc(n1 * sizeof(int));
for (i = 0; i < n1; i++) {
scanf("%d", &arr1[i]);
}
printf("Enter the number of elements in the second set: ");
scanf("%d", &n2);
int* arr2 = malloc(n2 * sizeof(int));
for (j = 0; j < n2; j++) {
scanf("%d", &arr2[j]);
}
int* result = malloc((n1 + n2) * sizeof(int));
mergeAndSort(arr1, n1, arr2, n2, result);
printf("Sorted and merged set: ");
for (i = 0; i < n1 + n2; i++) {
printf("%d ", result[i]);
}
free(arr1);
free(arr2);
free(result);
return 0;
}
```
阅读全文