#include<iostream>
using namespace std;
int main()
{
void reverse(int n,int m,int *t1,int *t2);
int n,m;
cout<<"请输入矩阵的行数和列数:"<<endl;
cin>>n>>m;
int a[n][m],b[m][n],*t1=a,*t2=b,i,j;
cout<<"请输入矩阵";
for(i=0;i<n;i++)
{for(j=0;i<m;j++)
cin>>a[i][j];}
reverse(n,m,t1,t2);
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
return 0;
}
void reverse(int n,int m,int *t1,int *t2)
{
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
t2[i*m+j]=t1[j*m+i];}
}
有10多处错误。。。而且都是定义a[][] b[][]时的错误,请问要怎么样修改?
/* 看你的程序,解决思路是c语言的方式,我试了下你的程序,我用gcc编译,显示第9行出错,估计是编译时没法确定m,n的大小,没法创建数组吧,
既然用c++了,建议把矩阵定义成一个类,输入输出采用重载操作符的办法.
就矩阵转置问题,我写了一个c++的,可供参考.*/
#include<iostream>
#include<vector>
using namespace std;
class matrix
{
private:
int nrow,ncol;
vector<int> data;
public:
friend istream& operator>>(istream& ,matrix&);
friend ostream& operator<<(ostream& ,matrix&);
matrix reverse(){
matrix rm;
rm.nrow=ncol;
rm.ncol=nrow;
for(int i=0;i<ncol;i++)
for(int j=0;j<nrow;j++)
rm.data.push_back(data[j*ncol+i]);
return rm;
}
matrix(){
nrow=0;
ncol=0;
data.clear();
}
void resize(int m,int n){
nrow=m;
ncol=n;
}
};
istream& operator>>(istream& is,matrix& m){
int tem;
m.data.clear();
for(int i=0;i<m.nrow;i++)
for(int j=0;j<m.ncol;j++){
is>>tem;
m.data.push_back(tem);
}
return is;
}
ostream& operator<<(ostream& os,matrix& m){
for(int i=0;i<m.nrow;i++){
for(int j=0;j<m.ncol;j++)
cout<<m.data[i*m.ncol+j]<<"\t";
cout<<"\n";
}
return os;
}
int main()
{
matrix m1,m2;
int m,n;
cout<<"请输入矩阵的行数和列数:\n";
cin>>m>>n;
m1.resize(m,n);
cout<<"请输入矩阵:\n";
cin>>m1;
m2=m1.reverse();
cout<<"转置前的矩阵:\n";
cout<<m1;
cout<<"转置后的矩阵:\n";
cout<<m2;
}