C++课程设计实验报告
姓名 汤铃铃 学号 0701510421 班级 07015100 任课教师 时间 08.10.11
评定难易级别 B教师指定题目 4-1 矩阵旋转反射 实验报告成绩
1. 实验内容:
1.1 程序功能介绍
实现矩阵的旋转反射程序。
1.2 程序设计要求
(1) 设计一个矩阵类,将相应的函数和数据封装在类中,简化程序。
(2) 修改程序结构,使程序可以反复执行,直至按键选择退出为止。
(3) 本程序用数组表示5*5矩阵,将其改为根据输入矩阵的大小动态分配空间[n][n]来放置数据,其中
n 为用户可输入的任意整数。
(4) 增加类的构造函数和成员函数,使得矩阵数据既可以用在对象初始化是赋值,也可以通过键盘赋
值,还可以通过读数据文件输入。
(5) 用模板的形式改写矩阵数据类型,使得矩阵中的数据既可以是整型数据,也可以是浮点型数据,
执行程序是,分别定义一个整型矩阵和一个浮点型矩阵进行验证。
(6) 增加程序功能,除实现n*n矩阵的旋转反射外,还增加
a )
b )
c )
求矩阵的模; 可以通过键入的行号与列号,任意修改矩阵中的元素值 可以给定矩阵中的某一元素值,查询其所在的行号与列号,并修改其值。
2. 源程序结构流程框图与说明(
)
3. 基本数据结构
矩阵旋转反射在定义类CMatrix 的时候用到模板的形式,类中的数据类型用模板定义,在定义对象时在用具体的数据类型代替模板类型。
类的结构如下所示:
template
class CMatrix
{
int nNum; T**Mat; 使用到二级指针 T**MatR; T**MatRefl; T**Matr; T**Matre; public: CMatrix(); CMatrix(int n); ~CMatrix(); void Show(int k=1); void R90(); void R180(); void R270(); //输出矩阵 //旋转90度 //旋转180度 //旋转270度 //X轴反射 //Y轴反射 void ReflectX(int k=1); void ReflectY(int k=1); void ReflectO(int k=1); //对角线反射 int LookForData(); //查找 int ModifyData(); //修改 int ModefyData(int row,int column); //修改 double Range(); //求模 void InputFromFile(char *filename); //从文件中输入矩阵 void InputFromKeyboard(); //从键盘中输入矩阵
};
在矩阵旋转反射中,由于给定的矩阵大小未知,所以类中的矩阵用指针变量代替,定义类的对象时根据nNum 的大小再动态分配空间。
template
CMatrix::CMatrix()
{
int i,j,k=0;
T n=1.0;
cout
cin>>nNum;
Mat=new T*[nNum]; 分配矩阵每一行的空间
MatR=new T*[nNum]; MatRefl=new T*[nNum]; for(i=0;i
for(j=0;j
{
Mat[i][j]=n;
n+=1.0;
} }
4. 程序运行结果界面
图1. 初始界面
图2. 矩阵旋转界面
图3. 矩阵反射界面
图4. 矩阵其他操作界面
5. 课程设计遇到的技术问题与解决思路
问题1:原程序十分简单,要设计一个类,将相应的函数和数据封装在类中,简化程序。
解决办法:这个矩阵类使用的是模板的形式,类中的数据类型是用模板定义,在定义对象是再用具体的数据类型代替模板类型。
问题1:如何求行列式的模?
解决办法:行列式的模是用高斯消去法计算的,起算法为消去行列式对角线上方或下方的数据,这样对角线数据的乘积即为行列式的模。