版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计五班级:06计本(1) 姓名:魏建平 学号:20060724035 题目: 严蔚敏习题实习4第1个:实现一个能进行基本稀疏矩阵运算的运算器一、 需求分析1、 本程序实现一个基本稀疏矩阵的简单运算,包括加、减、乘。2、 执行操作前应先创造要进行运算的两个矩阵,然后再选择进行相应的操作。3、 以三元组顺序表表示稀疏矩阵,实现二个矩阵相加,相减,相乘的运算;稀疏矩阵的输入形式为三元组表示,运算结果则为通常的阵列形式列出!4、 首先输入矩阵的行数和列数,并判别给出的两个矩阵和行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20;5、 程序先给出了菜单项,用户只需按照菜
2、单提示进行相应的操作就行了。6、 测试数据:二、 概要设计1、 抽象数据类型三元组的定义如下:ADT Triple数据对象:D=ai| ai(-ElemSet,i=1,2,.,n,n>=0;数据关系:R1=<ai-1,ai>| ai-1,ai(- D,i=2,.,n基本操作:略2、基于三元组顺序表表示的矩阵操作: (1)创建三元组顺序表表示的矩阵:void createMatrix(TSMatrix &A) (2)初始化矩阵:void initMatrix(TSMatrix &A) (3)相加:void add(TSMatrix A,TSMatrix B,TS
3、Matrix &C) (4)相减:void sub(TSMatrix A,TSMatrix &B,TSMatrix &C) (5)找m行n列元素在A中顺序表中的位置:int search(TSMatrix A,int m,int n) (6)相乘;void mult(TSMatrix A,TSMatrix B,TSMatrix &C) (7)输入以阵列形式表示的矩阵:void print(TSMatrix A) 3、主程序 Void main() While(true) 调用相应函数执行相应操作; 输出操作结果;4、本程序只有两个模块,调用关系简单:三、 详细设
4、计1、 三元组结构描述:#define MAXSIZE 20using namespace std;typedef struct int row;int col;int e;Triple;typedef structTriple dateMAXSIZE;int m,n,len;TSMatrix;void initMatrix(TSMatrix &A)A.len=0;A.m=0;A.n=0;for(int i=0;i<MAXSIZE;i+)A.datei.col=0;A.datei.e=0;A.datei.row=0;2、 各种操作函数源代码:void createMatrix(T
5、SMatrix &A)initMatrix(A);cout<<"创建矩阵:" cout<<"请输入矩阵的行列值及非0元素个数n" cin>>A.m>>A.n>>A.len; for(int i=0;i<A.len;i+) cout<<"请输入第"<<i<<"个非0元素对应的行、列、值:" cin>>A.datei.row; cin>>A.datei.col; cin>>A
6、.datei.e; void add(TSMatrix A,TSMatrix B,TSMatrix &C)/相加if(A.m=B.m&&A.n=B.n)int i=0,j=0;int k=0;C.m=A.m;C.n=A.n; while( i<A.len|j<B.len) if(i=A.len&&j<B.len) C.datek.col=B.datej.col; C.datek.row=B.datej.row; C.datek+.e=B.datej.e; C.len+; j+; else if(i<A.len&&j
7、=B.len) C.datek.col=A.datei.col; C.datek.row=A.datei.row; C.datek+.e=A.datei.e; C.len+; i+; else if(A.datei.row>B.datej.row) C.datek.col=B.datej.col; C.datek.row=B.datej.row; C.datek+.e=B.datej.e; C.len+; j+; else if(A.datei.row<B.datej.row) C.datek.col=A.datei.col; C.datek.row=A.datei.row; C.
8、datek+.e=A.datei.e; C.len+; i+; else if(A.datei.col=B.datej.col)if(A.datei.e+B.datej.e!=0) C.datek.col=A.datei.col; C.datek.row=A.datei.row; C.datek+.e=A.datei.e+B.datej.e; C.len+; i+; j+; else if(A.datei.col>B.datej.col) C.datek.col=B.datej.col; C.datek.row=B.datej.row; C.datek+.e=B.datej.e; C.l
9、en+; j+; else if(A.datei.col<B.datej.col) C.datek.col=A.datei.col; C.datek.row=A.datei.row; C.datek+.e=A.datei.e; C.len+; i+; else cout<<"不能相加!"void sub(TSMatrix A,TSMatrix &B,TSMatrix &C)/相减for(int k=0;k<B.len;k+)B.datek.e=-B.datek.e;if(A.m=B.m&&A.n=B.n)add(A,B
10、,C);else cout<<"不能相减!"for( k=0;k<B.len;k+)B.datek.e=-B.datek.e;int search(TSMatrix A,int m,int n) int flag=-1; for(int i=0;i<MAXSIZE;i+) if(A.datei.row=m&&A.datei.col=n) flag=i; break; return flag;void mult(TSMatrix A,TSMatrix B,TSMatrix &C)/相乘int i=0,j=0;if(A.n=B.m
11、)C.m=A.m;C.n=B.n;for(i=0;i<A.len;i+)for(j=0;j<B.len;j+) if(A.datei.col=B.datej.row)int flag=search(C,A.datei.row,B.datej.col);if(flag=-1) C.dateC.len.col=B.datej.col;C.dateC.len.row=A.datei.row; C.dateC.len+.e=A.datei.e*B.datej.e;elseC.dateflag.e=C.dateflag.e+A.datei.e*B.datej.e;elsecout<&l
12、t;"不能相乘!"<<endl;void print(TSMatrix A)int k=0;int i,j;int MMAXSIZEMAXSIZE;for(i=0;i<A.m;i+)for(j=0;j<A.n;j+)Mij=0;while(k<A.len)MA.datek.row-1A.datek.col-1=A.datek.e;k+;for(i=0;i<A.m;i+)cout<<"| "for(j=0;j<A.n;j+)cout<<Mij<<" "cout
13、<<"|"<<endl;void showtip()cout<<"-请选择要执行的操作-"<<endl;cout<<endl;cout<<" 0-创建矩阵"<<endl;cout<<" 1-A+B"<<endl;cout<<" 2-A-B"<<endl;cout<<" 3-A*B"<<endl;cout<<&q
14、uot; 4-退出"<<endl;cout<<""<<endl;3、 主函数:void main()TSMatrix A,B,C;initMatrix(A);initMatrix(B);initMatrix(C);showtip();int i;cin>>i;while(true)switch(i)case 0:system("cls");cout<<"创建矩阵A:"<<endl; createMatrix(A); cout<<"创
15、建矩阵B:"<<endl; createMatrix(B);showtip();break;case 1:system("cls");if(A.m=0|B.m=0)cout<<"未建矩阵"<<endl;elseinitMatrix(C);add(A,B,C);if(A.m=B.m&&A.n=B.n)cout<<"加的结果;"<<endl;print(A);cout<<"+"<<endl;print(B);c
16、out<<"="<<endl;print(C);showtip();break;case 2:system("cls");if(A.m=0|B.m=0)cout<<"未建矩阵"<<endl;elseinitMatrix(C);sub(A,B,C);cout<<"减的结果;"<<endl;print(A);cout<<"+"<<endl;print(B);cout<<"="
17、;<<endl;print(C);showtip();break;case 3:system("cls"); if(A.m=0|B.m=0)cout<<"未建矩阵"<<endl;elseinitMatrix(C);mult(A,B,C);if(A.n=B.m)cout<<"乘后的结果;"<<endl;print(A); cout<<"*"<<endl; print(B); cout<<"="<<endl; print(C);showtip();break;case 4:exit(0);break;cin>>i;四、 调试分析1、 由于本程序涉及的函数比较多,所以开始时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论