1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY数据结构实 验 报 告实验项目 实验四 实验类别 基础篇学生姓名 学生学号完成日期 2016-11-8指导教师 袁科实验成绩 评阅日期评阅教师实验四 二维数组基本操作的编程实现【实验目的】二维数组基本操作的编程实现要求:二维数组基本操作的编程实现(2学时,验证型),掌握数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。【实验性质】验证性实验(学时数:2H)【实验内容】设计一个可容纳40位数的求n!的程序。设计一
2、个将稀疏数组压缩的程序。【实验分析、说明过程】 此次实验是要求设计一个可以存储 40 位数的求 n 的阶乘的程序。利用数组来数据类型的有限使用范围。已下将用图示来说明实验原理与过程。按照要求我们将会实现一个 34!步骤过程。数组最大值 data341!=1数组值 data1=12!=2*1=2按照此形式以此类推,但要注意的是当数组的值 data1的值大于或等于 10 的时候,必须得进一位,简单来说也就是每一个储存单元只储存一个一位数,逢十进一。举例来说当 data1=10,data2=data2+data1/10.前一位的值等于= 前一位的值+此数位的值除以 10.前一位的数值=前一位的值对
3、10 取余。data1=data1%10.然后位数要加一。也就是 Digit+。注意前面的条件判断语句“当数组中的值大于 10 时,则位数加一”此处应该是 if(DataDigit=10)。关键注意此处的下标是 Digit.而不是 r 或者 j.运行结果:34 . 2 10 0 134 2 10 . 0 2【思考问题】1、 数组的下标从什么地址开始?好处是什么?答:数组下标都是从0开始的,每个人的编译器不同系统分配的地址自然不同。好处是拥有从0开始的下标可以使编译器简化一点.而且,这样也可以使得数组下标运算的速度有少量的提高2、压缩数据主要的思路是什么?答:压 缩 数 据 主 要 思 路 是
4、将 多 个 值 相 同 的 元 只 分 配 一 个 存 储 空 间 , 对 于 零 元 不 分 配 空 间 。3、为什么用数组可以存储超出计算机数据要求的范围的数字?答:因为其可以采用压缩存储的方式,数组中可以对大量特殊矩阵进行压缩处理,从而可以节省大量空间。4、 举出几个数组的应用范例?答:数组对稀疏矩阵的压缩存储,对矩阵的转置处理。简单的数据存储,比如说学号存储,人数存储。【实验小结】 (总结本次实验的重难点及心得、体会、收获)此次实验我做的是基础篇,通过此次实验的我对数组的运用更加透彻了。但更深层次的理解还是不够。此次实验根据代码后面的提示我还是能够将里面的语句给写出来,不过开始写的时候
5、由于对原代码的理解不够透彻,结果一直在运行到 12!的时候一直出错,一直不知道为什么,后来在老师的提示下,我知道原来是最开始的判断语句写错了。其中if(DdtaDigit=10),其中的下标出错,导致程序出错,但现在我明白了。【附录-实验代码】#includevoid main()int Data100; /*存储 40 位数的整数数组*/int Digit; /*数据位数变量 */int i,j,r,k; /*循环计数变量 */int N; /*用户输入值 */for(i=0;i=10)for(r=1;r=10) Digit+; /*当数组中的值大于 10 时,则位数加1*/Datar+1=Datar+1+Datar/10; Datar=Datar%10; /*前一位数组值前一位数组值此位数组值除以 10*/*此位数组值此位数组值除 10 取余数*/printf(“%d!=“,i);for(k=Digit;k0;k-) /*输出数组中的内容*/printf(“%d“,Datak);printf(“n“);