欢迎来到天天文库
浏览记录
ID:9376214
大小:69.50 KB
页数:6页
时间:2018-04-29
《c++课程设计---两个矩阵的加减法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、C++课程设计1.功能描述通过运算符重载的方式定义了矩阵的加法、乘法、以及数乘,使得矩阵的符号运算更加的方便、简捷。2.设计目的熟练掌握程序设计语言的基础知识,进一步的理解面向对象编程的分析设计方法以及运算符重载,为以后进行更加复杂的编程打下坚实的基础。二.系统总体设计1.设计框架出现错误,中断扫描输入矩阵判断矩阵是否有错求值显示出错情况,等待用户修改输出结果,并做记录,等待下次输入由于矩阵的乘法要求前面的一个矩阵列数等于后面一个矩阵的行数,因此构造的矩阵可能会出现错误,使得无法进行运算。三.详细的设计1.类的设计首先在.h头文件中构造一个matrix的类,将矩阵行数、列
2、数以及一个指针设为私有,公有部分则声明相关的函数,采用运算符重载的方式重新定义了矩阵的加法、乘法以及数乘。同时声明构造函数,拷贝构造函数和析构函数。2.算法设计与分析由于两个矩阵的加减法是对应位置矩阵元素的相加减,因此只要通过指针将对应元素的相加减即可。矩阵的数乘的运算法则是将该实数与矩阵中的每一个元素相乘后所得的矩阵。所以通过指针和一个循环使得矩阵中的每一个元素与实数相乘即可。矩阵的乘法的运算法则就显得较特殊。新矩阵中的某个元素(矩阵的第行,第列)是通过前面的一个矩阵的第行每一个元素与后面一个相乘矩阵的对应第列中的每一个元素相乘再相加后所得的结果。3.安全环境的分析由于
3、这里是动态的构造了一个矩阵,对于内存的分配也是动态的,因此很容易造成内存的泄漏。在构造matrix类的时候,采用new的方式动态的分配了内存,同时关键的是在类中同时声明了一个拷贝构造函数,使得在定义矩阵的加减乘的运算时将临时矩阵的值拷贝构造,使运算的值不至于因为临时矩阵的消失而造成结果的不存在而引发内存的泄漏。同时在析构函数里记得写delete,使用完内存后安全的释放。四.源代码展示#include"stdafx.h"#include#includeusingnamespacestd;classMatrix{public:Matrix
4、(intm,intn,double*value=NULL){rows=m;cols=n;p=newdouble[m*n];if(value){for(inti=0;i5、.p[i*cols+j];}}}friendMatrixoperator+(Matrix&c1,Matrix&c2);friendMatrixoperator*(Matrix&c1,Matrix&c2);friendMatrixoperator*(Matrix&c1,doublea);friendostream&operator<<(ostream&output,Matrix&c2);private:introws;intcols;double*p;};Matrixoperator+(Matrix&c1,Matrix&c2){MatrixK(c1.rows,c2.cols6、);for(inti=0;i7、.p[k*c2.cols+j];}K.p[i*K.cols+j]=s;}}returnK;}Matrixoperator*(Matrix&c1,doublea){MatrixK(c1.rows,c1.cols);for(inti=0;i
5、.p[i*cols+j];}}}friendMatrixoperator+(Matrix&c1,Matrix&c2);friendMatrixoperator*(Matrix&c1,Matrix&c2);friendMatrixoperator*(Matrix&c1,doublea);friendostream&operator<<(ostream&output,Matrix&c2);private:introws;intcols;double*p;};Matrixoperator+(Matrix&c1,Matrix&c2){MatrixK(c1.rows,c2.cols
6、);for(inti=0;i7、.p[k*c2.cols+j];}K.p[i*K.cols+j]=s;}}returnK;}Matrixoperator*(Matrix&c1,doublea){MatrixK(c1.rows,c1.cols);for(inti=0;i
7、.p[k*c2.cols+j];}K.p[i*K.cols+j]=s;}}returnK;}Matrixoperator*(Matrix&c1,doublea){MatrixK(c1.rows,c1.cols);for(inti=0;i
此文档下载收益归作者所有