课程设计报告封面11.doc_第1页
课程设计报告封面11.doc_第2页
课程设计报告封面11.doc_第3页
课程设计报告封面11.doc_第4页
课程设计报告封面11.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

海南大学2009 2010年度第1学期数据结构课程设计报告学生证号: 学生姓名: 分 数: 课程设计报告一、 程序设计的目的和要求:本程序使用的得是C语言的编程,将含有多个零元素的稀疏矩阵进行压缩,以减少其存储空间,并更加简洁便利的进行存储,再利用压缩的三元组将其还原成原来的稀疏矩阵。以此来锻炼我们的实际操作能力,也能活跃我们的思维和创新能力。二、 需求分析:该程序可以分为三个模块:(1) 稀疏矩阵的输入模块:使用main( )函数来进行输入。(2) 稀疏矩阵的压缩模块:调用matrix( )函数来进行矩阵的压缩,并将其所得的三元组进行输出。(3) 三元组的还原模块:调用retu( )函数将三元组还原成原来的稀疏矩阵,并将其进行输出。三、 概要设计:第一部分:主函数main( )的使用,首先定义一个数组array,利用循环将数组array进行输入。然后调用函数matrix,将稀疏矩阵进行压缩。最后调用函数retu,将稀疏矩阵进行还原。第二部分:调用函数matrix对矩阵进行压缩,首先利用if函数和循环对稀疏矩阵中的非零元素进行识别,并将其元素所在的行、列和数值分别赋给变量row、col和val。然后对压缩的三元组进行输出,并且将非零元素所在的行、列和数值保存在compress数组中。最后将矩阵的最大行数x和最大列数y分别保存在compress数组的第一个元素和第二个元素中,将举证中非零个数n保存在compress数组的第三个元素中,为下边矩阵的还原做准备。第三部分:调用函数retu对矩阵进行还原,首先设定一个数组retu100100,并利用数组compress中的前两个元素的值对数组retu的最大的行和列进行限定。然后利用循环给数组retu进行赋值,将所有元素都赋值为零,并利用if函数和循环将compress数组中保存的矩阵的非零元素所在的行数和列数组retu中找到对应的行和列,将其所保存的数值赋给相应的数组retu的元素中。最后利用循环将数组retu进行还原,即为系数矩阵的还原。四、 详细设计:#include#include /*调用了2个库函数*/int compress1003; /*定义了一个数组compress*/void matrix(int x,int y,int array100100) /*利用函数对稀疏矩阵进行压缩*/ int i,j,row,col,val,x,y; int n=0; printf(“the compress result of the matrix is:”); printf(row col val); printf(n); for(i=0;ix;i+) for(j=0;jy;j+) if(arrayij!=0) /*利用if函数对非零数的行、列和数值进行判别*/ n+; /*计算非零的个数*/ row=i;col=j;val=arrayij; /*对三元组进行赋值*/ printf(%-8d%-8d%-8d,row,col,val);/*对三元组进行输出*/compressn0=i; /*将矩阵中非零元素所在行的行数保存在数组compress的第一列中*/ compressn1=j; /*将矩阵中非零元素所在列的列数保存在数组compress的第二列中*/compressn2=arrayij; /*将矩阵中的非零元素保存在compress数组的第三列中*/ printf(n); compress00=x;/*将矩阵的最大行数数值赋给compress数组的第一个元素*/ compress01=y;/*将矩阵的最大列数数值赋给cimpress数组的第二个元素*/ compress02=n;/*将非零个数数值赋给compress数组的第三个元素*/void retu(int compress1003) /*利用函数对三元组进行还原*/ int i,j,m; int retu100100; int x,y; int n; x=compress00; y=compress01; n=compress02; for(i=0;ix;i+) for(j=0;jy;j+) retuij=0; /*将数组retu 的所有元素都赋值为零*/ for(i=0;ix;i+) for(j=0;jy;j+) for(m=1;mn+1;m+) if(compressm0=i&compressm1=j) /*对符合数组retu的非零元素进行识别,并对retu数组进行赋值*/ retuij=compressm2; printf(“the retu result of the matrix is:”); for(i=0;ix;i+) for(j=0;jy;j+) printf(%-4d,retuij); /*对稀疏矩阵进行输出*/ printf(n); main( ) int i,j; int array45; printf(Please input all data:n); for(i=0;ix;i+) for(j=0;jy;j+) scanf(%d,&arrayij); /*输入稀疏矩阵中各元素的值*/ printf(n); matrix(array); /*调用函数matrix对矩阵进行压缩*/ printf(n); retu(compress); /*调用函数retu对矩阵进行还原*/调试分析:我们利用了一个4行5列的稀疏矩阵进行输入,依次输入了数值:Please intput all data: 1 0 2 0 00 3 0 0 50 0 8 0 76 0 0 9 0并依次输出了三元组:Row col val 0 0 10 2 21 1 31 4 52 2 82 4 73 0 63 3 9将还原的稀疏矩阵进行了输出;1 0 2 0 00 3 0 0 50 0 8 0 76 0 0 9 0存在的问题:1、心得体会: 刚开始接到老师出的对稀疏矩阵进行压缩和还原的题目时,感觉有点迷茫和无助。因为上学期学的C语言程序设计的一些基础理论知识都差不多忘记了,比如连最基本的函数调用都不会运用了。所以刚开始的那几天只能拿着课本重新进行了仔细的阅读,才开始进行进行本程序的设计。我主要负责的是将三元组还原成稀疏矩阵,第一节上机操作课我用在图书馆找的资料进行实践,却错误连篇。特别是我只是一直在想如何将三元组还原,却没有将三元组和上边所进行的压缩进行衔接,这样持续了好长时间还是一无所获。那时候真的又想放弃的念头,但宿舍里的舍友却一直在鼓励我,并且非常信任我,帮我找相关方面的资料,并和我一起进行探讨和分析。才使我学会利用数组compress将矩阵的最大行和最大列在压缩矩阵中进行存储,并将矩阵中的非零元素所在的行、列和数值进行存储,以为下一步的矩阵的还原做准备。但在后面利用if函数和三个循环对稀疏矩阵中的非零元素的位置查找时,却遇到了难题,我总是把数组retu进行了多次零元素的赋值,使输出结果总是出现许多没有必要出现的零元素,但我就是没有发觉源程序中错误,还好回到宿舍给她们看时及时发现了并将其顺利的改进了。这次的编程让我受益匪浅。我感觉在C语言程序设计方面还是非常的欠缺,而且思维逻辑方面不是很严谨,总是会出现一些不应该出现的小错误,实际操作能力也比较弱。在程序设计这方面我兴趣比较浓厚,而且也喜欢编一些小程序,但却没有耐力,不能够持之以恒。我想以后我应该多重视一下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论