📄 矩阵计算.cpp
字号:
// 矩阵计算.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class Matrix
{
public:
int x,y; //x,y分别表示矩阵的列数与行数
double** element; //我们用二维数组来代表矩阵
Matrix(int a=1,int b=1);
~Matrix();
Matrix& operator=(Matrix&); //成员函数,重载运算符"=",进行变量赋值
Matrix& operator+(Matrix&); //成员函数,重载运算符"+",进行两矩阵加法
Matrix& operator-(Matrix&); //成员函数,重载运算符"-",进行两矩阵减法
Matrix& operator*(Matrix&); //成员函数,重载运算符"*",进行两矩阵乘法
void PrintOut(); //成员函数,用于输出矩阵
};
Matrix::Matrix(int a,int b) //构造函数
{
x=a;y=b; //长宽定义
element=new double*[y]; //首先分配一维(宽)
for(int i=0;i<y;i++)
element[i]=new double[x]; //分配二维(长)
}
Matrix::~Matrix() //析构函数
{
for(int i=0;i<y;i++) //析构第二维
delete[] element[i];
delete[] element; //析构第一维
}
Matrix& Matrix::operator =(Matrix& oth) //重载等号
{
if(x==oth.x && y==oth.y) //首先判断矩阵构造是否相同
for(int i=0;i<y;i++)
for(int j=0;j<x;j++)
element[i][j]=oth.element[i][j]; //相同则分别赋值
else
printf("Matrix do not match!\n"); //不同则输出错误信息
return *this;
}
Matrix& Matrix::operator +(Matrix& oth) //重载加号
{
if(x==oth.x && y==oth.y) //首先判断矩阵构造是否相同
{
Matrix *res=new Matrix(x,y); //生成一个新矩阵,用来计算矩阵和。
for(int i=0;i<y;i++)
for(int j=0;j<x;j++)
res->element[i][j]=element[i][j]+oth.element[i][j]; //进行加法运算
return *res;
}
else
{
printf("Matrix do not match!\n"); //如果构造不同,则输出错误信息
return *this;
}
}
Matrix& Matrix::operator -(Matrix& oth) //重载减号,方法与加号类似
{
if(x==oth.x && y==oth.y) //首先判断矩阵构造是否相同
{
Matrix *res=new Matrix(x,y); //生成一个新矩阵,用来计算矩阵差。
for(int i=0;i<y;i++)
for(int j=0;j<x;j++)
res->element[i][j]=element[i][j]-oth.element[i][j]; //进行减法运算
return *res;
}
else
{
printf("Matrix do not match!\n"); //如果构造不同,则输出错误信息
return *this;
}
}
Matrix& Matrix::operator*(Matrix& oth) //重载乘号
{
if(x==oth.y) //首先进行条件的判断
{
Matrix *res=new Matrix(oth.x,y); //若允许,产生新矩阵,用来计算矩阵积
for(int i=0;i<y;i++)
for(int j=0;j<oth.x;j++)
{
res->element[i][j]=0; //计算乘积
for(int k=0;k<x;k++)
res->element[i][j]+=element[i][k]*oth.element[k][j];
}
return *res;
}
else //如果不允许,则输出错误信息
{
printf("Matrix do not match!\n");
return *this;
}
}
void Matrix::PrintOut() //输出矩阵
{
for(int i=0;i<y;i++)
{
for(int j=0;j<x;j++)
printf("%.3f\x09",element[i][j]); //按顺序输出各元素
printf("\n");
}
printf("\n");
}
void main()
{
Matrix A(3,2),B(3,3),C(3,2); //声明矩阵变量,并给出对应的构造。
//给出各矩阵元素值
A.element[0][0]=1;
A.element[0][1]=2;
A.element[0][2]=3;
A.element[1][0]=4;
A.element[1][1]=5;
A.element[1][2]=6;
B.element[0][0]=-1;
B.element[0][1]=1;
B.element[0][2]=5;
B.element[1][0]=-3;
B.element[1][1]=2;
B.element[1][2]=0;
B.element[2][0]=2;
B.element[2][1]=0;
B.element[2][2]=4;
C.element[0][0]=0;
C.element[0][1]=3;
C.element[0][2]=2;
C.element[1][0]=2;
C.element[1][1]=3;
C.element[1][2]=0;
//输出矩阵
printf("A\n");
A.PrintOut();
printf("B\n");
B.PrintOut();
printf("C\n");
C.PrintOut();
//进行加法、减法,乘法运算,并输出结果
A=A+C;
printf("A:=A+C\n");
A.PrintOut();
C=A-C;
printf("C:=A-C\n");
C.PrintOut();
A=C*B;
printf("A:=C*B\n");
A.PrintOut();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -