5.静态数组
数组类型是具有相同类型的元素按一定的顺序组成的序列。数组中数据元素被顺序安排在内存中一段连续的区域,可以通过数组名来访问。在Object Pascal中数组分为静态数组和动态数组。
静态数组在程序初始化时必须分配内存单元,明确数组的大小和元素的数据类型。而动态数组在定义和声明时只指定数组的类型,而不指定数组的大小,在程序运行时动态地开辟内存空间。
本节我们介绍静态数组的使用。
5.1一维数组的定义
数组通常分为一维、二维和多维数组。一维数组的定义格式:
type <数组类型名> = array[<下标类型>] of <基类型>;
如:
type One2TenArray = array[1..10] of Integer;
上面的语句定义了One2TenArray数组类型,其元素下标从1到10,每个元素的类型为整型。
在Object Pascal中:
-
下标类型允许为整数类型、字符类型、布尔类型、子界类型、枚举类型。元素的类型可以为任意数据类型。
-
在同一个数组中,所有元素类型必须相同
-
如果使用自定义数据类型作为下标类型,在使用前必须声明
举例如下:
type Color = (red, green, blue, yellow, black, white); Ten = 0..10; ColorArray = array[Color] of integer; TenArray = array[Ten] of Color;
5.2一维数组变量的声明
数组变量的声明与其他变量的声明相同,如:
var a1, a2: ColorArray; c1, c2: TenArray;
也可以直接声明,如:
var a1, a2: array[0..10] of Real; sa: array[Boolean] of String;
5.3数组元素的访问
使用数组名加方括号,方括号中是数组元素的下标值来访问。如:
a1[3] sa[True]
在Object Pascal中:
-
下标值必须符合数组类型在下标类型的定义,其类型必须与下标类型一致,其值在下标取值范围内
-
下标也可以是表达式
5.4标准数组函数
在Object Pascal中,标准函数Low和High,可以返回数组的最小下标值和最大下标值;Length函数可以返回数组的长度。
一维数组的应用示例:产生10个随机数,计算10个随机数的最大值、最小值、和、平均数。界面如下图:
代码如下:
procedure TForm1.Button1Click(Sender: TObject); var a: array[1..10] of integer; i, sum, max, min: integer; mean: Real; begin // 计算按钮单击事件 for i := 1 to 10 do begin randomize; a[i] := random(i * 100); Memo1.Lines.Add(IntToStr(a[i])) end; sum := 0; max := a[1]; min := a[1]; for i := 1 to 10 do begin sum := sum + a[i]; if a[i] > max then max := a[i]; if a[i] < min then min := a[i]; end; mean := sum / Length(a); Edit1.Text := IntToStr(sum); Edit2.Text := FloatToStr(mean); Edit3.Text := IntToStr(max); Edit4.Text := IntToStr(min); end; procedure TForm1.Button2Click(Sender: TObject); begin // 清除按钮单击事件 Memo1.Lines.Clear; Edit1.Text := ''; Edit2.Text := ''; Edit3.Text := ''; Edit4.Text := ''; end;
5.5二维静态数组
二维静态数组是指一个数组中的元素又是一个一维数组,定义格式:
type <数组类型名> = array[<下标类型1>] of array[<下标类型2>] of <基类型>;
也可以采用如下格式:
type <数组类型名> = array[<下标类型1, 下标类型2>] of <基类型>;
如:
type TIArr = array[1..10] of array[1..10] of integer; TDoubleArr = array[1..10, 1..10] of Real; var i1: TIarr; d1: TDoubleArr; m1: array [1..5,1..10] of real;
示例:输出九九乘法表,界面如下图:
代码如下:
procedure TForm1.Button1Click(Sender: TObject); const SPACE8 = ' '; SPACE10 = ' '; var a: array [1..9] of array [1..9] of integer; i, j: integer; s: string; begin for i := 1 to 9 do for j := 1 to 9 do a[i,j] := 0; for i := 1 to 9 do for j := 1 to i do a[i,j] := i * j; s := SPACE10; for i := 1 to 9 do s := s + inttostr(i) + SPACE10; Memo1.Lines.Add(s); s := ''; for i := 1 to 9 do begin s := s + inttostr(i) + SPACE8; for j := 1 to i do begin if a[i,j] = 0 then continue; if a[i,j] < 10 then s := s + ' ' + inttostr(a[i,j]) + SPACE8 else s := s + inttostr(a[i,j]) + SPACE8; end; Memo1.Lines.Add(s); s := ''; end; end;
5.6多维静态数组
多维静态数组的一般定义格式:
type <数组类型名> = array[<下标类型1, 下标类型2, ..., 下标类型n>] of <基类型>;
如:
type TW3 = array of [1..10, 1..10, 1..10] of integer; var a: TW3