C++课程设计矩阵运算.docx

上传人:b****7 文档编号:11467743 上传时间:2023-03-01 格式:DOCX 页数:12 大小:156.18KB
下载 相关 举报
C++课程设计矩阵运算.docx_第1页
第1页 / 共12页
C++课程设计矩阵运算.docx_第2页
第2页 / 共12页
C++课程设计矩阵运算.docx_第3页
第3页 / 共12页
C++课程设计矩阵运算.docx_第4页
第4页 / 共12页
C++课程设计矩阵运算.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C++课程设计矩阵运算.docx

《C++课程设计矩阵运算.docx》由会员分享,可在线阅读,更多相关《C++课程设计矩阵运算.docx(12页珍藏版)》请在冰豆网上搜索。

C++课程设计矩阵运算.docx

C++课程设计矩阵运算

矩阵运算系统的研究与设计

摘要

矩阵运算系统是一个数据运算系统,程序主要包括矩阵的基本数据成员,矩阵运算成员函数,以及矩阵系统界面等,实现矩阵的运算和文件读入和输出操作等。

本系统用C++语言开发,包含了矩阵的最基本数据成员,其中有矩阵的维数和矩阵的个元素。

类中实现了判断矩阵维数相等,是否可以相乘,是否为空矩阵等判断功能函数。

以及矩阵加法、减法、乘法、转置、求矩阵行列式、矩阵余子式等运算功能。

除了基本的矩阵运算功能以外,还包含了对于文件的读写,实现了更方便的读入和输出的功能。

本系统可以先用来实现对于矩阵的各种运算,可实现在控制台和文件中的读入与输出,且可以在用户指定的位置就行输入输出操作。

实现了系统更方便的使用。

另外使用了system应用,更改了控制台背景颜色,使得系统更加美观。

 

关键词:

矩阵运算,运算符重载,文件操作,修改控制台背景颜色。

 

1.题目内容及要求

1.1基本要求:

编写矩阵类--封装矩阵的运算(加、减、乘、转置、...);

每个运算用一个方法实现

1.2功能要求:

1.用C++面向对象的思想编写矩阵类。

2.编写矩阵类实现矩阵的运算。

1.2其他要求:

1.源程序应当加注释。

以便于阅读。

2.采用文本菜单界面。

3.可自行设计增加新模块。

4.写出课程设计报告。

 

2.设计思路

2.1文件的分配:

编写了三个文件,一个头文件,两个cpp文件。

头文件包含类的定义和声明以及所要用到的头文件

一个cpp文件编写类的具体实现

一个cpp文件实现主函数,即程序面板的功能

2.2任务分配:

小组共五人,任务分配如下:

1负责编写matrix类,以及主函数的实现。

即matrix.h文件和main.cpp文件的编写。

其他人负责matrix.cpp文件的编写。

即类的实现。

2负责编写matrix类输入和输出部分模块,包括屏幕输入输出和文件输入输出。

3负责编写matrix类的加法和减法功能,实现“+”号和“-”号的重载。

4负责编写matrix类的乘法和转置功能,实现“*”号的重载,和trans友元函数。

5负责编写matrix类的求行列式和余子式功能,实现det友元函数和类的left成员函数。

2.3类的实现:

根据设计要求,需要先设计一个最基本的矩阵结构,用来保存矩阵的维数,以及矩阵的每个值,将这些数据设计为矩阵类的私有成员数据,防止外部程序篡改矩阵的值,导致程序运行错误。

矩阵的维数用两个整形数据保存,命名为m和n,然后使用double类型的arr数组用来保存数组的每个值。

 

类的代码如下:

classmatrix

{

private:

intm;

intn;

doublearr[MAXN][MAXN];

public:

matrix();//构造函数

matrix(double);//构造函数2

voidscr_set();//通过键盘输入;

voidfil_set();//通过文件输入

voidscr_show();//在屏幕上输出矩阵;

friendvoidfil_show();//在文件中输出矩阵

intissquare();//判断是否为方阵;

friendinthomotype(matrix,matrix);//是否同型;

friendintmultipliable(matrix,matrix);//判断矩阵是否可相乘

matrixoperator+(matrixother);//矩阵相加,对加号重载;

matrixoperator-(matrixother);//矩阵机减,对减号重载;

matrixoperator*(matrixother);//矩阵相乘,对乘号重载;

friendmatrixtrans(matrix);//矩阵转置

frienddoubledet(matrix);//求方阵的行列式;

matrixleft(intx,inty);//求元素arr[x][y](x,y

从0开始)的余子式;

};

2.4矩阵运算功能实现:

矩阵需要实现各种运算,则应该分别设计矩阵类的成员函数实现矩阵的各种运算功能。

如加减乘和数的加减乘很有相似性,可使用运算符重载来实现。

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号。

运算符重载重载的主要目的是,简洁易懂,原理上其实也是通过函数实现的,像a+b用add(a,b)也行,但是看起来要就没那么直观了。

使用运算符重载,更方便于使用,也更符合人们的习惯。

转置、求行列式因为只有一个参数,可以使用编写类的友元函数来编写。

