【问题描述】请写一函数,将一个m*n的整型矩阵转置。注意:请将转置后的数据存储到二维数组中以后,再对二维数组进行输出。要求使用如下的三个函数进行三次转置:
void Transpose1(int a[][N], int at[][M], int m, int n);
void Transpose2(int (*a)[N], int (*at)[M], int m, int n); //行指针
void Transpose3(int *a, int *at, int m, int n); //列指针
【输入形式】矩阵长度和宽度及矩阵元素值
【输出形式】调用三个函数转置后的矩阵
【样例输入】
3 4
1 2 3 4
4 5 6 7
7 8 9 0
【样例输出】
1 4 7
2 5 8
3 6 9
4 7 0
1 4 7
2 5 8
3 6 9
4 7 0
1 4 7
2 5 8
3 6 9
4 7 0
#include<iostream>
using namespace std;
void Transpose1(int a[][100],int at[][100],int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{at[j][i]=a[i][j];}
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
{cout<<at[i][j]<<" ";
}cout<<endl;}
cout<<endl<<endl;
}
void Transpose2(int (*a)[100],int (*at)[100],int m,int n)//行指针
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{at[j][i]=a[i][j];}
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
{cout<<at[i][j]<<" ";
}cout<<endl;}
cout<<endl<<endl;
}
void Transpose3(int *a,int *at,int m,int n)//列指针
{
for(int i=0;i<m;i++)//m为行
{for(int j=0;j<n;j++)//n为列
{*(at+j*m+i)=*(a+i*100+j);}
}
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
{cout<<*(at+i*100+j)<<" ";
}cout<<endl;}
}
int main()
{
int m,n,a[100][100],at[100][100];
cin>>m;//行
cin>>n;//列
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{ cin>>a[i][j];
}
Transpose1(a,at,m,n);
Transpose2(a,at,m,n);
Transpose3(*a,*at,m,n);
return 0;
}