C矩阵简单的计算器.docx

上传人:b****6 文档编号:4367540 上传时间:2022-12-01 格式:DOCX 页数:18 大小:95.01KB
下载 相关 举报
C矩阵简单的计算器.docx_第1页
第1页 / 共18页
C矩阵简单的计算器.docx_第2页
第2页 / 共18页
C矩阵简单的计算器.docx_第3页
第3页 / 共18页
C矩阵简单的计算器.docx_第4页
第4页 / 共18页
C矩阵简单的计算器.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C矩阵简单的计算器.docx

《C矩阵简单的计算器.docx》由会员分享,可在线阅读,更多相关《C矩阵简单的计算器.docx(18页珍藏版)》请在冰豆网上搜索。

C矩阵简单的计算器.docx

C矩阵简单的计算器

C++课程设计

---矩阵简单的计算器

一、设计目的

1、熟练掌握和运用c++编写程序代码的能力。

2、初步了解输入、建立并输出矩阵以及矩阵加法、减法、乘法、赋值和转置的算法设计。

3、掌握基本的运算符重载函数的书写。

4、掌握静态数据成员和静态成员函数的具体声明和实现,体会它们的特殊作用。

5、掌握并体会动态内存分配的实际应用。

6、运用简单的循环实现简单的菜单程序。

二、总体设计

(1)UML图

Matrix

+Matrix(intl:

int,w:

int,n:

int*)

+Matrix()

+Matrix(jz:

Matrix&)

+setnum(l:

int,w:

int):

void

+operator+(constjz:

Matrix&):

Matrix

+operator-(constjz:

Matrix&):

Matrix

+operator*(constjz:

Matrix&):

Matrix

+zhuanzhi():

Matrix

+show():

void

+~Matrix()

<>+getflag():

int

voidgetmn(int&m,int&n)

-num:

int*

-length:

int

-width:

int

-flag:

int=0

 

(2)流程图

 

 

 

三、详细设计

(1)类中的函数功能及实现

1、有参数的构造函数Matrix(intl,intw,int*n);

实现:

Matrix:

:

Matrix(intl,intw,int*n)

