矩阵乘法

来源:互联网 发布:手机淘宝商城首页登录 编辑:程序博客网 时间:2024/06/06 04:30

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

#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
原创粉丝点击