C语言:6.合并数组。 ⑴ 编写函数 int com(int *a,int *b,int *c)

C语言:6.合并数组。
⑴ 编写函数 int com(int *a,int *b,int *c),实现将a和b两个已按升序排列的数组(所有数组元素的值非0)合并成一个升序数组c,合并后的数组中不包含两个数组中相同的数,并将两个数组中相同数的个数作为com函数的返回值。
⑵ 编写main函数,声明三个整型数组,并对其中的两个数组用给出的测试数据初始化(各数组长度利用宏定义规定);调用函数com实现数组的合并,且不包含两个数组中相同的数,合并后存入第三个数组中;将合并后的数组及两个数组中相同的数的个数输出。
【测试数据】
数组a:3 6 7 18 23 33 35 43 48 78
数组b:2 7 13 21 33 37 48 50 58 67
【运行结果】
2 3 6 13 18 21 23 35 37 43 50 58 67 78
count=3

第1个回答  2015-05-05
#include "stdio.h"
#include "algorithm.h"
#define M 10
#define N 10

int com(int *a, int *b, int *c)
{
int i, j;
int count = 0;
for (i = 0; i < M; i++)
c[i] = a[i];
for (j = 0; j < N; j++)
c[i++] = b[j];

sort(c, c + (M + N));

for (i = 0; i < M + N - 1; i++)
{
if (c[i] == c[i + 1])
{
count++;
for (j = i; j < M + N - 1; j++)
c[j] = c[j + 2];
}
}
return count;
}

int main(void)
{
int a[M] = { 3, 6, 7, 18, 23, 33, 35, 43, 48, 78 };
int b[N] = { 2, 7, 13, 21, 33, 37, 48, 50, 58, 67 };
int c[M + N] = { 0 };
int count = 0, i;
count = com(a, b, c);
for (i = 0; i < M + N - 2 * count; i++)
printf("%d ", c[i]);
printf("\ncount=%d ", count);
return 0;
}追答

把#include "algorithm.h"改为#include "algorithm"再加上using namespace std;

本回答被提问者和网友采纳
相似回答