{

length=l;

width=w;

num=newint[length*width];

int*p=num;

for(inti=0;i

{

*p++=*n++;

}

}

说明:

为有参数的对象变量初始化。

2、无参构造函数(默认形式的构造函数)Matrix()

实现:

Matrix:

:

Matrix()

{

length=1;

width=1;

num=newint

(1);

}

说明:

为无参数的对象进行初始化。

3、矩阵的拷贝构造函数Matrix:

:

Matrix(Matrix&jz)

实现:

Matrix:

:

Matrix(Matrix&jz)

{

length=jz.length;

width=jz.width;

num=newint[length*width];

for(inti=0;i

{

*(num+i)=*(jz.num+i);

}

}

目的:

用已存在的对象jz去初始化新建立的对象。

4、矩阵输入函数voidMatrix:

:

setnum(intl,intw)

实现:

voidMatrix:

:

setnum(intl,intw)

{

length=l;

width=w;

if(l==0||w==0)

{

cout<<"矩阵行列不能为0"<

return;

}

else

{

delete[]num;

num=NULL;

num=newint[length*width];//开辟length*width大小的空间

int*p=num;

cout<

"<

for(inti=0;i

{

cout<<"请输入第"<

"<

for(intj=0;j

{

cout<<"第"<

";

cin>>*(p+i*width+j);

}

}

}

}

说明:

矩阵输入函数主要读进去需要进行计算的原始矩阵,要注意的是矩阵的行列数不能为1,所以应该用选择语句排除一行一列的矩阵出现。

首先用动态内存分配,给要录入的矩阵开辟需要录入的空间length*width。

然后运用循环语句,将矩阵的每个元素录入。

5、加运算符重载函数MatrixMatrix:

:

operator+(constMatrix&jz)

实现:

MatrixMatrix:

:

operator+(constMatrix&jz)

{

if(length==jz.length&&width==jz.width)

{

flag=1;

int*n=newint[length*width];

for(inti=0;i

{

*(n+i)=*(num+i)+*(jz.num+i);

}

Matrixtemp(length,width,n);

if(length*width>1)

{

delete[]n;

}

else

{

deleten;

}

returntemp;

}

else

{

Matrixtemp;

flag=0;

returntemp;

}

}

说明:

加法运算符重载为类的成员函数,可以通过类的每个对象访问重载的运算符。

加法矩阵运算,要求两个矩阵的行列数分别相等。

6、减法运算符重载函数MatrixMatrix:

:

operator-(constMatrix&jz)

实现:

MatrixMatrix:

:

operator-(constMatrix&jz)

{

if(length==jz.length&&width==jz.width)

{

flag=1;

int*n=newint[length*width];

for(inti=0;i

{

*(n+i)=*(num+i)-*(jz.num+i);

}

Matrixtemp(length,width,n);

if(length*width==1)

{

deleten;

}

else

{

delete[]n;

}

returntemp;

}

else

{

flag=0;

Matrixtemp;

returntemp;

}

}

说明:

减法运算符重载为类的成员函数,可以通过类的每个对象访问重载的运算符。

减法矩阵运算,也要求两个矩阵的行列数分别相等。

7、乘法运算符重载函数MatrixMatrix:

:

operator*(constMatrix&jz)

实现:

MatrixMatrix:

:

operator*(constMatrix&jz)

{

if(width==jz.length)

{

flag=1;

int*n=newint[length*jz.width];

inti=0;

intj=0;

intt=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);

}

}

}

Matrixtemp(length,jz.width,n);

if(length*jz.width==1)

{

deleten;

}

else

{

delete[]n;

}

returntemp;

}

else

{

flag=0;

Matrixtemp;

returntemp;

}

}

说明:

矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数。

8、赋值运算符重载函数MatrixMatrix:

:

operator=(constMatrix&jz)

实现:

MatrixMatrix:

:

operator=(constMatrix&jz)

{

if(width*length==1)

{

deletenum;

}

else

{

delete[]num;

}

flag=1;

length=jz.length;

width=jz.width;

num=newint[jz.length*jz.width];

for(inti=0;i

{

for(intj=0;j

{

*(num+i*width+j)=*(jz.num+i*jz.width+j);

}

}

return*this;

}

说明:

实际上为矩阵的简单拷贝。

8、转置函数MatrixMatrix:

:

zhuanzhi()

实现

MatrixMatrix:

:

zhuanzhi()

{

flag=1;

int*n=newint[length*width];

for(inti=0;i

{

for(intj=0;j

{

*(n+j*length+i)=*(num+i*width+j);

}

}

Matrixtemp(width,length,n);

if(length*width==1)

{

deleten;

}

else

{

delete[]n;

}

returntemp;

}

说明:

实现矩阵的转置。

9、显示结果函数voidMatrix:

:

show()

实现

voidMatrix:

:

show()

{

if(length*width!

=0)

{

for(inti=0;i

{

cout.width(5);

cout<<*(num+i);

if((i+1)%width==0)

{

cout<

}

}

}

}

说明:

显示矩阵的各元素和格式。

10、析构函数析构函数Matrix:

:

~Matrix()

实现:

Matrix:

:

~Matrix()

{

if(length*width==1)

{

deletenum;

}

else

{

delete[]num;

}

说明:

通过析构函数删除所分配的内存。

11、提示输入矩阵行列数的函数voidgetmn(int&m,int&n)

实现:

voidgetmn(int&m,int&n)

{

while

(1)

{

cout<<"请输入矩阵维数:

"<

cout<<"行数:

";

cin>>m;

cout<<"列数:

";

cin>>n;

if(m>0&&n>0)

{

return;

}

}

}

说明:

用来提示用户输入矩阵的各元素。

(2)主函数中的书写

1、主函数中首先用矩阵类Matrix定义要计算的矩阵对象,j1与j2的运算结果是j3。

2、运用switch语句实现一个选择菜单,按照菜单提示来选择相应要进行的运算功能。

3、在选择一个要进行的运算后,用getmn()函数获取输入提示;再书写要进行的功能运算式,当静态函数getflag()==1时,说明可以进行运算;然后执行if条件句,分别输出要进行运算矩阵j1和j2运算结果j3;当执行完switch语句一个选择分支功能后就break跳出该条件句。

4、用while语句进行整个switch语句实现的菜单一个选择循环,当输入要运算功能的选择字符时,while语句执行。

输入Q时退出矩阵计算器。

四、调试与测试

1、本程序中函数模块相对独立,可以进行单个运算符重载函数的书写极其测试,将每种重载运算符函数写好,并且测试成功后再进行合并到一个类中,这样感觉会很清晰的写完这个相对比较大的程序。

2、给要计算的矩阵开辟空间,最后一定要用析构函数进行空间的释放,要不程序再运行几次后可能会因为内存不足而不能运行。

五、源程序清单

详见矩阵简单的计算器.cpp(请单击)

六、程序结果

以下通过截图显示清晰的矩阵简单的计算器功能。

 

1、矩阵加法运算:

2、矩阵减法运算:

3、矩阵乘法运算:

4、矩阵赋值运算:

5、矩阵转置运算:

 

6、退出矩阵:

七、感想

感谢老师让我们有机会亲自运用C++知识实践这个简单的程序,成功之后的喜悦让我们觉得有信心把这门课学的更好!

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

当前位置:首页 > 高中教育 > 初中教育

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

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