第四章高级数据类型.ppt
文本预览下载声明
动态数组 动态数组不必定义数组的长度,而在程序中动态地分配数组的存储空间,以便更灵活地使用数组的特性。 一维动态数组 声明格式:type 类型标识符=array of 元素类型; 如:?? type data=array of integer; var bank:data; 可见定义时不必声明数组的长度,但在程序中使用动态数组之前,需要调用SetLength过程指定:SetLength(数组变量名,数组元素个数),如SetLength(bank,30) 最需要注意的一点是,动态数组是一个零基准数组,第一个元素的下标应该为0。 多维动态数组 声明格式: type 类型标识符=array of array of… array of 元素类型; 如:type score= array of array of integer; var fs:score; begin setlenght(fs,4,7); … end; 动态数组还允许对每行单独设置长度,即每行的长度可以不等,这也是静态数组做不到的。 如: setlenght(fs,4); setlenght(fs[0],4); setlenght(fs[1],3); setlenght(fs[2],10); 数组 例:改写教材例题,使之显示九九乘法表。 记录类型 在delphi编程中对于组织和处理成批的数据来说,数组是一种十分方便、灵活的数据类型,但数组在使用中有一个基本限制,这就是一个数组中的所有元素都必须具有相同的类型。但在实际问题中可能会遇到另一类数据,它是由性质各不相同的成份组成的,即它的各个成份可能具有不同的类型。例如,有关一个学生的数据包含下列项目: 学号 字符串类型 姓名 字符串类型 年龄 整型 性别 字符型 成绩 实型数 Pascal给我们提供了一种叫做记录的结构类型。在一个记录中,可以包含不同类型的并且互相相关的一些数据。 记录类型的定义 记录由一组称为“域”的分量组成,每个域可以具有不同的类型。 记录类型定义的一般形式: ? type 类型标识符=record ????域名1:类型1; ????域名2:类型2; ????? : : ????? : : ? 域名n:类型n; ? end; 以上学生的数据可定义为: type studata=record num? : string[6]; name : string[8]; age? : 10..25; sex? : char; chinese:real; maths:real; english:real; end; 注意: 1、域名也称域变量标识符。在同一个记录类型中,不能有相同的域名,但在不同的记录类型中可以有相同的域名(访问时须在域名前冠以记录变量名)。 2、各个域的类型可以是简单的数据类型,也可以是数组等构造类型。 如:在定义学生记录前先定义一个数组类型来存放成绩: s:array[1..3] of real; 用s[1]、s[2]、s[3]存放一个学生的chinese、maths 、english成绩。 记录 记录类型的定义和变量可合并定义,如: type date=record year:1900..1999; month:1..12; day:1..31 end; var x:date; 可以合并成: var x: record year:1900..1999; month:1..12; day:1..31 end; 不过由于记录类型的描述稍复杂,建议分开声明。 记录 记录域的访问 记录域的访问有两种方法:直接引用和开域引用。 1、直接引用方式为: ?记录变量名.域名 如前面定义的记录X,其3个分量分别为:x.year ,x.month ,x.day。对域变量的赋值可以用read语句或赋值语句: read(x.year,x.month,x.day); x.year:=2003; x.month:=12; x.day:=18; 如域类型是数组类型,则引用方式为:? 记录变量名.数组名[i]? for i:=1 to 3 do?? read(studata.s[i]); 记录域可进行其基类型的各种运算,但记录作为一个整体,只有赋值这一个运算,即把一个记录整体赋给另一个类型一致的记录。 如:var jsj1,jsj2:student; jsj2:=jsj1; //把jsj1中的记录值赋给jsj2 2、开域引用: 开域语句一般形
显示全部