编写C++使矩阵转置

#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;
}


温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网