用C++中面向对象的程序设计方法实现矩阵的常用算法

要求: 能实现矩阵的加法,减法,矩阵与数的乘法,矩阵与矩阵的乘法及矩阵的转置。最好有设计思路,类设计,关键代码,测试结果,运用原理和方法,格式如下: 设计思路: 类设计: 关键代码: 测试结果: 运用原理和方法: 求解答,急,在此谢谢了~!请发到我邮箱844939216@qq.com

第1个回答  2020-07-03

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141#include <iostream>using namespace std; class Matrix{private:    int row;    int col;    int **p;public:    //矩阵的行列    Matrix(int *pm, int r, int c){        row = r;        col = c;        //创建二维数组        p = new int*[row];        for (int i = 0; i != row; ++i){            p[i] = new int[col];        }        //矩阵元素赋值        if (pm != NULL)            for (int i = 0; i != row; i++){                for (int j = 0; j != col; ++j){                    p[i][j] = pm[i*col + j];                }            }     }    //矩阵加法,结果存放在调用该函数的矩阵    void add_mm(Matrix &M){        for (int i = 0; i < row; ++i){            for (int j = 0; j < col; ++j){                this->p[i][j] += M.p[i][j];            }        }    }    //矩阵减法,结果存放在调用该函数的矩阵    void sub_mm(Matrix &M){        for (int i = 0; i < row; ++i){            for (int j = 0; j < col; ++j){                this->p[i][j] -= M.p[i][j];            }        }    }    //数与矩阵的乘法,结果存放在调用该函数的矩阵    void multi_num(int num){        for (int i = 0; i < row; ++i){            for (int j = 0; j < col; ++j){                p[i][j] *= num;            }        }    }    //矩阵与矩阵的乘法,结果存放在新产生的矩阵中    Matrix multi_mm(Matrix &M){        if (col != M.row)//若不满足矩阵相乘的条件,返回一个0行0列的矩阵。            return Matrix(NULL, 0, 0);         Matrix newM(NULL, row, M.col);        //初始化新矩阵        for (size_t i = 0; i != newM.row; ++i){            for (size_t j = 0; j != newM.col; ++j){                newM.p[i][j] = 0;            }        }        for (int i = 0; i != row; ++i){            for (int j = 0; j != M.col; ++j){                for (int k = 0; k != col; ++k){                    newM.p[i][j] += this->p[i][k] * M.p[k][j];                }            }        }         return newM;    }    //矩阵的转置,返回一个新的转置矩阵    Matrix transpose(){        Matrix newM(NULL, col, row);         for (int i = 0; i < row; ++i){            for (int j = 0; j < col; ++j){                newM.p[j][i] = p[i][j];            }        }        return newM;    }    void myDisplay(){        for (int i = 0; i != row; ++i){            for (int j = 0; j != col; ++j){                cout << p[i][j] << " ";            }            cout << endl;        }    } }; int main(){    int arr1[][3] = {        { 1, 1, 1 },        { 2, 2, 2 }    };    int arr2[][3] = {        { 10, 10, 10 },        { 20, 20, 20 }    };    cout << "矩阵1:" << endl;    Matrix m1(&arr1[0][0], 2, 3);    m1.myDisplay();    cout << "矩阵2:" << endl;    Matrix m2(&arr2[0][0], 2, 3);    m2.myDisplay();         cout << "矩阵1加矩阵2:" << endl;    m1.add_mm(m2);    m1.myDisplay();    cout << "矩阵1减矩阵2:" << endl;    m1.sub_mm(m2);    m1.myDisplay();    int num = 100;    cout << "矩阵1与数" << num << "的乘法:" << endl;    m1.multi_num(num);    m1.myDisplay();     int arr3[][2] = {        {10, 10},        {20, 20},        {30, 30}    };    Matrix m3(&arr3[0][0], 3, 2);    cout << "矩阵3:" << endl;    m3.myDisplay();    cout << "矩阵1与矩阵3的乘法:" << endl;    m1.multi_mm(m3).myDisplay();    cout << "xxxxx" << endl;//     cout << "矩阵1的转置:" << endl;    m1.transpose().myDisplay();      system("pause");//按任意键继续    return 0;}
执行结果:

相似回答
大家正在搜