矩阵乘法

矩阵可乘条件:(前列数=后行数)

#include <iostream>
using namespace std;
//构造矩阵类,重载乘法操作符  
//Matrix矩阵类  
class Matrix
{
public:
    Matrix(int mm, int nn)//构造函数  
    {
        m = mm;
        n = nn;
        int i, j;
        data = new double*[mm];
        for (i = 0; i<mm; i++)
            data[i] = new double[nn];
        for (i = 0; i<m; i++)//矩阵所有元素清零  
            for (j = 0; j<n; j++)
                data[i][j] = 0.0;
    } //构造M行N列的矩阵  

    Matrix(const Matrix &src) //拷贝构造函数  
    {
        m = src.m;
        n = src.n;
        int i, j;
        data = new double*[m];//动态建立二维数组  
        for (i = 0; i<m; i++)
            data[i] = new double[n];
        for (i = 0; i<m; i++)//动态数组赋值  
            for (j = 0; j<n; j++)
                data[i][j] = src.data[i][j];
    }

    ~Matrix()//析构函数  
    {
        for (int i = 0; i<m; i++)
            delete[]data[i];
        delete[]data;
    }
    Matrix& operator=(const Matrix &src);//重载"="运算符  
    Matrix operator * (const Matrix &m2); //矩阵乘法  
    void display();
    void input();
private:
    double **data;
    int m, n;//矩阵的行数,列数  
};//类定义结束  

Matrix& Matrix::operator=(const Matrix &src) //重载"="运算符  
{
    int i, j;
    for (i = 0; i<m; i++)
        delete[]data[i];
    delete[]data;
    m = src.m; n = src.n;
    data = new double*[m];//动态建立二维数组  
    for (i = 0; i<m; i++)
        data[i] = new double[n];
    for (i = 0; i<m; i++)
        for (j = 0; j<n; j++)
            data[i][j] = src.data[i][j];
    return *this;
}

//矩阵*运算符重载  
Matrix Matrix::operator *(const Matrix &m2)//矩阵乘法的实现  
{
    Matrix m3(this->m, m2.n);
    if (this->n != m2.m)
    {
        cout << "两矩阵无法进行乘法运算.\n" << endl;
        cin.get();
        cin.get();
        exit(0);
    }
    int i, j, k, l;
    for (i = 0; i<this->m; i++)
        for (j = 0; j<m2.n; j++)
        {
            for (k = 0; k<this->n; k++)
            {
                m3.data[i][j] += this->data[i][k] * m2.data[k][j];
            }

        }
    return m3;
}

//输入矩阵元素  
void Matrix::input()
{
    for (int i = 0; i<m; i++)
        for (int j = 0; j<n; j++)
            cin >> data[i][j];
}

//显示矩阵元素  
void Matrix::display()
{
    int i, j;
    for (i = 0; i<m; i++)
    {
        for (j = 0; j<n; j++)
        {
            cout << data[i][j] << " ";
        }
        cout << endl;
    }
}

//主函数  
int main(int argc, char* argv[])
{
    int x, y;
    cout << "矩阵1行数:";
    cin >> x;
    cout << "矩阵1列数:";
    cin >> y;
    Matrix A(x, y);
    cout << "请输入矩阵1元素(按行,共" << x*y << " 个)" << endl;
    A.input();
    cout << "矩阵1:" << endl;
    A.display();
    cout << "矩阵2行数:";
    cin >> x;
    cout << "矩阵2列数:";
    cin >> y;
    Matrix B(x, y);
    cout << "请输入矩阵2元素(按行,共" << x*y << " 个)" << endl;
    B.input();
    cout << "矩阵2:" << endl;
    B.display();
    Matrix C = A*B;
    cout << "矩阵1 与 矩阵2 的乘积:" << endl;
    C.display();
    cin.get();
    cin.get();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值