ImageVerifierCode 换一换
格式:DOC , 页数:25 ,大小:261.50KB ,
资源ID:853923      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-853923.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计课程设计报告.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计课程设计报告.doc

1、 面向对象程序设计课程设计报告第一章 需求分析1.1引言 当我们在学线性代数的时候,都需要学习矩阵的相关内容,在学习的时候,当然离不开矩阵的相关计算,例如求矩阵的加、减、乘、运算,判断两个矩阵是否相等,求矩阵的行列式以及矩阵的逆等等。要知道其结果,往往要花比较多的时间去计算,因此,设计一个能完成这些计算的程序是很有必要的。它可以帮助我们便捷、快速地完成计算,节约我们宝贵的时间。1.2任务概述 (A) 使用C+设计矩阵类及相应的测试主程序。该矩阵类可进行基本的统计计算,矩阵类的每一行为一向量,基本统计计算针对该向量进行。矩阵生成可如1方式实现,也可以从磁盘文件中读入。矩阵的行、列数有默认值,也可

2、通过类成员函数设置更改;如从磁盘文件读入,该磁盘文件名及其存储路径有默认值,也可通过类成员函数设置更改;矩阵类有加、减、乘、判断相等的运算成员函数;基本统计计算包括求均值、协方差;基本统计计算结果在该类对象退出作用域时可自动存入磁盘文件,该磁盘文件名及其存储路径有默认值,也可通过类成员函数设置更改。(B) 在按上述要求实现的C+类中添加可求协方差矩阵对应的行列式值和求矩阵(方阵)逆的类成员,更改测试主程序对此加以验证要求: (1)提交类声明头文件、类实现文件和测试程序文件3个源代码文件; (2)2014年6月27日前完成并提交。1.3数据描述 该程序包含一下信息: 1)、声明一个矩阵类 2)、

3、有矩阵的输入、输出功能 3)、有完成矩阵计算个功能函数1.4功能需求根据要求设计一个矩阵类及相应的测试主程序,该矩阵类可进行基本的统计计算,矩阵类有加、减、乘、判断相等的运算成员函数,可求协方差矩阵对应的行列式值和求矩阵(方阵)逆的类成员。1.5运行需求 应用VisualC+,VisualC+6.0不仅仅是一个C+编译器,而且是一个基于Windows操作系统的是集成开发环境,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种的Windows应用程序。 第二章 概要设计2.1 矩阵类(Matrix)设计 根据题目要求,设计矩阵类及相应的测试主程序:矩阵类可进行基本的统计计算 详细程序代码如

4、下:class Matrix public: Matrix(); /无参构造函数 friend void In(Matrix &); /设置为友元的输入函数 friend void Out(Matrix &); /设置为友元的输出函数 Matrix operator +(Matrix &); /加法重载函数 Matrix operator -(Matrix &); /减法重载函数 Matrix operator *(Matrix &); /乘法重载函数 friend Matrix Adjunct(Matrix &, int , int ); /设置成友元的求代数余子式 friend doubl

