版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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,TSM
3、atrix &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、本程序只有两个模块,调用关系简单:三、 详细设计1
4、、 三元组结构描述:#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(TSM
5、atrix &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.d
6、atei.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=B
7、.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.da
8、tek+.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.len
9、+; 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,C
10、);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)C
11、.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<<
12、"不能相乘!"<<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&l
13、t;<"|"<<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<<&quo
14、t; 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);cou
16、t<<"="<<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、lt;<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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西钦州市市直卫生健康系统钦聚英才招聘34人考试备考试题及答案解析
- 2026河南郑州汽车工程职业学院招聘38人(含高层次人才岗)考试备考试题及答案解析
- 2026北京中国绿发部分二级战新产业单位高管社会招聘5人考试备考题库及答案解析
- 2025内外贸一体化认证服务指南-动力电池产业
- 2026年包头钢铁职业技术学院高职单招职业适应性测试模拟试题带答案解析
- 2026上海市临床检验中心招聘1人考试备考试题及答案解析
- 中铁广州局2026届校园招聘考试参考试题及答案解析
- 2026年中国烟草总公司合肥设计院招聘7人考试备考试题及答案解析
- 2026年杭州西湖区青少年宫诚聘教师(非事业)笔试参考题库及答案解析
- 2026年衡水市第三中学招聘备考题库参考答案详解
- 2025山东聊城市市属事业单位定向招聘随军未就业家属8人备考核心试题附答案解析
- 急危重症护理进展
- 2026年江西应用技术职业学院单招职业适应性测试必刷测试卷附答案
- 建筑垃圾处理及清运方案
- 【语文】江苏省南京市瑞金北村小学小学五年级上册期末试题(含答案)
- 温州医科大学学位论文定稿格式注意事项
- 《劳动与社会保障法》期末试题
- 电厂装置性违章培训课件
- 2025年艾滋病防治知识暨反歧视培训试题及答案
- 2025年数字油田市场调研报告
- 国家开放大学《劳动与社会保障法》形考任务1-4参考答案
评论
0/150
提交评论