数据库课程设计 稀疏矩阵.docx

上传人:b****8 文档编号:23662592 上传时间:2023-05-19 格式:DOCX 页数:13 大小:150.90KB
下载 相关 举报
数据库课程设计 稀疏矩阵.docx_第1页
第1页 / 共13页
数据库课程设计 稀疏矩阵.docx_第2页
第2页 / 共13页
数据库课程设计 稀疏矩阵.docx_第3页
第3页 / 共13页
数据库课程设计 稀疏矩阵.docx_第4页
第4页 / 共13页
数据库课程设计 稀疏矩阵.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据库课程设计 稀疏矩阵.docx

《数据库课程设计 稀疏矩阵.docx》由会员分享,可在线阅读,更多相关《数据库课程设计 稀疏矩阵.docx(13页珍藏版)》请在冰豆网上搜索。

数据库课程设计 稀疏矩阵.docx

数据库课程设计稀疏矩阵

 

目录

1设计题目4

1.1任务4

1.3输入5

1.4输出5

2.概要设计6

2.1数据需求分析6

2.2功能需求分析6

2.3数据结构设计6

2.3.1ADT描述6

3.详细设计7

3.1各个程序的实现图7

3.2源程序设计7

4.调试分析8

4.1程序运行截图

5.设计总结9

参考文献10

 

1设计题目:

稀疏矩阵操作

1.1任务

(1)完成一稀疏矩阵转置,

(2)能够完成两个稀疏矩阵相加,

(3)输出稀疏矩阵

1.2要求

在上交资料中请写明:

存储结构、稀疏矩阵相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

1.3输入

1.4输出

2概要设计

2.1数据需求分析

假设稀疏矩阵M和N均以三元组表作为存储结构;

另设三元组表存放结果矩阵。

2.2功能需求分析

1.输入稀疏矩阵M和N。

2.检测M和N能否相加

3.矩阵相加运算

4.打印输出结果

矩阵相加测试实例:

输入

M=,N=

2.3数据结构设计

2.31.ADT描述:

ADTSparseMatrix{

数据对象:

m和n分别称为矩阵的行数和列数}

数据关系:

R={Row,Col}

 

基本操作:

CreateSMatrix(&M);

操作结果:

创建稀疏矩阵M。

AddSMatrix(M,N,&Q);

初始条件:

稀疏矩阵M与N的行数列数相等。

操作结果:

求得Q=M+N。

PrintSMatrix(M);

初始条件:

稀疏矩阵M存在。

操作结果:

输出稀疏矩阵M。

}ADTSparseMatrix

3详细设计

(1)各函数的实现图

(2)源程序:

#include

#include

#defineMAXSIZE100

typedefstruct

{

inti,j;

inte;

}Triple;

typedefstruct

{

Tripledata[MAXSIZE+1];

intmu,nu,tu;//mu,nu为稀疏矩阵的行列数,tu是稀疏矩阵的非零元素个数

}TSMatrix;

TSMatrixM,T,S,B,C;

voidCreateMatrix(TSMatrix&M)

{

inti,elem,col,row,mu,nu,tu;

printf(“请输入系数矩阵的行数,列数和非零元素个数:

\n”);

scanf(“%d%d%d”,&mu,&nu,&tu);

M.mu=mu;

M.nu=nu;

M.tu=tu;

for(i=1;i<=tu;i++)

{

printf(“情输入非零元素的行号,列号和值:

\n”);

scanf(“%d%d%d”,&col,&row,&elem);

if(mu<=1||col>M.mu||nu<=1||row>M.nu)

{

printf(“error!

”);

exit(0);

}

else

{

M.data[i].i=col;//输出这个三元组

M.data[i].j=row;

M.data[i].e=elem;

}

}

}

voidFastTransposeSMatrix(TSMatrixM)/*求转置矩阵*/

{

intnum[100];

intcpot[100];

intp,q,t,col=0;

T.mu=M.mu;

T.nu=M.nu;

T.tu=M.tu;

if(T.tu)

{

for(col=1;col<=M.nu;col++)

{

num[col]=0;

}

for(t=1;t<=M.tu;t++)

{

num[M.data[t].j]++;

}

cpot[1]=1;

for(col=2;col<=M.nu;col++)

{

cpot[col]=cpot[col-1]+num[col-1];

}

for(p=1;p<=M.tu;++p)

{

col=M.data[p].j;

q=cpot[col];

T.data[q].i=M.data[p].j;

T.data[q].j=M.data[p].i;

T.data[q].e=M.data[p].e;

cpot[col]++;

}

}TSMatrix(T);

}