5、e Det(Matrix &); /设置成友元的递归求行列式 friend Matrix Inv(Matrix &); /设置成友元的求矩阵的逆 private: int m,n; /矩阵的行数和列数 Datatype *p; /矩阵的基址;2.2 输入、输出显示矩阵模块设计主要功能是检验从键盘输入矩阵的保存及输出显示该矩阵。再对系统进行加、减、乘等一系列操作。程序代码如下:void In(Matrix &a) /输入函数 couta.ma.n;int i,j;a.p=new Datatypea.m*a.n;Datatype *q;cout请按行优先输入矩阵endl;for(j=0;ja.m;

6、j+) for(q=a.p+j*a.n,i=0;i*q;void Out(Matrix &b) /输出函数 int i,j; Datatype *p=b.p; double *q; for(i=0;ib.m;i+) for(q=p+i*b.n,j=0;jb.n;j+,q+) cout*qt; if(j=b.n-1) coutendl; 测试输入、输出显示情况2.3两个矩阵加、减、乘运算模块设计程序代码如下:Matrix Matrix:operator+(Matrix &b) /加法重载函数 if(m!=b.m|n!=b.n) coutn行或列不匹配; exit(0); Matrix c; c.

7、m=m; c.n=n; c.p=new doublem*n; int i,j; for(i=0;im;i+) for(j=0;jn;j+) c.pi*c.n+j=pi*c.n+j+b.pi*c.n+j; Out(c); return c;Matrix Matrix:operator -(Matrix &b) /减法重载函数 if(m!=b.m|n!=b.n) coutn行或列不匹配; exit(0); Matrix c; c.m=m; c.n=n; c.p=new doublem*n; for(int i=0;im;i+) for(int j=0;jn;j+) c.pi*c.n+j=pi*c.

8、n+j-b.pi*c.n+j; Out(c); return c;Matrix Matrix:operator *(Matrix &b) /乘法重载函数 Matrix c; c.m=m; c.n=n; c.p=new doublem*n; if(m!=b.n) coutn行列不匹配; exit(0); int i,j,k; for(i=0;im;i+) for(j=0;jb.n;j+) for(c.pi*b.n+j=0,k=0;kb.n;k+) c.pi*b.n+j+=pi*b.n+k*b.pk*b.n+j; Out(c); return c;测试任意两个矩阵加、减、乘情况例如,输入以下两个矩

9、阵,矩阵a: 矩阵b:1 2 3 1 4 74 5 6 2 5 87 8 9 3 6 9其效果如下:2.4求矩阵对应的行列式值和求矩阵(方阵)逆设计模块程序代码如下:Matrix Adjunct(Matrix &a, int indexm, int indexn) /求第indexm行indexn列元素 的代数余子式 Matrix adj ; adj.m=a.m - 1; adj.n=a.n - 1; adj.p = new double(a.n-1) * (a.n-1); for (int i=0; iindexm; i+) for (int j=0; jindexn; j+) adj.pi

10、*(a.n-1) +j = a.pi*a.n+j; for (int k=indexn+1; ka.n;k+) adj.pi *(a.n-1)+k-1 = a.pi*a.n+k; for (int m=indexm+1; ma.n; m+) for (int j=0;ja.n-1;j+) adj.p(m-1)*(a.n-1)+j=a.pm*a.n+j; for (int k=indexn+1; ka.n;k+) adj.p(m-1)*(a.n-1)+k-1=a.pm*a.n+k; return adj;double Det(Matrix &a) /递归求行列式 double det = 0;

11、if (a.m != a.n) cout不是方阵,没有行列式!endl; cout求行列式退出endl; if (a.n = 1) det = a.p0; return det; else for (int i = 0; i a.n; i+) if (i % 2 = 0) det += a.pi * a.n * Det(Adjunct(a, i, 0); else det -= a.pi * a.n * Det(Adjunct(a, i, 0); return det;Matrix Inv(Matrix &a) /求矩阵的逆 Matrix temp ; temp.m=a.n; temp.n=a

12、.m; temp.p = new doublea.m * a.n; double det = Det(a); /矩阵的逆 = 伴随矩阵 / 行列式 if (det = 0) /如果行列式的值为0,则没有逆 cout此矩阵没有逆!endl; cout求矩阵逆退出!; exit(0); for (int i=0; itemp.m;i+) for (int j=0; jtemp.n;j+) if (i+j) % 2 = 0) temp.pi*temp.m+j=Det(Adjunct(a,i,j)/det; else temp.pi*temp.m+j=-Det(Adjunct(a,i,j)/det;

13、return temp; 求矩阵对应的行列式值和求矩阵(方阵)逆设计模块测试情况注意:本程序输出的逆矩阵是先输出列的,如上图所示。按照正常的显示是先输出行的。上图中的a矩阵的逆矩阵应看成: -2 1 1.5 -0.5附录:程序代码/Matrix.h文件,Matrix类的定义#includeusing namespace std;typedef double Datatype; class Matrixpublic: Matrix(); /无参构造函数 friend void In(Matrix &); /设置为友元的输入函数 friend void Out(Matrix &); /设置为友元的

14、输出函数 Matrix operator +(Matrix &); /加法重载函数Matrix operator -(Matrix &); /减法重载函数 Matrix operator *(Matrix &); /乘法重载函数 friend Matrix change(Matrix &); /转置函数 friend Matrix Adjunct(Matrix &, int , int );/设置成友元的求代数余子式 friend double Det(Matrix &); /设置成友元的递归求行列式 friend Matrix Inv(Matrix &); /设置成友元的求矩阵的逆 priv

15、ate: int m,n; /矩阵的行数和列数 Datatype *p; /矩阵的基址;/Matrix.cpp文件,Matrix类的实现#includeMatrix.h#includeusing namespace std;Matrix:Matrix() m=0; n=0;void In(Matrix &a) /输入函数couta.ma.n;int i,j;a.p=new Datatypea.m*a.n;Datatype *q;cout请按行优先输入矩阵endl;for(j=0;ja.m;j+) for(q=a.p+j*a.n,i=0;i*q;void Out(Matrix &b) /输出函数

16、 int i,j; Datatype *p=b.p; double *q; for(i=0;ib.m;i+) for(q=p+i*b.n,j=0;jb.n;j+,q+) cout*qt; if(j=b.n-1) coutendl; Matrix Matrix:operator+(Matrix &b) /加法重载函数 if(m!=b.m|n!=b.n) coutn行或列不匹配; exit(0); Matrix c; c.m=m; c.n=n; c.p=new doublem*n; int i,j; for(i=0;im;i+) for(j=0;jn;j+) c.pi*c.n+j=pi*c.n+j

17、+b.pi*c.n+j; Out(c); return c;Matrix Matrix:operator -(Matrix &b) /减法重载函数 if(m!=b.m|n!=b.n) coutn行或列不匹配; exit(0); Matrix c; c.m=m; c.n=n; c.p=new doublem*n; for(int i=0;im;i+) for(int j=0;jn;j+) c.pi*c.n+j=pi*c.n+j-b.pi*c.n+j; Out(c); return c;Matrix Matrix:operator *(Matrix &b) /乘法重载函数 Matrix c; c.

18、m=m; c.n=n; c.p=new doublem*n; if(m!=b.n) coutn行列不匹配; exit(0); int i,j,k; for(i=0;im;i+) for(j=0;jb.n;j+) for(c.pi*b.n+j=0,k=0;kb.n;k+) c.pi*b.n+j+=pi*b.n+k*b.pk*b.n+j; Out(c); return c;Matrix Adjunct(Matrix &a, int indexm, int indexn) /求第indexm行indexn列元素的代数余子式 Matrix adj ; adj.m=a.m - 1; adj.n=a.n

19、- 1; adj.p = new double(a.n-1) * (a.n-1); for (int i=0; iindexm; i+) for (int j=0; jindexn; j+) adj.pi*(a.n-1) +j = a.pi*a.n+j; for (int k=indexn+1; ka.n;k+) adj.pi *(a.n-1)+k-1 = a.pi*a.n+k; for (int m=indexm+1; ma.n; m+) for (int j=0;ja.n-1;j+) adj.p(m-1)*(a.n-1)+j=a.pm*a.n+j; for (int k=indexn+1;

20、 ka.n;k+) adj.p(m-1)*(a.n-1)+k-1=a.pm*a.n+k; return adj;double Det(Matrix &a) /递归求行列式 double det = 0; if (a.m != a.n) cout不是方阵,没有行列式!endl; cout求行列式退出endl; if (a.n = 1) det = a.p0; return det; else for (int i = 0; i a.n; i+) if (i % 2 = 0) det += a.pi * a.n * Det(Adjunct(a, i, 0); else det -= a.pi *

21、a.n * Det(Adjunct(a, i, 0); return det;Matrix Inv(Matrix &a) /求矩阵的逆 Matrix temp ; temp.m=a.n; temp.n=a.m; temp.p = new doublea.m * a.n; double det = Det(a); /矩阵的逆 = 伴随矩阵 / 行列式 if (det = 0) /如果行列式的值为0,则没有逆 cout此矩阵没有逆!endl; cout求矩阵逆退出!; exit(0); for (int i=0; itemp.m;i+) for (int j=0; jtemp.n;j+) if (

22、i+j) % 2 = 0) temp.pi*temp.m+j=Det(Adjunct(a,i,j)/det; else temp.pi*temp.m+j=-Det(Adjunct(a,i,j)/det; return temp; /main.cpp主函数测试部分#includeMatrix.h#includeusing namespace std;void main() Matrix a,b,c; cout对于a矩阵;In(a);couta=endl;Out(a); cout对于b矩阵;In(b);coutb=endl;Out(b); couta+b=endl;c=a+b;coutendl;

23、couta-b=endl;c=a-b;coutendl; couta*b=endl;c=a*b;coutendl; couta的行列式为:endl;coutDet(b)endl;coutb的行列式为:endl;coutDet(b)endl; couta矩阵的逆矩阵为:endl;c=Inv(a);Out(c);coutendl; cout注意,这里是先输出逆矩阵的列的:endl;coutb矩阵的逆矩阵为:endl;c=Inv(b);Out(c); coutendl;参考文献C+面向对象程序设计清华大学出版社注:判断相等的运算,基本统计计算求均值、协方差,没有做面向对象程序设计(课程设计)成绩评定表评分项目分值得分程序(系统)(60分)原创性15程序功能20代码质量(健壮性和可扩展性)15核心代码和功能模块注释10设计报告(40分)课题来源&任务描述10系统设计15代码编写与实现结果说明15成绩总计老师签字: 蒋正锋25

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922