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