标题:改写矩阵类的C++程序
取消只看楼主
heven紫色
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-7-2
结帖率:0
已结贴  问题点数:20 回复次数:0 
改写矩阵类的C++程序
怎样把这个程序改成有构造函数,而且能构建任意行,列的矩阵
#include<iostream>
#include<cmath>
using namespace std;
class Matrix
{
public:
    void jiafa();
    void jianfa();
    void chengfa();
    void zhuanzhi();
    void ni();
private:
    int i;
    int j;
    float a[100][100],b[100][100],c[100][100];
};
void Matrix::jiafa()
{
    int m,n;
    cout<<"请输入矩阵的行数:"<<endl
        <<"矩阵的列数:"<<endl;
    cin>>m>>n;
    cout<<"请输入第一个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
    cout<<"请输入第二个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>b[i][j];
    cout<<"矩阵做加法的结果是:"<<endl;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            c[i][j]=a[i][j]+b[i][j];
            cout<<c[i][j]<<"   ";
        }
        cout<<endl;
    }
}
void Matrix::jianfa()
{
    int m,n;
    cout<<"请输入矩阵的行数:"<<endl
        <<"矩阵的列数:"<<endl;
    cin>>m>>n;
    cout<<"请输入第一个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
    cout<<"请输入第二个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>b[i][j];
    cout<<"矩阵做减法的结果是:"<<endl;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            c[i][j]=a[i][j]-b[i][j];
            cout<<c[i][j]<<"   ";
        }
        cout<<endl;
    }
}
void Matrix::chengfa()
{
    int m,n,k;
    float s;
    cout<<"请输入矩阵的行数:"<<endl
        <<"矩阵的列数:"<<endl;
    cin>>m>>n;
    cout<<"请输入第一个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
    cout<<"请输入第二个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>b[i][j];
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            s=0;
            for(k=0;k<n;k++)
            {
                s=s+a[i][j]*b[i][j];
                c[i][j]=s;
            }
        }
    }
    cout<<"矩阵做乘法的结果是:"<<endl;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            cout<<c[i][j]<<"   ";
        }
        cout<<endl;
    }
}
void Matrix::zhuanzhi()
{
    int m,n;
    cout<<"请输入矩阵的行数:"<<endl
        <<"矩阵的列数:"<<endl;
    cin>>m>>n;
    cout<<"请输入第一个矩阵:"<<endl;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
    cout<<"矩阵做转置的结果是:"<<endl;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            b[i][j]=a[j][i];
            cout<<b[i][j]<<"   ";
        }
        cout<<endl;
    }
}
void Matrix::ni()
{
    int N;
    cout<<"输入矩阵的阶数N: "<<endl;
    cin>>N;
    float t;
    int m;
    cout<<"请输入行列式不为0的矩阵A:"<<endl; //矩阵A的各元素存入二维数组a中。
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            cin>>a[i][j];
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            b[i][j]=a[i][j];   //增广矩阵(A|E)存入二维数组b中
    for(i=0;i<N;i++)
        for(j=N;j<2*N;j++)
            b[i][j]=0;
    for(i=0;i<N;i++)
        b[i][N+i]=1;
    for(m=0;m<N;m++)          //对每行进行处理。
    {
        t=b[m][m];                  //预存b[m][m]。
        i=m;
        while(b[m][m]==0)
        {   
            b[m][m]=b[i+1][m];
            i++;
        }
        if(i>m)
        {
            b[i][m]=t;                  //实现交换。
            //交换其它各列相应位置的元素
            for(j=0;j<m;j++)              
            {
                t=b[m][j];
                b[m][j]=b[i][j];
                b[i][j]=t;
            }
            for(j=m+1;j<2*N;j++)              
            {
                t=b[m][j];
                b[m][j]=b[i][j];
                b[i][j]=t;
            }

        }
        for(i=m+1;i<N;i++)
            for(j=2*N-1;j>=m;j--)
                b[i][j]-=b[i][m]*b[m][j]/b[m][m]; //m=0时,将第一行的-b[i][0]/b[0][0]倍加到以下各行。这样以下每行第一个元素b[i][0]就为0。
            for(j=2*N-1;j>=m;j--)
                b[m][j]/=b[m][m];   //对第m行作行变换,同除以b[m][m],使b[m][m]为1。
    }
    m=N-1;
    while(m>0)
    {
        for(i=0;i<m;i++)
            for(j=2*N-1;j>=m;j--)           //千万注意,此处j必须递减,否则b[i][m]先变为0,后面的计算就无效!
                b[i][j]-=b[i][m]*b[m][j];
            m--;
    }
    for(i=0;i<N;i++)                         //将逆矩阵存入二维数组c中。
        for(j=0;j<N;j++)
            c[i][j]=b[i][N+j];
    cout<<"逆矩阵为:"<<endl;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            cout<<c[i][j]<<"   ";
        cout<<endl;    //实现了:每个i对应一个换行。
    }
}
int main()
{
    int w;
    cout<<"   1.矩阵加法   "<<endl
        <<"   2.矩阵减法   "<<endl
        <<"   3.矩阵乘法   "<<endl
        <<"   4.矩阵转置   "<<endl
        <<"   5.矩阵求逆   "<<endl
        <<"   6.退出程序   "<<endl
        <<"   请输入选择   "<<endl;
    cin>>w;
    Matrix p;
    switch(w)
    {
        case 1:p.jiafa();break;
        case 2:p.jianfa();break;
        case 3:p.chengfa();break;
        case 4:p.zhuanzhi();break;
        case 5:p.ni();break;
        case 6:cout<<"退出程序!"<<endl;break;
        default:
            cout<<"输入错误!请从新输入:"<<endl;
    }
    return 0;
}
求大神解答啊!
搜索更多相关主题的帖子: private include public Matrix 
2015-07-02 11:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-454976-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.598263 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved