数组与记录类型.ppt

上传人:牧羊曲112 文档编号:6365044 上传时间:2023-10-21 格式:PPT 页数:35 大小:310KB
返回 下载 相关 举报
数组与记录类型.ppt_第1页
第1页 / 共35页
数组与记录类型.ppt_第2页
第2页 / 共35页
数组与记录类型.ppt_第3页
第3页 / 共35页
数组与记录类型.ppt_第4页
第4页 / 共35页
数组与记录类型.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《数组与记录类型.ppt》由会员分享,可在线阅读,更多相关《数组与记录类型.ppt(35页珍藏版)》请在三一办公上搜索。

1、第4章 数组与记录类型,上章回顾:理解顺序结构、选择结构和循环结构程序设计的思想 理解双分支语句和多分支语句的含义 掌握利用双分支语句和多分支语句设计分支程序的方法 理解循环的概念 掌握循环程序设计的方法以及常用的算法,如累加求和、穷举法等,本章要点:理解数组的概念,含义与定义方法 掌握引用数组元素的方法 理解记录的概念,含义与定义方法 掌握使用记录常用方法,4.1 循序渐进学理论,4.1.1 数组的定义及使用 数组是一些具有相同类型的元素按一定顺序组成的序列。其中每个元素由其对应的位置来指定,这个位置就是数组的索引号(又称下标),数组元素与索引号是一一对应的,用户可以通过这个索引号来存取数组

2、的每个元素。数组中的各元素是顺序地安排在内存中一段连续的存储空间中。按照数组在定义时是否确定了元素个数可以将数组分为静态数组和动态数组。,1 数组的定义,在Delphi 5/6版本中的Object Pascal引入了动态数组,数组的内存分配不再局限于静态的,可以采用动态方式为数组分配内存区。因此,数组可分为静态数组和动态数组两种类型。,(1)静态数组,静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。一维静态数组 数组通常可分为一维、二维和多维数组,在Object Pascal中,定义一个一维 数组类型,其声明格式为:Type数组类型标识符array下标类型 of 基类

3、型;例如:(1)Type myarry=array1100 of real;(2)Type mcolor=(red,green,blue);Type mint=050;myarry=arraymcolor of integer;test1=arraymintof mcolor数组变量:array1,array2:myarray;tcolor:test1;,注意事项:数组类型和数组变量:程序不能直接使用类型,可以使用变量;定义时可以二合一;var ayyay1,array2:array0100 of real;访问数组元素,通过数组名加方括号,括号内为数组下标值,下标值符合取值范围,下标可以为表

4、达式;标准函数Low和High可以返回数组的最小和最大下标值,Length可以返回数组的长度;数组赋初值通常通过循环;,二维静态数组 二维数组是指一个一维数组中的元素类型本身又是一个一维数组。其一般形式为;Type数组标识符=Array下标类型1 of Array下标类型2 of 元素类型;理解为每行就是一个元素,即又是一个一维数组的递归定义;也可以把上述形式简写成下面的形式:Type数组标识符=Array下标类型1,下标类型2 of 元素类型;通常使用第二种方式的定义;例如:Type tp=array15of array110of real;tmax=array15,120 of integ

5、er;VarTr1:tp;tr2:tmax;array1:15,18of integer;二维数组赋初值通常采用二重循环;,多维静态数组多维静态数组的一般格式为:Type数组类型标识符array下标类型1,下标类型2,下标类型n of 基类型;TypeTest1=array1.10,1.10,1.30 of integer;VarMyarray:array0.5,0.6,0.8 of real;,使用静态数组的注意事项零基准数组。所谓零基准数组,就是下标从零开始的数组,例 如:array 0.5 of char数组的整体赋值。假设有两个数组array1和array2,其变量定义如下:Var a

6、rray1,array2:1.10 of char;如果要把array2中每一个元素的值相应赋值给 array1中的元素,一般是使用For语句,例如:For I:=1To 10 Do array1i:=array2i;,把数组作为过程或函数的形参。Procedure My Proc(var Array1:Array1.10 of Integer);BeganEnd;上述程序中,数组的定义和传递并在一起进行,并且Array1是作为变量参数实现地址传递。另外,数组也可以作为函数的返回类型。开放式数组 数组作为形参传递给过程或函数是,长度可以不确定,可以传递不同长度的数组作为实数;例如:定义两个长度

