数据结构课程设计五基本稀疏矩阵运算的运算器.docx

上传人:b****1 文档编号:15079098 上传时间:2023-06-30 格式:DOCX 页数:18 大小:83.45KB
下载 相关 举报
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第1页
第1页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第2页
第2页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第3页
第3页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第4页
第4页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第5页
第5页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第6页
第6页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第7页
第7页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第8页
第8页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第9页
第9页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第10页
第10页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第11页
第11页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第12页
第12页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第13页
第13页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第14页
第14页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第15页
第15页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第16页
第16页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第17页
第17页 / 共18页
数据结构课程设计五基本稀疏矩阵运算的运算器.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计五基本稀疏矩阵运算的运算器.docx

《数据结构课程设计五基本稀疏矩阵运算的运算器.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计五基本稀疏矩阵运算的运算器.docx(18页珍藏版)》请在冰点文库上搜索。

数据结构课程设计五基本稀疏矩阵运算的运算器.docx

数据结构课程设计五基本稀疏矩阵运算的运算器

数据结构课程设计五

····

题目:

严蔚敏习题实习4第1个:

实现一个能进行基本稀疏矩阵运算的运算器

一、需求分析

1、本程序实现一个基本稀疏矩阵的简单运算,包括加、减、乘。

2、执行操作前应先创造要进行运算的两个矩阵,然后再选择进行相应的操作。

3、以三元组顺序表表示稀疏矩阵,实现二个矩阵相加,相减,相乘的运算;稀疏矩阵的输入形式为三元组表示,运算结果则为通常的阵列形式列出!

4、首先输入矩阵的行数和列数,并判别给出的两个矩阵和行、列数对于所要求作的运算是否相匹配。

可设矩阵的行数和列数均不超过20;

5、程序先给出了菜单项,用户只需按照菜单提示进行相应的操作就行了。

6、测试数据:

二、概要设计

1、抽象数据类型三元组的定义如下:

ADTTriple

