课程设计报告数据结构课程设计 2.docx
《课程设计报告数据结构课程设计 2.docx》由会员分享,可在线阅读,更多相关《课程设计报告数据结构课程设计 2.docx(11页珍藏版)》请在冰豆网上搜索。
![课程设计报告数据结构课程设计 2.docx](https://file1.bdocx.com/fileroot1/2023-1/25/96eb5dbf-4fbb-4db3-8b85-759680700b2c/96eb5dbf-4fbb-4db3-8b85-759680700b2c1.gif)
课程设计报告数据结构课程设计2
北京化工大学北方学院
课程设计报告
课程名称数据结构课程设计
设计题目特殊矩阵的压缩存储算法的实现
专业、班级软件工程1004
学号100220126
姓名祝杰
指导教师周建敏老师
设计时间2013年9月2日--2013年9月15日
2013年9月20日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
1.设计目的:
《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
进行数据结构课程设计要达到以下目的:
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法
和技能;
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应
具备的科学的工作方法和作风。
2.设计内容和要求:
设计内容:
(1) 针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;
(2) 输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。
设计要求:
(1) 符合课题要求,实现相应功能;
(2) 要求界面友好美观,操作方便易行; (3) 注意程序的实用性、安全性;
3.主要任务:
1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;
2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;
二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。
正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。
)
1.概要设计
程序流程图如下:
图2.1程序流程图
2详细设计
特殊矩阵:
值相同元素或者零元素分布有一定规律的矩阵称为特殊矩阵例:
对称矩阵、上(下)三角矩阵都是特殊矩阵。
3测试结果
图3.1选择矩阵类型
图3.2对称矩阵
图3.3下三角矩阵
图3.4上三角矩阵
4源代码
#include
#include
staticshangsanjiao(intn)
{
inti,j,k,z,g;
intL[100][100],SA[100];
printf("请输入您要压缩矩阵的行列数\n");
scanf("%d",&n);
printf("请输入您的矩阵内元素:
\n");
for(i=1;ifor(j=1;j{
scanf("%d",&L[i][j]);
if(i<=j)
k=j*(j-1)/2+i-1;
else
k=n*(n+1)/2;
SA[k]=L[i][j];
}
printf("您输入的矩阵为:
\n");
for(i=1;i{for(j=1;jprintf("%d",L[i][j]);
printf("\n");
}
printf("压缩存储后:
\n");
for(k=0;kprintf("%d%d\n",k,SA[k]);
printf("若要读取矩阵的值请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
for(g=0;g<1000;g++)
{
while(z==100)
{
printf("请您输入未压缩时所在行数:
\n");
scanf("%d",&i);
printf("请您输入未压缩时所在列数:
\n");
scanf("%d",&j);
if(i<=j)
k=j*(j-1)/2+i-1;
else
k=n*(n+1)/2;
printf("该地址的值为:
\n");
printf("%d\n",SA[k]);
z=1;
printf("继续请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
}
break;
}
}
staticduichen(intn)
{
inti,j,k,z,g;
intL[100][100],SA[100];
printf("请输入您要压缩矩阵的行列数\n");
scanf("%d",&n);
printf("请输入您的矩阵内元素:
\n");
for(i=1;ifor(j=1;j{
scanf("%d",&L[i][j]);
if(i>=j)
k=i*(i-1)/2+j-1;
else
k=j*(j-1)/2+i-1;
SA[k]=L[i][j];
}
printf("您输入的矩阵为:
\n");
for(i=1;i{for(j=1;jprintf("%d",L[i][j]);
printf("\n");
}
printf("压缩存储后:
\n");
for(k=0;kprintf("%d%d\n",k,SA[k]);
printf("若要读取矩阵的值请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
for(g=0;g<1000;g++)
{
while(z==100)
{
printf("请您输入未压缩时所在行数:
\n");
scanf("%d",&i);
printf("请您输入未压缩时所在列数:
\n");
scanf("%d",&j);
if(i>=j)
k=i*(i-1)/2+j-1;
else
k=j*(j-1)/2+i-1;
printf("该地址的值为:
\n");
printf("%d\n",SA[k]);
z=1;
printf("继续请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
}
break;
}
}
staticxiasanjiao(intn)
{
inti,j,k,z,g;
intL[100][100],SA[100];
printf("请输入您要压缩矩阵的行列数\n");
scanf("%d",&n);
printf("请输入您的矩阵内元素:
\n");
for(i=1;ifor(j=1;j{
scanf("%d",&L[i][j]);
if(i>=j)
k=i*(i-1)/2+j-1;
else
k=n*(n+1)/2;
SA[k]=L[i][j];
}
printf("您输入的矩阵为:
\n");
for(i=1;i{for(j=1;jprintf("%d",L[i][j]);
printf("\n");
}
printf("压缩存储后:
\n");
for(k=0;kprintf("%d%d\n",k,SA[k]);
printf("若要读取矩阵的值请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
for(g=0;g<1000;g++)
{
while(z==100)
{
printf("请您输入未压缩时所在行数:
\n");
scanf("%d",&i);
printf("请您输入未压缩时所在列数:
\n");
scanf("%d",&j);
if(i>=j)
k=i*(i-1)/2+j-1;
else
k=n*(n+1)/2;
printf("该地址的值为:
\n");
printf("%d\n",SA[k]);
z=1;
printf("继续请输入'100'退出输入'000'。
\n");
scanf("%d",&z);
}
break;
}
}
intmain()
{
intn,d;
intm;
for(d=0;d<100;d++)
{
printf("请选择您要存储的特殊矩阵类型:
\n");
printf("1:
对称矩阵2:
上三角矩阵3:
下三角矩阵\n");
printf("退出请输入’101‘\n");
scanf("%d",&m);
if(m==1)
{duichen(n);}
elseif(m==2)
{shangsanjiao(n);}
elseif(m==3)
{xiasanjiao(n);}
elseif(m==101)
break;
else
printf("对不起您输入的选号错误。
\n");
}
}
三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。
)
经过一周的奋斗,这次数据结构的课程设计终于做完了。
通过这次设计我们也着实又感受了一次编程的乐趣,从中也学到了不少知识。
感受最深的一点是:
以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。
现在编程感觉完全不同了。
在编写一个程序之前,先对这个课程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了。
然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。
另外,我还体会到深刻理解数据结构的重要性。
只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。
在这次实验中我终于克服了这一障碍,一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊!
这次试验也让我看到了自己的不足,还是不太用模板类。
还有许多关于C语言的一些比较具体的东西还不太懂,需要进一步了解。
这次试验还让我意识到只有不断的在电脑上调试程序,自己的水平才能得到提高。
我会继续我们的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。
四、参考文献
[1] 李云清,杨庆红.数据结构(C语言版).北京:
人民邮电出版社,2004.
[2] 严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版.1997.
[3] 苏光奎,李春葆.数据结构导学.北京:
清华大学出版.2002.
[4] 周海英,马巧梅,靳雁霞.数据结构与算法设计.北京:
国防工业出版社,2007.
[5] 张海藩. 软件工程导论. 北京:
清华大学出版社.2003.
五、指导教师评语
签名:
年月日
课程设计成绩(五级分制)