当前位置:文档之家› 数据结构实验稀疏矩阵计算器

数据结构实验稀疏矩阵计算器


实验报告
题目:稀疏矩阵运算器
班级:14电子商务平台建设班完成日期:2015.11.2 学号:姓名:孙少辉
学号:姓名:杨德龙
学号:姓名:柴益新
一:需求分析
稀疏矩阵是指那些多数元素为零的矩阵。

利用“稀疏“特点进行存储和计算可以大大节省存储空间,提高计算效率。

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

【基本要求】
以“带行逻辑链接信息“的三元组顺序表示稀疏矩阵,实现两个矩阵相加、相减和相乘运算。

稀疏矩阵的输入采用三元组表示,而运算结果的矩阵则以通常阵列形式列出。

【项目约束】
1.首先应输入矩阵的行数和列数,并判断给出的两个矩阵
行、列数对于所要求作的运算是否相匹配。

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

2.程序可以对三元组的输入顺序加以限制,例如,按行优
先。

注意研究教科书5.3.2节中的算法,以便提高计算效率。

3.在用三元组稀疏矩阵时,相加或相减所得结果矩阵应该另生
成,乘积矩阵也可用二维数组存放。

三:详细设计
1:数据结构的定义
元素类型、变量、指针类型
(1)项目数据表:
3.2子函数
3:函数调用关系
无函数调用关系,只有一个主函数
四:调试分析
三元组顺序的输入规则。

以0 0 0 作为输入的结束信号。

完成实现稀疏矩阵的相加、相减、相乘的运算。

五:用户使用说明
(1)首先运行文件系统
1.首先定义要运算的第一个稀疏矩阵的行列数
定义完成之后输入另一个要运算的稀疏矩阵的行列。

(2)输入信息:
如下图所示输入两个矩阵的元素
所有输入信息以及运算方法输入完成之后。

回车直接算出结果(3)输出信息:
六、源代码
/**
***项目名称:稀疏矩阵的运算
***设计者:杨德龙,柴益新,孙少辉
***时间:2015.11.02
***实现目标:实现矩阵的加法,减法,乘法;***/
#include<stdio.h>
#include<windows.h>
int main()
{
//定义二维数组及用到的各种变量
int a[20][20];
int b[20][20];
int c[20][20];
int m,n,k,l,i,j,p;
int sum;
int o;
char t;
//输入操作
printf("请输入第一个矩阵的行列\n");
scanf("%d%d",&n,&m); //初始化a数组
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j]=0;
printf("请输入第二个矩阵的行列\n");
scanf("%d%d",&k,&l); //初始化b数组
for(i=0;i<n;i++)
for(j=0;j<m;j++)
b[i][j]=0;
printf("请用三元组的方式输入第一个矩阵(例1 1 1)(输入0 0 0时结束)\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("请用三元组的方式输入第二个矩阵(例1 1 1)(输入0 0 0时结束)\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=='+') //加法运算
{
{
printf("不能进行该运算!!");
exit(0); //结束
}
else
{
printf("答案为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]+b[i][j]);
}
printf("\n");
}
exit(0); //结束
}
}
else if(t=='-') //减法运算
{
{
printf("不能进行该运算!!");
exit(0); //结束
}
else
{
printf("答案为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a[i][j]-b[i][j]);
}
printf("\n");
}
exit(0); //结束
}
}
else if(t=='*') //乘法运算
{
if(m!=k)
{
printf("不能进行该运算!!");
exit(0); //结束
}
else
{
printf("答案为:\n");
for(o=0;o<n;o++)
{
for(i=0;i<l;i++)
{
sum=0;
for(j=0;j<m;j++)
{
sum=sum+a[o][j]*b[j][i];
}
printf("%d ",sum);
}
printf("\n");
}
exit(0); //结束
}
v .. . ..
}
else
printf("输入符号错误,重新输入:\n");
}
return 0; //结束
}
. . . 资料. .。

相关主题