{

数据对象:

D={ai|ai(-ElemSet,i=1,2,...,n,n>=0};

数据关系:

R1={|ai-1,ai(-D,i=2,...,n}

基本操作:

}

2、基于三元组顺序表表示的矩阵操作:

(1)创建三元组顺序表表示的矩阵:

voidcreateMatrix(TSMatrix&A)

(2)初始化矩阵:

voidinitMatrix(TSMatrix&A)

(3)相加:

voidadd(TSMatrixA,TSMatrixB,TSMatrix&C)

(4)相减:

voidsub(TSMatrixA,TSMatrix&B,TSMatrix&C)

(5)找m行n列元素在A中顺序表中的位置:

intsearch(TSMatrixA,intm,intn)

(6)相乘;voidmult(TSMatrixA,TSMatrixB,TSMatrix&C)

(7)输入以阵列形式表示的矩阵:

voidprint(TSMatrixA)

3、主程序

Voidmain()

{

While(true)

{

调用相应函数执行相应操作;

输出操作结果;

}

}

4、本程序只有两个模块,调用关系简单:

三、详细设计

1、三元组结构描述:

#defineMAXSIZE20

usingnamespacestd;

typedefstruct

{

introw;

intcol;

inte;

}Triple;

typedefstruct

{

Tripledate[MAXSIZE];

intm,n,len;

}TSMatrix;

voidinitMatrix(TSMatrix&A)

{

A.len=0;

A.m=0;

A.n=0;

for(inti=0;i

{

A.date[i].col=0;

A.date[i].e=0;

A.date[i].row=0;

}

}

2、各种操作函数源代码:

voidcreateMatrix(TSMatrix&A)

{

initMatrix(A);

cout<<"创建矩阵:

";

cout<<"请输入矩阵的行列值及非0元素个数\n";

cin>>A.m>>A.n>>A.len;

for(inti=0;i

{

cout<<"请输入第"<

";

cin>>A.date[i].row;

cin>>A.date[i].col;

cin>>A.date[i].e;

}

}

voidadd(TSMatrixA,TSMatrixB,TSMatrix&C)//相加

{

if(A.m==B.m&&A.n==B.n)

{

inti=0,j=0;

intk=0;

C.m=A.m;

C.n=A.n;

while(i

{

if(i==A.len&&j

{

C.date[k].col=B.date[j].col;

C.date[k].row=B.date[j].row;

C.date[k++].e=B.date[j].e;

C.len++;

j++;

}

elseif(i

{

C.date[k].col=A.date[i].col;

C.date[k].row=A.date[i].row;

C.date[k++].e=A.date[i].e;

C.len++;

i++;

}

else

{

if(A.date[i].row>B.date[j].row)

{

C.date[k].col=B.date[j].col;

C.date[k].row=B.date[j].row;

C.date[k++].e=B.date[j].e;

C.len++;

j++;

 

}

elseif(A.date[i].row

{

C.date[k].col=A.date[i].col;

C.date[k].row=A.date[i].row;

C.date[k++].e=A.date[i].e;

C.len++;

i++;

}

else

{

if(A.date[i].col==B.date[j].col)

{

if(A.date[i].e+B.date[j].e!

=0)

{

C.date[k].col=A.date[i].col;

C.date[k].row=A.date[i].row;

C.date[k++].e=A.date[i].e+B.date[j].e;

C.len++;

}

i++;

j++;

}

elseif(A.date[i].col>B.date[j].col)

{

C.date[k].col=B.date[j].col;

C.date[k].row=B.date[j].row;

C.date[k++].e=B.date[j].e;

C.len++;

j++;

}

elseif(A.date[i].col

{

C.date[k].col=A.date[i].col;

C.date[k].row=A.date[i].row;

C.date[k++].e=A.date[i].e;

C.len++;

i++;

}

}

}

}

}

else

{

cout<<"不能相加!

";

}

}

voidsub(TSMatrixA,TSMatrix&B,TSMatrix&C)//相减

{

for(intk=0;k

{

B.date[k].e=-B.date[k].e;

}

if(A.m==B.m&&A.n==B.n)

{

add(A,B,C);

}

else

cout<<"不能相减!

";

for(k=0;k

{

B.date[k].e=-B.date[k].e;

}

}

intsearch(TSMatrixA,intm,intn)

{

intflag=-1;

for(inti=0;i

{

if(A.date[i].row==m&&A.date[i].col==n)

{

flag=i;

break;

}

}

returnflag;

}

voidmult(TSMatrixA,TSMatrixB,TSMatrix&C)//相乘

{

inti=0,j=0;

if(A.n==B.m)

{

C.m=A.m;

C.n=B.n;

for(i=0;i

{

for(j=0;j

{

if(A.date[i].col==B.date[j].row)

{

intflag=search(C,A.date[i].row,B.date[j].col);

if(flag==-1)

{

C.date[C.len].col=B.date[j].col;

C.date[C.len].row=A.date[i].row;

C.date[C.len++].e=A.date[i].e*B.date[j].e;

}

else

{

C.date[flag].e=C.date[flag].e+A.date[i].e*B.date[j].e;

}

}

}

}

}

else

{cout<<"不能相乘!

"<

}

voidprint(TSMatrixA)

{

intk=0;

inti,j;

intM[MAXSIZE][MAXSIZE];

for(i=0;i

{

for(j=0;j

{

M[i][j]=0;

}

}

while(k

{

M[A.date[k].row-1][A.date[k].col-1]=A.date[k].e;

k++;

}

for(i=0;i

{

cout<<"|";

for(j=0;j

{

cout<

}

cout<<"|"<

}

}

voidshowtip()

{

cout<<"------------请选择要执行的操作--------"<

cout<

cout<<"0---创建矩阵"<

cout<<"1---A+B"<

cout<<"2---A-B"<

cout<<"3---A*B"<

cout<<"4---退出"<

cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<

}

3、主函数:

voidmain()

{

TSMatrixA,B,C;

initMatrix(A);

initMatrix(B);

initMatrix(C);

showtip();

inti;

cin>>i;

while(true)

{

switch(i)

{

case0:

system("cls");

cout<<"创建矩阵A:

"<

createMatrix(A);

cout<<"创建矩阵B:

"<

createMatrix(B);

showtip();

break;

case1:

system("cls");

if(A.m==0||B.m==0)

{

cout<<"未建矩阵"<

}

else

{

initMatrix(C);

add(A,B,C);

if(A.m==B.m&&A.n==B.n)

{

cout<<"加的结果;"<

print(A);

cout<<"+"<

print(B);

cout<<"="<

print(C);

}

}

showtip();

break;

case2:

system("cls");

if(A.m==0||B.m==0)

{

cout<<"未建矩阵"<

}

else

{

initMatrix(C);

sub(A,B,C);

cout<<"减的结果;"<

print(A);

cout<<"+"<

print(B);

cout<<"="<

print(C);

}

showtip();

break;

case3:

system("cls");

if(A.m==0||B.m==0)

{

cout<<"未建矩阵"<

}

else

{

initMatrix(C);

mult(A,B,C);

if(A.n==B.m)

{

cout<<"乘后的结果;"<

print(A);

cout<<"*"<

print(B);

cout<<"="<

print(C);

}

}

showtip();

break;

case4:

exit(0);

break;

}

cin>>i;

}

}

四、调试分析

1、由于本程序涉及的函数比较多,所以开始时在函数调用上出现了混乱,把自己都给搞糊涂了,后来经仔细排查,最终发现了错误。

2、一开始看这个题目时,感觉以前似乎做过,觉得很简单,所以没有进行认真分析就开始急着写程序,写了一点后发现没思路了,怎么也写不下出了,搞了半天结果什么也没写出来。

所以得出经验,以后写程序必须先分析好思路,然后才开始着手去写,这样能达到现半功倍的效果。

3、矩阵的加和减,在表面上看似乎很相似,只要把加改减就能完成任务,其实不然。

五、用户手册

1、本程序的运行环境为DOS操作环境,文件名为约瑟夫环.exe;

2、本例演示程序简单明了,按菜单提示操作即可。

六、测试结果

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2