第4章数组 本章要点: 区数组的基本概念 区静态数组的定义和使用 区动态数组的定义和使用 区数组的应用
本章要点: 数组的基本概念 静态数组的定义和使用 动态数组的定义和使用 数组的应用 第4章 数 组
41静态数组 数组是相同类型的元素按一定顺序组成的序列。数组中的每一个元素 都可以通过数组名和惟一一个索引号来存取。在 Object Pascal中可以定 义数组元素个数一定的数组,即静态数组。根据静态数组的维数可以把 数组分为一维静态数组、二维静态数组和多维静态数组。 4.1.1定义 静态数组在程序初始化时必须分配内存单元,明确其固定的大小和 元素的数据类型。 1.一维静态数组 维静态数组类型声明格式为: ype =amay]of; 如定义一个数组类型 Type My Array=array[1.100]of Real 表示定义了一个有100个元素的数组类型,元素下标从1到100, 每个数组元素都是Rea类型,数组类型标识符为 MyArray Uprise Dephi
4.1 静态数组 数组是相同类型的元素按一定顺序组成的序列。数组中的每一个元素 都可以通过数组名和惟一一个索引号来存取。在Object Pascal中可以定 义数组元素个数一定的数组,即静态数组。根据静态数组的维数可以把 数组分为一维静态数组、二维静态数组和多维静态数组。 静态数组在程序初始化时必须分配内存单元,明确其固定的大小和 元素的数据类型。 4.1.1 定义 1. 一维静态数组 一维静态数组类型声明格式为: Type =array[]of ; 如定义一个数组类型: Type MyArray=array[1..100]of Real; 表示定义了一个有100个元素的数组类型,元素下标从1到100, 每个数组元素都是Real类型,数组类型标识符为MyArray
41.1定义(1) 顺序控制结构是计算杋按照语句的前后顺序依次执行的程序结构。在顺 序控制结构中,程序依次地经过输入、处理到最后的输出。 Delphi7.0提供 了基本的输入输岀控件(在第7章中将给予介绍)。对于顺序控制结构来说, 组成程序体主要语句就是赋值语句。接下来通过一个实例来说明顺序控制结 构的程序设计方法 【例3-1】大小写转换程序。 主要步骤 ⊙进入Deph70后在 standard标签页中找到相关组件,设计如图3-1窗体 及有关对象。 分别在窗体的建立、小写按钮单击和大写按钮单击事件中输入如下代 码。 InpriseaDephl
4.1.1 定义(1) 顺序控制结构是计算机按照语句的前后顺序依次执行的程序结构。在顺 序控制结构中,程序依次地经过输入、处理到最后的输出。Delphi 7.0提供 了基本的输入/输出控件(在第7章中将给予介绍)。对于顺序控制结构来说, 组成程序体主要语句就是赋值语句。接下来通过一个实例来说明顺序控制结 构的程序设计方法。 【例3-1】大小写转换程序。 1. 主要步骤 进入Delphi 7.0后在standard标签页中找到相关组件,设计如图3-1窗体 及有关对象。 分别在窗体的建立、小写按钮单击和大写按钮单击事件中输入如下代 码。 图3-1 大小写转换 程序
41.1定义(2) procedure TForm1. FormCreate(sender: TObject) begin edit1.Text:=";∥初始化文本框,使其为空 end procedure TForm1. Button1Click(Sender: Tobject var s: string; begin s: =edit Text edt1.Text:=| oWercase(S);∥转换成小写 end 数组类型标识符可以是任何合法的标识符。 object Pascal允许下标的 类型为整数类型、字符类型、布尔类型、子界类型、枚举类型等。而元素类 型可以为任意的数据类型,但在同一数组中,所有元素的数据类型必须相同 对于用户定义的数据类型作为下标类型,在使用之前必须声明。例如可以进 行如下定义: Inprise Dephi
4.1.1 定义(2) 数组类型标识符可以是任何合法的标识符。Object Pascal 允许下标的 类型为整数类型、字符类型、布尔类型、子界类型、枚举类型等。而元素类 型可以为任意的数据类型,但在同一数组中,所有元素的数据类型必须相同。 对于用户定义的数据类型作为下标类型,在使用之前必须声明。例如可以进 行如下定义: procedure TForm1.FormCreate(Sender: TObject); begin edit1.Text:=''; //初始化文本框,使其为空 end; procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:=edit1.Text; edit1.Text:=lowercase(s); // 转换成小写 end;
41.1定义(3) pe Color=(red, green, blue) Number=0. 100 My Array=Array[Color]of Integer Color Array=Array[Number]of Color 以上就定义了一个以 My Array为标识的数组类型,其元素下标分别为red、 green和bue,每个数组元素都是 INteger类型。 经过数组类型声明之后才可以定义数组变量。就像定义整型或实型变量一样, 通过变量说明语句定义变量,例如: var Array 1, Array2: MyArray 上面定义了两个数组变量Aray1和Aray2,它们的数据类型是 My Array; 也可以把数组类型的定义和数组变量的定义组合起来,以便简化代码,例如: var Array 1, Array2: Array [1.100]of real 要访问数组中的元素,可以用数组名加方括号,方括号内是元素的下标值 如Aray13]、Aray2[20]等。方括号内的下标值必须符合数组类型的定义, 其类型必须与下标类型一致,其值在下标取值范围。另外,下标可以是表达 式 Inprise Dephi
4.1.1 定义(3) Type Color=(red,green,blue); Number=0..100; MyArray=Array[Color] of Integer; ColorArray=Array[Number] of Color; 以上就定义了一个以MyArray为标识的数组类型,其元素下标分别为 red、 green和blue,每个数组元素都是Integer类型。 经过数组类型声明之后才可以定义数组变量。就像定义整型或实型变量一样, 通过变量说明语句定义变量,例如: var Array1,Array2:MyArray; 上面定义了两个数组变量Array1和Array2,它们的数据类型是MyArray; 也可以把数组类型的定义和数组变量的定义组合起来,以便简化代码,例如: var Array1,Array2:Array[1..100] of real; 要访问数组中的元素,可以用数组名加方括号,方括号内是元素的下标值, 如Array1[3] 、Array2[20]等。方括号内的下标值必须符合数组类型的定义, 其类型必须与下标类型一致,其值在下标取值范围。另外,下标可以是表达 式
41.1定义(5) 2High0和LoW(函数 Object Pascal的数组和其他语言的数组有一点不同,即数组不必以特定 的数为基准。例如可以从15开始声明一个具有3个元素的数组类型 Var A: Array[15.17]of Integer; Object Pascal的数组不一定从序号0或1开始的,因此在循环计算中需要 小心处理数组边界。系统提供了内建的Hgh和LowO)函数,这两个函数分 别返回数组变量或数组类型的上限值或下限值。建议使用LoWO和 Higho操 作数组,特别是在循环中,因为这样能使代码与数组范围无关,如果你改变 数组下标的范围声明,LowO和 Higho代码不会受影响。否则,如果代码中 有一个数组下标循环体,那么当数组大小改变时你就不得不更新循环体的代 码。因此在循环中用这两个函数做边界控制会使程序易于维护且不容易出错。 注意:使用标准函数LoWO和 HighO不会增加系统运行额外开销。因为在编译 时,它们已被转换成常数表达式,而不是实际函数调用,而函数 Lengthy 以返回数组的长度 Inprise Dephi
4.1.1 定义(5) 2. High()和Low()函数 Object Pascal的数组和其他语言的数组有一点不同,即数组不必以特定 的数为基准。例如可以从15开始声明一个具有3个元素的数组类型: Var A:Array[15..17] of Integer; Object Pascal的数组不一定从序号0或1开始的,因此在循环计算中需要 小心处理数组边界。系统提供了内建的High()和Low()函数,这两个函数分 别返回数组变量或数组类型的上限值或下限值。建议使用Low()和 High()操 作数组,特别是在循环中,因为这样能使代码与数组范围无关,如果你改变 数组下标的范围声明,Low()和 High()代码不会受影响。否则,如果代码中 有一个数组下标循环体,那么当数组大小改变时你就不得不更新循环体的代 码。因此在循环中用这两个函数做边界控制会使程序易于维护且不容易出错。 注意:使用标准函数Low()和High()不会增加系统运行额外开销。因为在编译 时,它们已被转换成常数表达式,而不是实际函数调用,而函数Length()可 以返回数组的长度
4.11定义(6) 见如下代码: var A array [15.17] of Integer; I :Integer; begin for i: =LOW(A)to High(a)do Ali: =i end 3.二维及多维静态数组 二维数组是指一个一维数组中的元素类型本身又是一个一维数组,声明 二维数组的一般形式为 ype =Aay,小f 例如: Type RealArray=Array[1.20,1.100]of Real; 以把二维数组看做是一个矩阵,其中下标1是行,下标2是列,这样要 Inprise Dephi
4.1.1 定义(6) 3. 二维及多维静态数组 二维数组是指一个一维数组中的元素类型本身又是一个一维数组,声明 二维数组的一般形式为: Type =Array[,]of ; 例如: Type RealArray=Array[1..20,1..100]of Real; 以把二维数组看做是一个矩阵,其中下标1是行,下标2是列,这样要 见如下代码: var A:array[15..17] of Integer; i:Integer; begin for i:=Low(A) to High(A) do A[i]:=i; end;
4.11定义(⑦7) 访问二维数组的元素可以写成aray1[2,3],即访问第2行第3列的 元素。对于多维数组可以使用循环语句给数组赋值,例如: var Col, Row: Integer for col =1 to 20 do for row =1 to 100 do RealArray[Col, RoW]: =0 多维静态数组的一般格式为: ype =Aay下标类型1,,…,下标类 型n>]of 般情况,用户的数组不超过三维数组,用到三维以上的很少,但 Object Pascal允许定义任意维数的数组。 静态数组通过下标类型、维数明确了数组的大小。动态数组使用时没有说 明数组的大小,只是在程序设计中为程序动态地开辟存储空间。 Inprise Dephi
4.1.1 定义(7) 多维静态数组的一般格式为: Type =Array[, ,… ,]of 一般情况,用户的数组不超过三维数组,用到三维以上的很少,但 Object Pascal允许定义任意维数的数组。 静态数组通过下标类型、维数明确了数组的大小。动态数组使用时没有说 明数组的大小,只是在程序设计中为程序动态地开辟存储空间。 访问二维数组的元素可以写成array1[2,3],即访问第2行第3列的 元素。对于多维数组可以使用循环语句给数组赋值,例如: var Col,Row : Integer; … for Col :=1 to 20 do for Row :=1 to 100 do RealArray[Col,Row]:=0; …
412应用(1) 接下来利用数组来解决排序的问题。 【例4-1】对20个数进行排序(由大到小)。 1.主要步骤 进入 Delphi7.0后,按图4-1设计窗体及有关对象 ③定义一个全局数组变量,语句为: var A: Array[1.20]of Integer; 分别在两个按钮的单击和窗体的建立事件中输入 如下代码: procedure THorn1. Button1cick( Sender;: Tobject);H)生随机数 Var i: Integer; S, t: String; 图4-1静态数 begin 组 Randomize: for i: =LOW(A)to High (a)do begin Inprise Dephi
4.1.2 应用(1) 接下来利用数组来解决排序的问题。 【例4-1】 对20个数进行排序(由大到小)。 1. 主要步骤 进入Delphi7.0后,按图4-1设计窗体及有关对象。 定义一个全局数组变量,语句为: var A:Array[1..20]of Integer; 图4-1 静态数 组 分别在两个按钮的单击和窗体的建立事件中输入 如下代码: procedure TForm1.Button1Click(Sender: TObject); //产生随机数 Var i:Integer; s,t:String; begin Randomize; s:=''; for i:=Low(A) to High(A) do begin
412应用(2) A[j:= random(50);∥产生一个大于等于0小于50的随机数 str(八[j,t);∥以字符类型赋给t s: =S+t+ ∥对t进行累加并且加空格 end label1 Caption:=s;∥显示 button2Enab|ed:true;∥)许进行排序 end: procedure TForm1 Button2cick( Sender: TObject;∥排序 var i,j, temp integer; s, t: String begin for i: =LOW (A) to High(a)do for j: =1+1 to High (A)do if (AU<ArD then Inprise Dephi
4.1.2 应用(2) procedure TForm1.Button2Click(Sender: TObject); //排序 var i,j,temp:integer; s,t:String; begin for i:=Low(A) to High(A) do for j:=i+1 to High(A) do if (A[i]<A[j]) then A[i]:=random(50); //产生一个大于等于0小于50的随机数 str(A[i],t); //以字符类型赋给t s:=s+t+' '; //s对t进行累加并且加空格 end; label1.Caption:=s; //显示 button2.Enabled:=true;//允许进行排序 end;