特殊矩阵压缩与解压缩设计.docx

上传人:b****5 文档编号:11801887 上传时间:2023-04-02 格式:DOCX 页数:15 大小:245.96KB
下载 相关 举报
特殊矩阵压缩与解压缩设计.docx_第1页
第1页 / 共15页
特殊矩阵压缩与解压缩设计.docx_第2页
第2页 / 共15页
特殊矩阵压缩与解压缩设计.docx_第3页
第3页 / 共15页
特殊矩阵压缩与解压缩设计.docx_第4页
第4页 / 共15页
特殊矩阵压缩与解压缩设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

特殊矩阵压缩与解压缩设计.docx

《特殊矩阵压缩与解压缩设计.docx》由会员分享,可在线阅读,更多相关《特殊矩阵压缩与解压缩设计.docx(15页珍藏版)》请在冰豆网上搜索。

特殊矩阵压缩与解压缩设计.docx

特殊矩阵压缩与解压缩设计

 

课程名称:

《数据结构》课程设计

课程设计题目:

特殊矩阵压缩与解压缩设计

姓名:

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.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1