C语言中如何将两个二维数组合并为一个二维数组中。希望高手可以帮我把这个程序写出来,谢谢。

最后需要将数组中的数据打印到屏幕。

怎么合并,是通过计算加减法还是排序插入 。下面是将a连接b形成c

#include <stdio.h>
#include <stdlib.h>

#define M 3
#define N 3

//创建矩阵
int ** Create(int m,int n)
{
int i;
int **x;

x=(int**)malloc(sizeof(int*) * m);
if(!x)
{
printf("分配内存出错\n");
exit(1);
}

for(i=0;i<m;i++)
{
x[i]=(int*)malloc(sizeof(int)*n);
if(!x[i])
{
printf("分配内存出错\n");
exit(1);
}
}

return x;
}

//打印矩阵
void Print(int **x,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",x[i][j]);
printf("\n");
}

}

//将b合并到a后面
void Fun(int **a,int **b,int **c)
{
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
c[i][j]=a[i][j];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
c[M+i][j]=b[i][j];
}

//释放矩阵
void Free(int **x,int m, int n)
{
int i;

for(i=0;i<m;i++)
free(x[i]);
free(x);

}

void main(void)
{
int **a,**b;
int **c;
int i,j;

a=Create(M,N);
b=Create(M,N);
c=Create(M+M,N);

printf("输入第一个矩阵%d行,%d列:\n",M,N);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);

printf("输入第二个矩阵%d行,%d列:\n",M,N);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&b[i][j]);

printf("\n");
printf("第一个矩阵:\n");
Print(a,M,N);

printf("第二个矩阵:\n");
Print(b,M,N);

Fun(a,b,c);
printf("合并后的矩阵:\n");
Print(c,M+M,N);

Free(a,M,N);
Free(b,M,N);
Free(c,M+M,N);
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-30
如果不考虑控件效率的话,直接定义一个两倍大的数组,并将两个数组的值赋进去就好了

下面是程序:

#include <stdio.h>
#include <string.h>
void main()
{
int Arr1[2][3] = {{0,1,2},{3,4,5}};
int Arr2[2][3] = {{6,7,8},{9,10,11}};
int Des[4][3];
memcpy(Des,Arr1,sizeof(Arr1));
char *p = (char *)Des;
memcpy(p+sizeof(Arr1),Arr2,sizeof(Arr2));
for(int i = 0;i < 4;i++)
for (int j = 0;j < 3;j++)
{
printf("%d",Des[i][j]);
}
}