稀疏矩阵的运算(完美版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业课程设计I报告(2011 / 2012 学年第二学期)

题目稀疏矩阵的转换

专业软件工程

学生姓名张鹏宇

班级学号 09003018

指导教师张卫丰

指导单位计算机学院软件工程系

日期 2012年6月18号

指导教师成绩评定表

附件:

稀疏矩阵的转换

一、课题内容和要求

1.问题描述

设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。

2.需求分析

(1)设计函数建立稀疏矩阵,初始化值。

(2)设计函数输出稀疏矩阵的值。

(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。

(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。

(5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。

(6)构造函数进行稀疏矩阵的转置,并输出结果。

(7)退出系统。

二、设计思路分析

(1)设计函数建立稀疏矩阵,初始化值。

(2)设计函数输出稀疏矩阵的值。

(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。

(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。

(5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。

(6)构造函数进行稀疏矩阵的转置,并输出结果。

(7)退出系统。

三、概要设计

为了实现以上功能,可以从3个方面着手设计。

1.主界面设计

为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主

控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。

2.存储结构设计

本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。

3.系统功能设计

本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。

(1)稀疏矩阵的加法:

此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。

(2)稀疏矩阵的乘法:

此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输

入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。

(3)稀疏矩阵的转置:

此功能由函数void Zhuanzhi( )实现。当用户选择该功能,系统提示用户初始化一个矩阵,然后进行转置,最终输出结果。

(4)退出:

即退出稀疏矩阵的应用系统。由函数5实现,但用户选择此功能时,系统会提示你是否确实想退出,如果是,则退出,否则继续。

三、模块设计

1.模块设计

本程序包含1个模块:主程序模块加各功能实现模块。

2.系统子程序及功能设计

本系统共设置7个子程序,各子程序的函数名及功能说明如下。

(1)typedef int ElemType ,&[i].j,&[i].e);

}

for(i=1,k=1;i<=;i++)

{

[i]=k;

while[k].i<=i && k<=

k++;

}

}

void Xiangjia(TSMatrix A,TSMatrix B,TSMatrix &C,int n)

{

int a,b,temp,l;

=;

=;

a=b=l=1;

while(a<= && b<=

{

if[a].i==[b].i)

{

if[a].j<[b].j)

[l++]=[a++];

else if[a].j>[b].j)

{[l]=[b]; [l++].e=n*[b++].e;}

else{

temp=[a].e+n*[b].e;

if(temp)

{

[l]=[a];

[l].e=temp;

l++;

}

a++;b++;

}

}

else if[a].i<[b].i)

[l++]=[a++];

else {[l]=[b]; [l++].e=n*[b++].e;} }

while(a<=

[l++]=[a++];

while(b<=

{[l]=[b]; [l++].e=n*[b++].e;}

=l-1;

}

int Xiangcheng(TSMatrix A,TSMatrix B,TSMatrix &Q) {

int arow,brow,ccol,tp,p,q,t;

int ctemp[MAXRC+1];

if!= return 0;

=;=;=0;

if*

{

for(arow=1;arow<=;arow++)

{

for(ccol=1;ccol<=;ccol++)

ctemp[ccol]=0;

[arow]=+1;

if(arow< tp=[arow+1];

else tp=+1;

for(p=[arow];p

{

brow=[p].j;

if(brow< t=[brow+1];

else t=+1;

for(q=[brow];q

相关文档
最新文档