文档详情

第四章高级数据类型.ppt

发布:2020-02-26约8.67千字共55页下载文档
文本预览下载声明
动态数组 动态数组不必定义数组的长度,而在程序中动态地分配数组的存储空间,以便更灵活地使用数组的特性。 一维动态数组 声明格式: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、开域引用: 开域语句一般形
显示全部
相似文档