余子式要输入余子式的运算位置,使用成员函数来编写。

这样丰富的C++各种知识的运用。

2.5扩展功能实现:

有了矩阵最基本的运算,可以编写,输入输出功能的函数,实现其输入输出,分别编写了控制台输入输出和文件输入输出。

运用了提高了系统的可用性。

流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。

在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。

流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。

如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。

文件流的使用,可以令系统的使用更加灵活,可以产期保存输入和输出的数据,不至于系统关闭之后而造成数据丢失,可以说,没有哪个应用程序不使用文件操作,没有文件操作的程序是没有价值的。

2.6主函数编写:

程序的面板在main函数进行编写,利用输出提示信息引导用户操作,使得程序和用户之间实现交互。

主函数对编写好的类进行应用,实现系统的各种功能。

如果说类是工具,那么主函数就是产品。

主函数的流程图如下:

 

程序面板:

 

3.具体实现

3.1程序开头包含所需要使用到的头文件:

#defineMAXN100

#include

#include

#include

#include

#include

#include

3.2类的定义:

实现了类的定义,将类命名为matrix

classmatrix

{

private:

intm;

intn;

doublearr[MAXN][MAXN];

public:

matrix();//构造函数

matrix(double);//构造函数2

voidscr_set();//通过键盘输入;

voidfil_set();//通过文件输入

voidscr_show();//在屏幕上输出矩阵;

friendvoidfil_show();//在文件中输出矩阵

intissquare();//判断是否为方阵;

friendinthomotype(matrix,matrix);//是否同型;

friendintmultipliable(matrix,matrix);//判断矩阵是否可相乘

matrixoperator+(matrixother);//矩阵相加,对加号重载;

matrixoperator-(matrixother);//矩阵机减,对减号重载;

matrixoperator*(matrixother);//矩阵相乘,对乘号重载;

friendmatrixtrans(matrix);//矩阵转置

frienddoubledet(matrix);//求方阵的行列式;

matrixleft(intx,inty);//求元素arr[x][y](x,y

从0开始)的余子式;

};

3.3menu_use函数

通过使用cout函数输出开始菜单程序,具体程序运行如下

3.4menu_i()函数

用户输入运算方法之后,输出提示输入方式的菜单,也是使用简单的cout进行编写,运行界面如下:

3.5menu_0()函数

用户输入矩阵之后,输出提示输出方式的菜单,运行界面如下:

3.6main函数

首先使用system(“color03f”)更改控制台面板颜色,使得系统更加美观,然后进行菜单的输出,提示用户输入指令,并使用各类封装在矩阵中的功能函数进行运算,流程图上文内已经有。

 

4运行调试与分析讨论

首先运行系统,有菜单选择:

然后键入选择值,如1

则会跳出另外的输入界面:

之后输入1或2选择输入方式为屏幕或者文件

屏幕输入的面板为:

而文件输入的方式则会提示输入输入文件位置:

之后跳入文件输出菜单。

而屏幕输入选择之后会提示输入矩阵大小,之后输入大小以后要求输入矩阵:

输入回车,如果是要两个矩阵的运算还会提示输入矩阵,

如果是只有一个矩阵参与的运算则会输入输出模式菜单:

如果屏幕输出则会输出对应的算得的矩阵或者值,并跳回主菜单:

如果是文件输出则会要求输入文件位置:

此时将会输出结果到改文件,并跳出系统。

5.设计体会与小结

5.1遇到的问题:

1.开始编写程序的时候,没有进行文件的分离编写,程序过于的长,很难查看其结构和调试,之后将其分为三段之后,使得程序结构更加合理,更易于编写开发。

2.重载运算符时,发生莫名错误无法解决,所以改用成员函数编写,但是由于成员函数使用更不方便,于是重新编写运算符重载,使用友元函数来重载,可通过编译,但使用重载的运算符使,若主函数中有一个以上的运算符使用,则会出现堆栈溢出,只使用一次运算符不会出错,可顺利运行。

于是在老师指导下将友元改为成员函数并来重载,问题得以解决。

3.编写文件操作的时候,先使用fstream操作也是发生莫名其妙问题无法编译成功,于是改用freopen进行编写,得以编译成功,但是使用时会造成系统类似死循环的效果,菜单不断的显示闪烁,于是改用回fstream编写,并定义为成员函数,问题可以解决。

4.矩阵转置在使用过程中发现输出的数字比较大而且是使用科学计数法显示的,于是觉得是应为矩阵没有初始化的问题,使用函数初始化之后问题的到解决。

5.2自身所提高和学习到的能力:

1.通过编写这个矩阵类,我更加熟练的使用c++语言,更加深刻的理解到了面向对象的含义

2.巩固了运算符重载,学会了文件流的使用

3.学会了开发工程的最基本流程,学会使用了开发工具以及编译器

4.使自己查阅资料和解决问题的能力得到了提高

5.学会了团队配合精神

 

6.参考文献

[1]谭浩强. C++程序设计. 北京:

清华大学出版社,2004

[2]

[3]

[4]C++Primer中文版(第4版)人民邮电出版社,2006

[5]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1