数据结构实验稀疏矩阵计算器.docx
《数据结构实验稀疏矩阵计算器.docx》由会员分享,可在线阅读,更多相关《数据结构实验稀疏矩阵计算器.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构实验稀疏矩阵计算器
‘
实验报告
题目:
稀疏矩阵运算器
班级:
14电子商务平台建设班完成日期:
2015.11.2
学号:
***********姓名:
孙少辉
学号:
***********姓名:
杨德龙
学号:
***********姓名:
柴益新
一:
需求分析
稀疏矩阵是指那些多数元素为零的矩阵。
利用“稀疏“特点进行存储和计算可以大大节省存储空间,提高计算效率。
实现一个能进行稀疏矩阵基本运算的运算器。
【基本要求】
以“带行逻辑链接信息“的三元组顺序表示稀疏矩阵,实现两个矩阵相加、相减和相乘运算。
稀疏矩阵的输入采用三元组表示,而运算结果的矩阵则以通常阵列形式列出。
【项目约束】
1.首先应输入矩阵的行数和列数,并判断给出的两个矩阵
行、列数对于所要求作的运算是否相匹配。
可设矩阵的行数和列数均不超过20。
2.程序可以对三元组的输入顺序加以限制,例如,按行优
先。
注意研究教科书5.3.2节中的算法,以便提高计算效率。
3.在用三元组稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放。
三:
详细设计
1:
数据结构的定义
元素类型、变量、指针类型
(1)项目数据表:
3.2子函数
函数名
入口参数
出口参数
功能介绍
main()
定义二维数组及用到的各种变量
3:
函数调用关系
无函数调用关系,只有一个主函数
四:
调试分析
三元组顺序的输入规则。
以000作为输入的结束信号。
完成实现稀疏矩阵的相加、相减、相乘的运算。
五:
用户使用说明
(1)首先运行文件系统
1.首先定义要运算的第一个稀疏矩阵的行列数
定义完成之后输入另一个要运算的稀疏矩阵的行列。
(2)输入信息:
如下图所示输入两个矩阵的元素
所有输入信息以及运算方法输入完成之后。
回车直接算出结果
(3)输出信息:
六、源代码
/**
***项目名称:
稀疏矩阵的运算
***设计者:
杨德龙,柴益新,孙少辉
***时间:
2015.11.02
***实现目标:
实现矩阵的加法,减法,乘法;
***/
#include
#include
intmain()
{
//定义二维数组及用到的各种变量
inta[20][20];
intb[20][20];
intc[20][20];
intm,n,k,l,i,j,p;
intsum;
into;
chart;
//输入操作
printf("请输入第一个矩阵的行列\n");
scanf("%d%d",&n,&m);//初始化a数组
for(i=0;ifor(j=0;ja[i][j]=0;
printf("请输入第二个矩阵的行列\n");
scanf("%d%d",&k,&l);//初始化b数组
for(i=0;ifor(j=0;jb[i][j]=0;
printf("请用三元组的方式输入第一个矩阵(例111)(输入000时结束)\n");
while(true)
{
scanf("%d%d%d",&i,&j,&p);
if(i==0&&j==0&&p==0)
break;
else
a[i-1][j-1]=p;
}
printf("请用三元组的方式输入第二个矩阵(例111)(输入000时结束)\n");
while(true)
{
scanf("%d%d%d",&i,&j,&p);
if(i==0&&j==0&&p==0)
break;
else
b[i-1][j-1]=p;
}
printf("请输入执行操作(+或-或*)\n");
while(true)
{
getchar();
scanf("%c",&t);
if(t=='+')//加法运算
{
if(n!
=k||m!
=l)
{
printf("不能进行该运算!
!
");
exit(0);//结束
}
else
{
printf("答案为:
\n");
for(i=0;i{
for(j=0;j{
printf("%d",a[i][j]+b[i][j]);
}
printf("\n");
}
exit(0);//结束
}
}
elseif(t=='-')//减法运算
{
if(n!
=k||m!
=l)
{
printf("不能进行该运算!
!
");
exit(0);//结束
}
else
{
printf("答案为:
\n");
for(i=0;i{
for(j=0;j{
printf("%d",a[i][j]-b[i][j]);
}
printf("\n");
}
exit(0);//结束
}
}
elseif(t=='*')//乘法运算
{
if(m!
=k)
{
printf("不能进行该运算!
!
");
exit(0);//结束
}
else
{
printf("答案为:
\n");
for(o=0;o{
for(i=0;i{
sum=0;
for(j=0;j{
sum=sum+a[o][j]*b[j][i];
}
printf("%d",sum);
}
printf("\n");
}
exit(0);//结束
}
}
else
printf("输入符号错误,重新输入:
\n");
}
return0;//结束
}