编程实现:从键盘输入包含m个整数的集合存入数组a中、包含n个整数的集合存入数组b中,求a和b的并集c。要求:用指针操作数组。
时间: 2024-02-27 16:52:58 浏览: 15
下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m, n, i, j, k;
int *a, *b, *c;
// 输入数组a和b的元素个数
printf("请输入集合a的元素个数m:");
scanf("%d", &m);
printf("请输入集合b的元素个数n:");
scanf("%d", &n);
// 动态分配数组a、b和c的内存空间
a = (int*)malloc(m * sizeof(int));
b = (int*)malloc(n * sizeof(int));
c = (int*)malloc((m+n) * sizeof(int));
// 输入数组a和b的元素值
printf("请输入集合a的元素值:\n");
for (i = 0; i < m; i++)
scanf("%d", &a[i]);
printf("请输入集合b的元素值:\n");
for (i = 0; i < n; i++)
scanf("%d", &b[i]);
// 求并集c
i = 0; j = 0; k = 0;
while (i < m && j < n) {
if (a[i] < b[j]) {
c[k++] = a[i++];
} else if (a[i] > b[j]) {
c[k++] = b[j++];
} else { // a[i] == b[j]
c[k++] = a[i++];
j++;
}
}
while (i < m)
c[k++] = a[i++];
while (j < n)
c[k++] = b[j++];
// 输出并集c的元素值
printf("集合a和集合b的并集为:\n");
for (i = 0; i < k; i++)
printf("%d ", c[i]);
printf("\n");
// 释放动态分配的内存空间
free(a);
free(b);
free(c);
return 0;
}
```
这个程序中,我们使用了指针操作数组,比如:
```c
a = (int*)malloc(m * sizeof(int));
```
这里使用了 `malloc` 函数动态分配了数组 `a` 的内存空间,然后使用指针 `a` 来访问数组元素。
```c
while (i < m && j < n) {
if (a[i] < b[j]) {
c[k++] = a[i++];
} else if (a[i] > b[j]) {
c[k++] = b[j++];
} else { // a[i] == b[j]
c[k++] = a[i++];
j++;
}
}
```
这里使用了指针 `a`、`b` 和 `c` 来访问数组元素,并且使用了指针 `i`、`j` 和 `k` 来遍历数组。