voidTSMatrix_add(TSMatrixM,TSMatrixT,TSMatrix&ADD)

{

inta=1,b=1,c=1,x;

ADD.mu=M.mu;ADD.nu=M.nu;ADD.tu=0;

for(x=1;x<=M.mu;x++)

{

while(M.data[a].i==x&&T.data[b].i==x)

{

if(M.data[a].j==T.data[b].j)

{

ADD.data[c].i=M.data[a].i;

ADD.data[c].j=M.data[a].j;

ADD.data[c].e=M.data[a].e+T.data[b].e;

c++;a++;b++;

}

elseif(M.data[a].j

{

ADD.data[c].i=M.data[a].i;

ADD.data[c].j=M.data[a].j;

ADD.data[c].e=M.data[a].e;

c++;a++;

}

else

{

ADD.data[c].i=T.data[b].i;

ADD.data[c].j=T.data[b].j;

ADD.data[c].e=T.data[b].e;

c++;b++;

}

}

while(M.data[a].i==x)

{

ADD.data[c].i=M.data[a].i;

ADD.data[c].j=M.data[a].j;

ADD.data[c].e=M.data[a].e;

c++;a++;

}

while(T.data[b].i==x)

{

ADD.data[c].i=T.data[b].i;

ADD.data[c].j=T.data[b].j;

ADD.data[c].e=T.data[b].e;

c++;b++;

}

}

ADD.tu=c-1;

}

voidShowMatrix(TSMatrix&M)

{

inti=1,j=1,ir=1;

//printf(“稀疏矩阵为:

\n’’);

for(i=1;i<=M.mu;i++)

{

for(j=1;j<=M.nu;j++)

{

if(M.data[dir].i==i&&M.data[dir].j==j)

{

printf(“%d“,M.data[dir].e);

dir++;

}

else

printf(“0“);

}

printf(“\n”);

}

}

 

voidmain()

{

while

(1)

{

intc;

M.mu=0;

M.nu=0;

M.tu=0;

printf(“创建一个稀疏矩阵A:

\n”);

printf(“求转置矩阵A:

\n”);

printf(“创建一个稀疏矩阵B:

\n”);

printf(“求转置矩阵B:

\n”);

printf(“求A与B院矩阵的和:

\n”);

while

(1)

{

printf(“请选择:

”);

scanf(“%d”,&c);

switch(c)

{

case1:

CreateMatrix(M);break;

case2:

FastTransposeSMatrix(M);

printf(“原矩阵A为:

\n”);

ShowMatrix(M);

printf(“转置矩阵为:

\n”);

ShowMatrix(T);break;

case3:

CreateMatrix(B);break;

case4:

FastTransposeSMatrix(B);

printf(“原矩阵B为:

\n”);

ShowMatrix(B);

printf(“转置矩阵为:

\n”);

ShowMatrix(T);break;

case5:

FastTransposeSMatrix(M);

TSMatrix_add(M,B,S);

printf(“A与B原矩阵的和为:

\n”);

ShowMatrix(S);break;

}

}

}

}

4.调试分析

(1)选择选项1,创建矩阵A;选择选项2,转置矩阵A

(2)选择选项3,创建矩阵B;选择选项4,转置矩阵B

(3)选择选项5,原矩阵A与B实现相加操作

5.设计总结

调试程序时,应该注意矩阵的调用。

比如,开始的时候没有注意将程序调用!

尽管实现了矩阵的转置和相加,但没有符合题意。

在调试时,我才意识到以前老是犯一个错误,就是在最后加了个return0,这是错误的!

参考文献

格式要求如下:

1专著著录格式

[序号]著者.书名[M].版本(第一版不写).出版地:

出版者,出版年.起止页码

例:

[1]孙家广,杨长青.计算机图形学[M].北京:

清华大学出版社,1995.26~28

[2]SkolinkMI.Radarhandbook[M].NewYork:

McGraw-Hill,1990

2期刊著录格式

[序号]作者.题名[J].刊名,出版年份,卷号(期号):

起止页码

例:

[3]李旭东,宗光华,毕树生,等.生物工程微操作机器人视觉系统的研究[J].北京航空航天大学学报,2002,28(3):

249~252

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

当前位置:首页 > 工程科技 > 能源化工

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

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