7、不同的数组Var x1:array110 of real;Var x2:array38 of real;Procedure myproc(x:array of real)Beginend;Begin Myproc(x1);Myproc(x2);End;开放数组是零基准数组,因此数据和下标可能不相符 开放数组可以作为数值参数,变量参数,常量参数实现传递也可以直接使用Myproc(1,2,3,4);Myproc(1,2,3.4.5.6),【例4-1】利用数组求出任意10个数中的最大及最小值。如程序所示【例4-2】利用二维数组建立一个88的方阵,该矩阵对角线元素为8,其余元素为1,结果显示在列表组件

8、ListBox1中。如程序所示,静态数组典型应用,procedure TForm1.Button1Click(Sender:TObject);vari,ma,mi:integer;a:array1.10 of integer;beginfor i:=1 to 10 dobeginrandomize;/初始化随机函数ai:=random(i*100);/产生10个随机数edit1.text:=edit1.text+inttostr(ai)+end;ma:=a1;mi:=a1;for i:=2 to 10 dobeginif ma=ai then mi:=aiend;edit2.text:=int

9、tostr(ma);/输出最大值edit3.text:=inttostr(mi);/输出最小值end;,procedure TForm1.FormCreate(Sender:TObject);vara:array1.8,1.8 of integer;i,j:integer;st:string;begin for i:=1 to 8 do for j:=1 to 8 do if(i=j)or(i=9-j)then ai,j:=8 else ai,j:=1;for i:=1 to 8 do begin st:=;/每一行初始化为空;for j:=1 to 8 do st:=st+inttostr(

10、ai,j)+;listbox1.items.Add(st)EndEnd,(2)动态数组,一维动态数组一维动态数组的声明格式为:Type数组类型标识符array of 基类型;也可在变量声明中直接声明动态数组,其格式为:Var变量名:array of 基类型;注意事项:动态数组没有给定数组的下标类型,具有不确定的大小;动态数组的大小通过调用过程setlength来确定;例如:Var myarray:array of integer;Begin setlength(myarray,10);end;,多维动态数组Type数组类型标识符array of array of array of 基类型;Va

11、r 变量名:动态数组类型标识符;或 Var 动态数组变量名:array of array of array of 基类型;例如,如下声明了一个二维动态数组变量Type TMessageGrid=array of array of stringVar MsGS:TMessageGrid;Delphi支持创建行的长度不等的动态数组例如:Var myarray1:array of array of string;Var myarray2:array of array of string;/方法一 set length(myarray1,2,3);下标从0开始/方法二 set length(myarr

12、ay2,2);/设定动态数组为2行,列未定 setlength(myarray20,2);/0行为2列 setlength(myarray21,3);/1行为3列所有元素为:myarray20,0,myarray20,1,myarray21,1,myarray21,1,myarray21,2,【例4-3】创建一个三角形的矩阵,并在一个ListBox列表框中显示出来。如程序所示,动态数组典型应用,procedure TForm1.Button1Click(Sender:TObject);Var A:array of array of string;I,J:Integer;Tempstr:stri

13、ng;Begin ListBox1.Clear;SetLength(A,10);For I:=Low(A)to High(A)do Begin SetLength(AI,I);For J:=Low(AI)to High(AI)do Begin AI,J:=IntToStr(J+1)+;if I0 then tempstr:=tempstr+AI,J;end;if I0 then begin ListBox1.Items.Add(tempstr);Tempstr:=;End;End;End;,Object Pascal的记录类型跟数据库中的记录概念很相似,记录类型中的元素可以理解为数据库中的字段

14、。事实上,Object Pascal正式借用了数据库中的记录和字段的概念。,的定义及使用,1 记录类型的定义,(1)声明一个记录类型的一般格式为:Type记录类型标识符=Record 域名表1:类型1;域名表2:类型2;域名表n:类型n;End;例如:Type TEmployee=record Name:string20;YearHired:1990.2000;Salsry:Double;Position:string20;end;注意事项:标识符符合命名规则;记录类型标识符可以和域名标识符重名;域名标识符之间不允许重名;记录类型不能直接使用,使用之前,声明记录类型变量;,(2)访问记录域与W

15、ith语句,在程序设计中,记录类型经过声明并建立实例之后就可以使用了。使用记录类型实际上是对记录的字段进行访问,由于记录类型中元素的类型不同,因此不能像使用数组一样使用下标。访问记录域的方法有两种:限定访问记录字段和使用With语句。,限定访问记录中的字段在Object Pascal中,限定访问记录中某个字段的格式:记录变量名.字段名;Type TEmployee=record Name:string20;YearHired:1990.2000;Salary:Double;Position:string20;end;Var newem1,newem2:TEmployee访问记录字段:单个字段赋

