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

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

#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;
}

执行结果:

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答