稀疏矩阵程序设计报告Word文件下载.docx

上传人:b****5 文档编号:16142243 上传时间:2022-11-20 格式:DOCX 页数:17 大小:133.01KB
下载 相关 举报
稀疏矩阵程序设计报告Word文件下载.docx_第1页
第1页 / 共17页
稀疏矩阵程序设计报告Word文件下载.docx_第2页
第2页 / 共17页
稀疏矩阵程序设计报告Word文件下载.docx_第3页
第3页 / 共17页
稀疏矩阵程序设计报告Word文件下载.docx_第4页
第4页 / 共17页
稀疏矩阵程序设计报告Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

稀疏矩阵程序设计报告Word文件下载.docx

《稀疏矩阵程序设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《稀疏矩阵程序设计报告Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

稀疏矩阵程序设计报告Word文件下载.docx

80

一.类设计

1.定义了一个三元组Triple类,用三元组形式输入稀疏矩阵的数据信息。

2.定义了一个稀疏矩阵SMatrix类。

二.小组成员分工

负责乘法功能以及输出打印功能的编写。

负责创建矩阵功能、加减法功能以及主函数的编写,并整合整个程序。

最后共同完成课程设计报告。

三.验证(主)程序设计

voidmain()

{

SMatrixA,B,C;

intflag;

while(true)

{

system("

cls"

);

printf("

\n\n\n"

\t************稀疏矩阵的加、减、乘法运算************\n"

\t\n"

\t1、稀疏矩阵的加法\n"

\t2、稀疏矩阵的减法\n"

\t3、稀疏矩阵的乘法\n"

\t4、退出该应用程序\n"

输入要进行的操作的编号(1-4):

"

cin>

>

flag;

if(flag==4)break;

A.Creat();

矩阵A:

\n"

A.Print_SMatrix();

switch(flag)

{

case1:

B.Creat();

printf("

矩阵B:

B.Print_SMatrix();

if(A.getHs()==B.getLs()&

&

A.getLs()==B.getLs())

{

printf("

A+B:

C=A+B;

cout<

<

C;

}

elseprintf("

错误!

AB矩阵行列不一致\n"

break;

case2:

if(A.getHs()==B.getLs()&

A.getLs()==B.getLs())

A-B:

C=A-B;

case3:

A*B:

C=A*B;

cout<

default:

输入错误!

}

A.Destory_SSMatrix();

B.Destory_SSMatrix();

C.Destory_SSMatrix();

getchar();

}

printf("

\n\t\t\t***程序已退出***\n"

getchar();

}

四.类源程序代码

#include"

stdafx.h"

#include<

iostream>

#include<

malloc.h>

stdlib.h>

usingnamespacestd;

#defineMAXSIZE40//假设非零元素个数的最大值为40

#defineMAXRC20//假设矩阵的最大行数为20

classTriple//三元组的定义

protected:

inti,j;

//非零元的行下标和列下标

inte;

//非零元的值

public:

intgetI(){returni;

}//在重载<

输出矩阵时用到这个方法

intgetJ(){returnj;

intgetE(){returne;

friendclassSMatrix;

//友元类

};

classSMatrix//稀疏矩阵

protected:

Tripledata[MAXSIZE+1];

//=newTriple[MAXSIZE+1];

intrpos[MAXRC+1];

//各行第一个非零元在三元组的位置表

inths,ls,fls;

//行数列数非零元素个数

SMatrix(){//默认的构造函数

hs=0;

ls=0;

fls=0;

~SMatrix(){}//析构函数a

intgetHs(){returnhs;

intgetLs(){returnls;

}//返回行数,列数在矩阵乘法比较两个矩阵的行列号是否一致时用到

voidCreat()//创造稀疏矩阵

inti,k;

for(i=1;

i<

=MAXRC+1;

i++)

rpos[i]=0;

请输入矩阵的行数、列数和非零元素个数(以空格隔开):

hs>

ls>

fls;

=fls;

请输入矩阵中非零元素所在的行、列和数值(以空格隔开):

cin>

data[i].i>

data[i].j>

data[i].e;

for(i=1,k=1;

=hs;

rpos[i]=k;

//k为非零元素的标号即代表是第几个非零元素

while(data[k].i<

=i&

k<

=fls)k++;

SMatrix&

operator+(SMatrix&

A)//运算符重载加法

inta,b,temp,l;

SMatrixC;

C.hs=A.hs;

C.ls=A.ls;

a=b=l=1;

//abl分别表示A当前C表的第几个非零数

while(a<

=A.fls&

b<

=fls)

if(A.data[a].i==data[b].i)//非零数行号一样

if(A.data[a].j<

data[b].j)//a的列数小于b的列数

C.data[l++]=A.data[a++];

//将a的值(包括行号列号)先赋予c两表的非零数的下标都向前相加一

elseif(A.data[a].j>

data[b].j)

{

C.data[l++]=data[b++];

//将b的值先赋予c两表的非零数的下标都向前相加一

}

else{

temp=A.data[a].e+data[b].e;

//将ab的值相加赋予tem再赋a予c再修改c的数值为tem最后下标都加一

if(temp)

{

C.data[l]=A.data[a];

C.data[l].e=temp;

l++;

}

a++;

b++;

elseif(A.data[a].i<

data[b].i)//a的行号小于b的行号

C.data[l++]=A.data[a++];

else//a的行号大于b的行号

C.data[l++]=data[b++];

=A.fls)

C.data[l++]=A.data[a++];

while(b<

C.data[l++]=data[b++];

C.fls=l-1;

//因为l的值++多加了个一这里要给减去

returnC;

operator-(SMatrix&

A){//运算符重载减法

data[b].j){//a的列数小于b的列数

A.data[a].e=-A.data[a].e;

//取负数

C.data[l++]=data[b++];

temp=data[b].e-A.data[a].e;

//将ab的值相减赋予tem再赋a予c再修改c的数值为tem最后下标都加一

elseif(A.data[a].i<

data[b].i){//a的行号小于b的行号

A.data[a].e=-A.data[a].e;

C.data[l++]=data[b++];

=A.fls){

A.data[a].e=-A.data[a].e;

C.data[l++]

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

当前位置:首页 > 法律文书 > 调解书

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

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