C++ 语 言 程 序 设 计
实
验
报
告
实 验 三
一 实验项目
1. 编写矩阵类 Matrix_4x4,实现矩阵初始化、求逆、转置、访问等基本功能
2. 基于运算符重载,实现矩阵的加减乘、输入输出的操作
3. 具体内容如下:
➢ 矩阵为 4*4,数据类型为 double
➢ 默认构造函数,初始化矩阵为单位阵
➢ 拷贝构造函数
➢ 带参数构造函数,可以用一个 4x4 的二维数组初始化
➢ 重载 加(+),减(-),乘(*),幂次(^) ,输入,输出等操作
➢ 重载 = 操作,可以实现矩阵间赋值
➢ 重载 = 操作,实现二维数组向矩阵赋值
➢ 重载[ ], 实现矩阵元素访问, 例如矩阵类的对象 m 可以实现 m[1][2]=2;
➢ 实现求逆功能,转置功能
二 实验原理
1、 说明矩阵求逆的原理与操作方法(给出算法的流程图与简要说明,可参考附
件 PPT 内容)
该行主对角线
上元素为0?
开始
生成一个四阶单位阵ans
寻找后几行中该列元素不
为0的行与该行进行交换
ans对应两行进行交换
是
否
消元使主对角线下
方元素都为0
ans对应行进行相
同操作
下一行
否
四行操作完?
从第一行开始
从第一行开始
四行操作完?
否
每行除以该行主对
角线元素使主对角
线上元素为1
ans对应行进行相
同操作
下一行
从第四行开始
是
四行操作完?
消元使主对角线上
方元素都为0
ans对应行进行相
同操作
否
上一行
返回操作后的ans
是
是
2、 矩阵类程序实现与结果(给出算法的源代码,说明关键代码的操作含义,给
出运行结果)
代码如下:
#include <iostream>
using namespace std;
class Matrix_4x4
{
public:
const double* operator[] (const int i) const //重载 [ ] 运算符,实现双下标方式访问矩阵元素
{
return matrix[i];
}
double* operator[] (const int i)
{
return matrix[i];
}
Matrix_4x4() //默认构造函数,初始化矩阵为单位阵
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (i == j)
matrix[i][j] = 1;
else
matrix[i][j] = 0;
}
Matrix_4x4(double m[4][4]) //带参数构造函数,用一个4x4的二维数组初始化
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
matrix[i][j] = m[i][j];
}
Matrix_4x4(const Matrix_4x4& m) //拷贝构造函数
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
matrix[i][j] = m[i][j];
}
const Matrix_4x4& operator=(const Matrix_4x4& m) //重载 = 运算符,参数为矩阵对象
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
matrix[i][j] = m[i][j];