C++编程问题,高手请进。 编写程序,实现给定的二维数组(M*N)的转置(行列互换)。。。

RT,编写程序,实现给定的二维数组(M*N)的转置(行列互换)。。。
不要限定了N M的大小,N M的数值是我们输入的

//当行列不相等时,不在在自身上进行转置的,只能将行列互换的结果存入另一数组。
#include<stdio.h>
#define M 4
#define N 5
void main()
{
int a[M][N]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
int b[N][M];
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
b[j][i]=a[i][j];
printf("reverse before:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%2d ",a[i][j]);
printf("\n");
}
printf("reverse after:\n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%2d ",b[i][j]);
printf("\n");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-20
希望可以帮助你哈~~~~
#include<stdio.h>
#include<stdlib.h>
#define M 5
#define N 3
int main()
{
int i = 0;
int j = 0;
int array[M][N];

//数组的初始化
for(i = 0; i < M; ++i)
{
for(j = 0; j < N; ++j)
{
array[i][j] = i + j;//初始化工作
}
}
printf("转置前:\n");
for(i = 0; i < M; ++i)
{
for(j = 0; j < N; ++j)
{
printf("%-4d ", array[i][j]);
}
printf("\n");
}
printf("\n");

//数组的转置
for(i = 0; i < M; ++i)
{
for(j = 0; j < N; ++j)
{
array[j][i] = array[i][j];

}

}

printf("转置后:\n");
for(i = 0; i < N; ++i)
{
for(j = 0; j < M; ++j)
{
printf("%-4d ", array[i][j]);
}
printf("\n");
}
printf("\n");

return 0;
}
第2个回答  2011-05-20
#include <stdio.h>
#include <stdlib.h>

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

printf("input n,m:");
scanf("%d,%d", &n, &m);
a = (int **)malloc(sizeof(int*)*n);

for (i = 0; i < m; ++i)
{
a[i] = (int*)malloc(sizeof(int)*m);
}
b = (int**)malloc(sizeof(int *)*m);
for (i = 0; i < m; ++i)
b[i] = (int*)malloc(sizeof(int)*n);
for (i = 0; i < n; ++i)
for (j = 0; j < m; ++j)
{
printf("Input a[%d][%d]:", i, j);
scanf("%d", &a[i][j]);
b[j][i] = a[i][j];
}
for (i = 0; i < m; ++i)
{
for (j = 0; j < n; ++j)
printf("%d ", b[i][j]);
printf("\n");
}
free(a);
free(b);

return 0;
}追问

看下去很接近了,但是运行有点问题?就是输出的结果好像有错误

第3个回答  2011-05-20
作业不做了,我给你写,等一下哈!!!
分数留给我。追问

呵呵,等你。。。不过要快点哦。。。

追答

//可以了,刚刚写完的。呵呵~~
//矩阵大小:行列1000以内随便你输。
#include
using namespace std;
#define N 1000
#define M 1000
int mix[N][M];
void Swap( int & a, int & b)
{
int temp = b;
b = a;
a = temp;
}
void Swap_mix( int mix[][M] , int & r, int & c )
{
int i,j,k;
for( i = 1; i >r>>c )
{
cout>mix[i][j];
}
}
cout<<"转置前 原始矩阵 :"<<endl;
Pnt( mix , r , c );
Swap_mix( mix , r , c );
cout<<"转置后 转置矩阵:"<<endl;
Pnt( mix , r , c );
cout<<"\n\t\t输入行数和列数,空格分开: ";
}
return 0;
}
//测试:
/*
输入行数和列数,空格分开: 2 4
输入相应的原始矩阵:
1 2 3 4
5 6 7 8
转置前 原始矩阵 :
------------------------------------
1 2 3 4
5 6 7 8
------------------------------------
转置后 转置矩阵:
------------------------------------
1 5
2 6
3 7
4 8
------------------------------------

输入行数和列数,空格分开:
*/

追问

漂亮,分就你的了。。。

本回答被提问者采纳