欢迎来到天天文库
浏览记录
ID:60811026
大小:52.38 KB
页数:7页
时间:2020-12-20
《二维数组的压缩存储矩阵.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构实验报告评分满分——5分学号:姓名:许明华专业:计算机科学与技术知识范畴:数组与广义表完成日期:2017年04月21日实验题目:基于压缩存储的半三角矩阵乘法运算的实现实验内容及要求:已知两个n阶下半三角矩阵的乘积仍为n阶下半三角矩阵。编程输入两个n阶下半三角矩阵,输出这两个矩阵的乘积。要求n阶下半三角矩阵采用一维数组压缩存储(即只存储下半三角)。程序先从键盘(或字符文件)输入n值,建立三个矩阵的一维数组动态存储结构,然后从键盘(或字符文件)输入两个半三角矩阵,最后输出计算结果到屏幕上(或另一个字符文件中)。例如:键盘输
2、入为:3123456-1-2-3-4-5-6则输出为:-1-8-9-38-45-36实验目的:掌握半三角矩阵的顺序存储结构。数据结构设计简要描述:序言:这是本学期第五个实验,本实验是要求我们将两个二维半三角矩阵压缩存储为一维矩阵,并对其进行乘法操作,得到一个一维的压缩存储矩阵,并将其打印输出;数据结构简单设计:本实验主要可分为两个大的模块(压缩存储矩阵、压缩矩阵相乘)。第一,我们通过键盘键入一个数组的阶数,然后输入两个半三角矩阵,,但是这两个半三角矩阵要进行压缩存储为一维矩阵,关键操作即(m=(i*(i+1))/2+j),即可
3、将二维下标转化为一维下标;第二,运用公式来进行相乘操作,求得两个下三角矩阵的乘积。算法设计简要描述:1,通过(m=(i*(i+1))/2+j)将二维下标转化为一维下标进行输入,得到压缩存储矩阵;2,运用公式进行乘积操作,但是乘数矩阵下标和结果矩阵的下标并没有同步,所以运用三个公式来进行分离操作,m1=(i*(i+1))/2+k;m2=(k*(k+1))/2+j;m=(i*(i+1))/2+j;c[m]+=a[m1]*b[m2];这样即能实现相乘的操作,但是每一次的c[m]没有进行初始化,所以在每一次得到m值后,进行操作c[m]
4、=0;输入/输出设计简要描述:输入:1,输入下三角存储矩阵的阶数n;2,输入第一个下三角矩阵,如123456;3,输入第二个下三角矩阵,如-1-2-3-4-5-6;输出:1,输入2操作后,按存储矩阵格式输出打印第一个下三角矩阵;2,输入3操作后,按存储矩阵格式输出打印第二个下三角矩阵,并输出打印两个矩阵的乘积矩阵编程语言说明:1,编程软件,CodeBlocks16.0;1,代码均用C语言实现;2,输入输出采用C语言的printf和scanf函数;3,程序注释采用C/C++规范;主要函数说明:voidinput_Arr(int,
5、int);//输入半三角矩阵声明voidprint(int,int);//输出打印半三角矩阵声明intprint_Array(int,int,int,int);//两个半三角矩阵的乘法运算声明程序测试简要报告:见截图:源程序代码:#include//函数声明部分voidinput_Arr(int,int);//输入半三角矩阵声明voidprint(int,int);//输出打印半三角矩阵声明intprint_Array(int,int,int,int);//两个半三角矩阵的乘法运算声明//输入半三角矩阵voi
6、dinput_Arr(inta[],intn){intm;printf("请输入数组:");for(inti=0;i7、标scanf("%d",&a[m]);//输入对应的下三角矩阵}}}//输出打印半三角矩阵voidprint(inta[],intn){intm=0;for(inti=0;i8、过程的中间变量,m为乘积过后的一维压缩数组的下标,m1为第一个数组的压缩存储的下标,m2为第二个数组的压缩存储的下标for(i=0;i
7、标scanf("%d",&a[m]);//输入对应的下三角矩阵}}}//输出打印半三角矩阵voidprint(inta[],intn){intm=0;for(inti=0;i8、过程的中间变量,m为乘积过后的一维压缩数组的下标,m1为第一个数组的压缩存储的下标,m2为第二个数组的压缩存储的下标for(i=0;i
8、过程的中间变量,m为乘积过后的一维压缩数组的下标,m1为第一个数组的压缩存储的下标,m2为第二个数组的压缩存储的下标for(i=0;i
此文档下载收益归作者所有