16、值:newem1.Salary:=1000;所有字段赋值:begin newem1.name:=张三;newem1.yearhired:=1993;newem1.salary:=2000.00;newem1.position:=主管;,记录的整体赋值。尽管记录中的每一个字段可以进行各种合法的运算,但记录作为一个整体,只能进行赋值运算,即把一个记录整体赋给另一个类型一致的记录。例如:VarCust1,Cust2:Customer;Cust1:=Cust2;赋值号右边的记录变量必须是有值的,所谓有值是指记录的每个字段都赋值。,记录与数组。记录与数组的相同点是:两者都是构造类型,是多个相关数据的集合

17、,都可以整体赋值。记录如数组的不同点是:1)数组中元素的类型是相同的,而记录中的字段可以是不同类型。2)数组中元素的个数在一定范围内是可变的,而记录中字段的数量是固定的。3)数组的元素是通过数组变量名加方括号和下标来访问的,而记录中的字段是通过记录变量名加一个小圆点和字段名来访问的。,使用With语句Object Pascal提供了一个With语句,其格式是:With 记录变量名 Do 语句With Cust1 DoBeginCustid:=2;Name:=ZHANG:Cpsl:=78.967;End;With语句中还可以有With语句,这称为With嵌套。,【例4-4】结合数组类型和记录类型

18、编写一个计算学生成绩的程序。如程序所示,记录数据类型典型应用,procedure TForm1.FormCreate(Sender:TObject);type node=record name:string;xb:boolean;yw:integer;sx:integer;zf:integer;end;stud=array1.5 of node;var st:stud;i:integer;begin st1.name:=王志刚;st1.xb:=true;st1.yw:=98;st1.sx:=78;st2.name:=刘霞;st2.xb:=false;st2.yw:=66;st2.sx:=77;

19、st3.name:=王小娟;st3.xb:=false;st3.yw:=56;st3.sx:=87;st4.name:=张大鹏;st4.xb:=true;st4.yw:=99;st4.sx:=72;st5.name:=赵五;st5.xb:=true;st5.yw:=88;st5.sx:=70;for i:=1 to 5 do/利用循环处理数组中的各记录 begin listbox1.Items.Add(sti.name);if sti.xb then listbox2.items.Add(男)else listbox2.items.Add(女);listbox3.items.add(intto

20、str(sti.yw);listbox4.items.add(inttostr(sti.sx);sti.zf:=sti.yw+sti.sx;listbox5.items.add(inttostr(sti.zf);end;end;,本章回顾:理解数组的概念,含义与定义方法 掌握引用数组元素的方法 理解记录的概念,含义与定义方法 掌握使用记录常用方法,4.2 上机练习重应用,4.2.1 上机练习一:选择法排序【练习题目】编写一个选择法排序程序,程序的设计界面如图4-14所示。程序运行时单击【输入整数】按钮,将允许用户输入5个整数,并以逗号隔开的形式显示在第一个编辑框中。单击【选择法排序】按钮,则排

21、好序的5个整数将显示在第二个编辑框里(从小到大排列),程序运行界面如图4-15所示。,图4-14 程序设计界面,图4-15 程序运行界面,上机练习二:冒泡法排序【上机题目】编写一个冒泡法排序程序,程序的设计界面如图4-9所示。程序运行时,单击【输入】按钮将从键盘上输入任意10个整数并显示在第一个编辑框中,然后单击【冒泡排序】按钮,10个整数将按照从小到大的顺序重新排列,如图4-10所示。,图4-9 程序设计界面,图4-10 程序运行界面,上机练习三:二维数组的“鞍点”,【练习题目】所谓二维数组的“鞍点”是指在本行中最大但在本列中最小的数组元素,有的数组有“鞍点”,有的数组没有。编程寻找一个从键盘上输入的3行4列数组的“鞍点”。程序设计界面如图4-11所示,程序运行界面如图4-12和图4-13所示。,图4-11 程序设计界面,图4-12 程序运行界面(一),图4-13 程序运行界面(二),4.3.4 上机练习四:求学生的平均成绩,【练习题目】某班有M名同学,本学期开了N门课,期末考试后,要统计每个学生的平均分。请你编写一个程序实现该功能,程序的设计界面如图4-16所示,程序运行时单击【形成学号与成绩】按钮将生成有序的学号并随机产生成绩,然后单击【计算平均分】按钮,将计算出每个学生的平均分,如图4-17所示。,图4-16 程序设计界面,图4-17 程序运行界面,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号