C++矩阵简单的计算器

  • 格式:doc
  • 大小:117.00 KB
  • 文档页数:15

C++课程设计 ---矩阵简单的计算器 一、设计目的 1、 熟练掌握和运用c++编写程序代码的能力。 2、 初步了解输入、建立并输出矩阵以及矩阵加法、减法、乘法、赋值和转置的算法设计。 3、 掌握基本的运算符重载函数的书写。 4、掌握静态数据成员和静态成员函数的具体声明和实现,体会它们的特殊作用。 5、掌握并体会动态内存分配的实际应用。 6、运用简单的循环实现简单的菜单程序。 二、总体设计 (1)UML图

(2)流程图 Matrix - num:int* - length:int - width:int - flag:int=0

+ Matrix(int l:int, w:int, n:int*) + Matrix() + Matrix(jz :Matrix &) + setnum(l :int, w :int) :void + operator+(const jz: Matrix &): Matrix + operator-(const jz:Matrix &):Matrix + operator*(const jz :Matrix &): Matrix + zhuanzhi():Matrix + show():void + ~Matrix() <> +getflag():int void getmn(int &m,int &n) 三、详细设计 (1)类中的函数功能及实现 1、 有参数的构造函数Matrix(int l,int w,int *n); 实现: Matrix::Matrix(int l,int w,int *n) { length=l; width=w; num=new int[length*width]; int *p=num; for(int i=0;i {

真 真 真 真 真 真 假 假 假 假 假

A +运算 flag 输出 break M flag -运算 输出 break S flag *运算 输出 break F flag =运算 输出 break T flag 转置 输出

break

开始 定义

switch Q?

退出 *p++=*n++; } } 说明:为有参数的对象变量初始化。 2、 无参构造函数(默认形式的构造函数)Matrix() 实现: Matrix::Matrix() { length=1; width=1; num=new int(1); } 说明:为无参数的对象进行初始化。 3、 矩阵的拷贝构造函数Matrix::Matrix(Matrix &jz) 实现: Matrix::Matrix(Matrix &jz) { length=jz.length; width=jz.width; num=new int[length*width]; for(int i=0;i { *(num+i)=*(jz.num+i); } } 目的:用已存在的对象jz去初始化新建立的对象。 4、 矩阵输入函数void Matrix::setnum(int l,int w) 实现: void Matrix::setnum(int l,int w) { length=l; width=w; if(l==0||w==0) { cout<<"矩阵行列不能为0"< return ; } else { delete[]num; num=NULL; num=new int[length*width]; //开辟length*width大小的空间 int *p=num; cout< for(int i=0;i { cout<<"请输入第"< for(int j=0;j { cout<<"第"< cin>>*(p+i*width+j); } } } } 说明: 矩阵输入函数主要读进去需要进行计算的原始矩阵,要注意的是矩阵的行列数不能为1,所以应该用选择语句排除一行一列的矩阵出现。首先用动态内存分配,给要录入的矩阵开辟需要录入的空间length*width。然后运用循环语句,将矩阵的每个元素录入。 5、 加运算符重载函数Matrix Matrix::operator +(const Matrix &jz) 实现: Matrix Matrix::operator +(const Matrix &jz) { if(length==jz.length && width==jz.width) { flag=1; int *n=new int[length*width]; for(int i=0;i { *(n+i)=*(num+i)+*(jz.num+i); } Matrix temp(length,width,n); if(length*width>1) { delete[]n; } else { delete n; } return temp; } else { Matrix temp; flag=0; return temp; } } 说明: 加法运算符重载为类的成员函数,可以通过类的每个对象访问重载的运算符。 加法矩阵运算,要求两个矩阵的行列数分别相等。 6、 减法运算符重载函数Matrix Matrix::operator -(const Matrix &jz) 实现: Matrix Matrix::operator -(const Matrix &jz) { if(length==jz.length && width==jz.width) { flag=1; int *n=new int[length*width]; for(int i=0;i { *(n+i)=*(num+i)-*(jz.num+i); } Matrix temp(length,width,n); if(length*width==1) { delete n; } else { delete []n; } return temp; } else { flag=0; Matrix temp; return temp; } } 说明: 减法运算符重载为类的成员函数,可以通过类的每个对象访问重载的运算符。 减法矩阵运算,也要求两个矩阵的行列数分别相等。 7、 乘法运算符重载函数Matrix Matrix::operator*(const Matrix &jz) 实现: Matrix Matrix::operator*(const Matrix &jz) { if(width==jz.length) { flag=1; int *n=new int[length*jz.width]; int i=0; int j=0; int t=0; for(i=0;i { for(j=0;j { *(n+i*jz.width+j)=0; } } for(i=0;i { for(j=0;j { for(t=0;t {

*(n+i*jz.width+t)+=*(num+i*width+j)**(jz.num+j*jz.width+t); } } } Matrix temp(length,jz.width,n); if(length*jz.width==1) { delete n; } else { delete [] n; } return temp; } else { flag=0; Matrix temp; return temp; } } 说明: 矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数。 8、赋值运算符重载函数Matrix Matrix::operator=(const Matrix &jz )