特殊矩阵压缩与解压缩设计.docx
- 文档编号:11801887
- 上传时间:2023-04-02
- 格式:DOCX
- 页数:15
- 大小:245.96KB
特殊矩阵压缩与解压缩设计.docx
《特殊矩阵压缩与解压缩设计.docx》由会员分享,可在线阅读,更多相关《特殊矩阵压缩与解压缩设计.docx(15页珍藏版)》请在冰豆网上搜索。
特殊矩阵压缩与解压缩设计
课程名称:
《数据结构》课程设计
课程设计题目:
特殊矩阵压缩与解压缩设计
姓名:
XXX
院系:
计算机学院
专业:
10级计算机科学技术
学号:
XXXXXXXXX
指导教师:
XXX
2012年9月21日
目录
1课程设计的目的………………………………………………………3
2需求分析………………………………………………………………3
3课程设计报告内容…………………………………………………3
3.1概要设计………………………………………………………3
3.2详细设计………………………………………………………4
3.3调试分析………………………………………………………4
3.4用户手册………………………………………………………4
3.5程序清单………………………………………………………5
3.6测试结果………………………………………………………9
4小结…………………………………………………………………15
5参考文献……………………………………………………………15
1.课程设计的目的
(1)熟练使用C语言编写程序,解决实际问题;
(2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(3)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
2.需求分析
本系统主要实现对特殊矩阵的压缩与解压缩处理,特殊矩阵包括:
对称矩阵、上三角矩阵、下三角矩阵、带状矩阵。
3.课程设计报告内容
3.1概要设计
1.函数
①主函数:
main()
②矩阵的输出函数:
Print()
③对称矩阵的压缩与解压缩函数:
DuiMatrix()
④上三角矩阵的压缩与解压缩函数:
ShangMatrix()
⑤下三角矩阵的压缩与解压缩函数:
XiaMatrix()
⑥带状矩阵的压缩与解压缩函数:
DaiMatrix()
3.2详细设计
以对称矩阵为例:
对称矩阵的特点是:
aij=aji,即元素关于主对角线对称,因此只需存储上三角或下三角部分即可。
这样,原来需要n*n个存储单元,现在只需要n(n+1)/2个存储单元。
对下三角部分以行为主序顺序存储到一个一维数组中,在下三角中共有n*(n+1)/2个元素,因此,存储到数组a[n(n+1)/2]中,k=i*(i-1)/2+j-1,若i 3.3调试分析 程序的设计严格遵循模块化的程序设计思想,由简单到复杂,注意规范。 3.4用户手册 用户在使用程序时应按照提示执行,步骤如下: ①进入系统后,您将看到提示: “请选择您要生成的矩阵类型: ” “1.对称矩阵! ” “2.上三角矩阵! ” “3.下三角矩阵! ” “4.带状矩阵! ” “输入其他键退出系统! ” ②选择1号功能键: 输入一个n阶对称矩阵,系统会先进行压缩操作,将此矩阵压缩到一个一维数组,然后再由此数组进行解压缩操作。 ③选择2号功能键: 输入一个n阶上三角矩阵,系统会先进行压缩操作,将此矩阵压缩到一个一维数组,然后再由此数组进行解压缩操作。 ④选择3号功能键: 输入一个n阶下三角矩阵,系统会先进行压缩操作,将此矩阵压缩到一个一维数组,然后再由此数组进行解压缩操作。 ⑤选择4号功能键: 输入一个n阶带状矩阵,系统会先进行压缩操作,将此矩阵压缩到一个一维数组,然后再由此数组进行解压缩操作。 ⑥输入其他键系统退出系统。 3.5程序清单 #include #defineMAX100 intM[MAX][MAX],a[MAX]; voidPrint(intn) { inti,j; printf("生成的矩阵如下: \n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%-3d",M[i][j]); printf("\n"); } } voidDuiMatrix() { inti,j,k,n; printf("请输入您要压缩矩阵的维数: \n"); scanf("%d",&n); printf("请依次输入矩阵的元素: \n"); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&M[i][j]); if(i>=j) k=i*(i-1)/2+j-1; else k=j*(j-1)/2+i-1; a[k]=M[i][j]; } Print(n); printf("此对称矩阵压缩存储生成的一维数组如下: \n"); for(k=0;k printf("a[%d]=%-3d\n",k,a[k]); printf("元素的解压操作如下: \n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i>=j) k=i*(i-1)/2+j-1; else k=j*(j-1)/2+i-1; printf("T[%d][%d]=%-3d",i,j,a[k]); } printf("\n"); } } voidShangMatrix() { inti,j,k,n; printf("请输入您要压缩矩阵的维数: \n"); scanf("%d",&n); printf("请依次输入矩阵的元素: \n"); for(i=1;i for(j=1;j { scanf("%d",&M[i][j]); if(i<=j) k=j*(j-1)/2+i-1; else k=n*(n+1)/2; a[k]=M[i][j]; } Print(n); printf("此上三角矩阵压缩存储生成的一维数组如下: \n"); for(k=0;k printf("a[%d]=%-3d\n",k,a[k]); printf("元素的解压操作如下: \n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i<=j) k=j*(j-1)/2+i-1; else k=n*(n+1)/2; printf("T[%d][%d]=%-3d",i,j,a[k]); } printf("\n"); } } voidXiaMatrix() { inti,j,k,n; printf("请输入您要压缩矩阵的维数: \n"); scanf("%d",&n); printf("请依次输入矩阵的元素: \n"); for(i=1;i for(j=1;j { scanf("%d",&M[i][j]); if(i>=j) k=i*(i-1)/2+j-1; else k=n*(n+1)/2; a[k]=M[i][j]; } Print(n); printf("此下三角矩阵压缩存储生成的一维数组如下: \n"); for(k=0;k printf("a[%d]=%-3d\n",k,a[k]); printf("元素的解压操作如下: \n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i>=j) k=i*(i-1)/2+j-1; else k=n*(n+1)/2; printf("T[%d][%d]=%-3d",i,j,a[k]); } printf("\n"); } } voidDaiMatrix() { inti,j,k=0,n,m; intb[MAX],c[MAX],T[MAX][MAX]; for(i=1;i<=n;i++) for(j=1;j<=n;j++) T[i][j]=0; printf("请输入您要压缩矩阵的维数: \n"); scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) T[i][j]=0; printf("请依次输入矩阵的元素: \n"); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&M[i][j]); if(M[i][j]! =0) { a[k]=M[i][j]; b[k]=i; c[k]=j; k++; } } m=k; Print(n); printf("此带状矩阵压缩存储生成的一维数组如下: \n"); for(k=0;k printf("a[%d]=%-3d\n",k,a[k]); printf("元素的解压操作如下: \n"); for(k=0;k { i=b[k]; j=c[k]; T[i][j]=a[k]; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("T[%d][%d]=%-3d",i,j,T[i][j]); printf("\n"); } } intmain() { intn; while (1) { printf("请选择您要生成的矩阵类型: \n\n"); printf("1.对称矩阵! \n"); printf("2.上三角矩阵! \n"); printf("3.下三角矩阵! \n"); printf("4.带状矩阵! \n"); printf("\n输入其他键退出系统! \n"); scanf("%d",&n); if(n==1) DuiMatrix(); elseif(n==2) ShangMatrix(); elseif(n==3) XiaMatrix(); elseif(n==4) DaiMatrix(); else {printf("成功退出系统! \n");break;} } return0; } 3.6测试结果 测试数据如下: 对称矩阵: 1234 2567 3688 47810 上三角矩阵: 12345 16789 10101112 1001314 000015 下三角矩阵: 10000 23000 45600 789100 1112131415 带状矩阵: 12000 34500 06780 009100 000011 ①程序开始界面。 ②输入数字键1,生成一个4阶对称矩阵,先进行压缩操作,再进行解压缩操作。 ③输入数字键2,生成一个5阶上三角矩阵,先进行压缩操作,再进行解压缩操作。 ④输入数字键3,生成一个5阶下三角矩阵,先进行压缩操作,再进行解压缩操作。 ⑤输入数字键4,生成一个5阶带状矩阵,先进行压缩操作,再进行解压缩操作。 ⑥输入其他键,退出系统。 。 4.小结 在数据结构课程设计的过程中,我不仅认识到了学好解理论知识的必要性,更认识到了上机操作的重要性。 上机操作能过培养我们解决实际问题的能力,通过对上机操作遇到的各种问题的解决,自己感到一丝成功的同时,更下决心努力学好专业课,为以后的学习及实践打下好的基础。 5.参考文献 ①严蔚敏,吴伟民编著.数据结构(C语言版)--北京: 清华大学出版社,2007.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 特殊 矩阵 压缩 解压缩 设计