《数组与记录类型》PPT课件.ppt

上传人:sh****n 文档编号:12583781 上传时间:2020-05-12 格式:PPT 页数:35 大小:722.81KB
返回 下载 相关 举报
《数组与记录类型》PPT课件.ppt_第1页
第1页 / 共35页
《数组与记录类型》PPT课件.ppt_第2页
第2页 / 共35页
《数组与记录类型》PPT课件.ppt_第3页
第3页 / 共35页
点击查看更多>>
资源描述
第4章数组与记录类型,上章回顾:理解顺序结构、选择结构和循环结构程序设计的思想理解双分支语句和多分支语句的含义掌握利用双分支语句和多分支语句设计分支程序的方法理解循环的概念掌握循环程序设计的方法以及常用的算法,如累加求和、穷举法等,本章要点:理解数组的概念,含义与定义方法掌握引用数组元素的方法理解记录的概念,含义与定义方法掌握使用记录常用方法,4.1循序渐进学理论,4.1.1数组的定义及使用数组是一些具有相同类型的元素按一定顺序组成的序列。其中每个元素由其对应的位置来指定,这个位置就是数组的索引号(又称下标),数组元素与索引号是一一对应的,用户可以通过这个索引号来存取数组的每个元素。数组中的各元素是顺序地安排在内存中一段连续的存储空间中。按照数组在定义时是否确定了元素个数可以将数组分为静态数组和动态数组。,1数组的定义,在Delphi5/6版本中的ObjectPascal引入了动态数组,数组的内存分配不再局限于静态的,可以采用动态方式为数组分配内存区。因此,数组可分为静态数组和动态数组两种类型。,(1)静态数组,静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。一维静态数组数组通常可分为一维、二维和多维数组,在ObjectPascal中,定义一个一维数组类型,其声明格式为:Type数组类型标识符array下标类型of基类型;例如:(1)Typemyarry=array1100ofreal;(2)Typemcolor=(red,green,blue);Typemint=050;myarry=arraymcolorofinteger;test1=arraymintofmcolor数组变量:array1,array2:myarray;tcolor:test1;,注意事项:数组类型和数组变量:程序不能直接使用类型,可以使用变量;定义时可以二合一;varayyay1,array2:array0100ofreal;访问数组元素,通过数组名加方括号,括号内为数组下标值,下标值符合取值范围,下标可以为表达式;标准函数Low和High可以返回数组的最小和最大下标值,Length可以返回数组的长度;数组赋初值通常通过循环;,二维静态数组二维数组是指一个一维数组中的元素类型本身又是一个一维数组。其一般形式为;Type数组标识符=Array下标类型1ofArray下标类型2of元素类型;理解为每行就是一个元素,即又是一个一维数组的递归定义;也可以把上述形式简写成下面的形式:Type数组标识符=Array下标类型1,下标类型2of元素类型;通常使用第二种方式的定义;例如:Typetp=array15ofarray110ofreal;tmax=array15,120ofinteger;VarTr1:tp;tr2:tmax;array1:15,18ofinteger;二维数组赋初值通常采用二重循环;,多维静态数组多维静态数组的一般格式为:Type数组类型标识符array下标类型1,下标类型2,下标类型nof基类型;TypeTest1=array1.10,1.10,1.30ofinteger;VarMyarray:array0.5,0.6,0.8ofreal;,使用静态数组的注意事项零基准数组。所谓零基准数组,就是下标从零开始的数组,例如:array0.5ofchar数组的整体赋值。假设有两个数组array1和array2,其变量定义如下:Vararray1,array2:1.10ofchar;如果要把array2中每一个元素的值相应赋值给array1中的元素,一般是使用For语句,例如:ForI:=1To10Doarray1i:=array2i;,把数组作为过程或函数的形参。ProcedureMyProc(varArray1:Array1.10ofInteger);BeganEnd;上述程序中,数组的定义和传递并在一起进行,并且Array1是作为变量参数实现地址传递。另外,数组也可以作为函数的返回类型。开放式数组数组作为形参传递给过程或函数是,长度可以不确定,可以传递不同长度的数组作为实数;例如:定义两个长度不同的数组Varx1:array110ofreal;Varx2:array38ofreal;Proceduremyproc(x:arrayofreal)Beginend;BeginMyproc(x1);Myproc(x2);End;开放数组是零基准数组,因此数据和下标可能不相符开放数组可以作为数值参数,变量参数,常量参数实现传递也可以直接使用Myproc(1,2,3,4);Myproc(1,2,3.4.5.6),【例4-1】利用数组求出任意10个数中的最大及最小值。如程序所示【例4-2】利用二维数组建立一个88的方阵,该矩阵对角线元素为8,其余元素为1,结果显示在列表组件ListBox1中。如程序所示,静态数组典型应用,procedureTForm1.Button1Click(Sender:TObject);vari,ma,mi:integer;a:array1.10ofinteger;beginfori:=1to10dobeginrandomize;/初始化随机函数ai:=random(i*100);/产生10个随机数edit1.text:=edit1.text+inttostr(ai)+end;ma:=a1;mi:=a1;fori:=2to10dobeginifma=aithenmi:=aiend;edit2.text:=inttostr(ma);/输出最大值edit3.text:=inttostr(mi);/输出最小值end;,procedureTForm1.FormCreate(Sender:TObject);vara:array1.8,1.8ofinteger;i,j:integer;st:string;beginfori:=1to8doforj:=1to8doif(i=j)or(i=9-j)thenai,j:=8elseai,j:=1;fori:=1to8dobeginst:=;/每一行初始化为空;forj:=1to8dost:=st+inttostr(ai,j)+;listbox1.items.Add(st)EndEnd,(2)动态数组,一维动态数组一维动态数组的声明格式为:Type数组类型标识符arrayof基类型;也可在变量声明中直接声明动态数组,其格式为:Var变量名:arrayof基类型;注意事项:动态数组没有给定数组的下标类型,具有不确定的大小;动态数组的大小通过调用过程setlength来确定;例如:Varmyarray:arrayofinteger;Beginsetlength(myarray,10);end;,多维动态数组Type数组类型标识符arrayofarrayofarrayof基类型;Var变量名:动态数组类型标识符;或Var动态数组变量名:arrayofarrayofarrayof基类型;例如,如下声明了一个二维动态数组变量TypeTMessageGrid=arrayofarrayofstringVarMsGS:TMessageGrid;Delphi支持创建行的长度不等的动态数组例如:Varmyarray1:arrayofarrayofstring;Varmyarray2:arrayofarrayofstring;/方法一setlength(myarray1,2,3);下标从0开始/方法二setlength(myarray2,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列表框中显示出来。如程序所示,动态数组典型应用,procedureTForm1.Button1Click(Sender:TObject);VarA:arrayofarrayofstring;I,J:Integer;Tempstr:string;BeginListBox1.Clear;SetLength(A,10);ForI:=Low(A)toHigh(A)doBeginSetLength(AI,I);ForJ:=Low(AI)toHigh(AI)doBeginAI,J:=IntToStr(J+1)+;ifI0thentempstr:=tempstr+AI,J;end;ifI0thenbeginListBox1.Items.Add(tempstr);Tempstr:=;End;End;End;,ObjectPascal的记录类型跟数据库中的记录概念很相似,记录类型中的元素可以理解为数据库中的字段。事实上,ObjectPascal正式借用了数据库中的记录和字段的概念。,4.1.2的定义及使用,1记录类型的定义,(1)声明一个记录类型的一般格式为:Type记录类型标识符=Record域名表1:类型1;域名表2:类型2;域名表n:类型n;End;例如:TypeTEmployee=recordName:string20;YearHired:1990.2000;Salsry:Double;Position:string20;end;注意事项:标识符符合命名规则;记录类型标识符可以和域名标识符重名;域名标识符之间不允许重名;记录类型不能直接使用,使用之前,声明记录类型变量;,(2)访问记录域与With语句,在程序设计中,记录类型经过声明并建立实例之后就可以使用了。使用记录类型实际上是对记录的字段进行访问,由于记录类型中元素的类型不同,因此不能像使用数组一样使用下标。访问记录域的方法有两种:限定访问记录字段和使用With语句。,限定访问记录中的字段在ObjectPascal中,限定访问记录中某个字段的格式:记录变量名.字段名;TypeTEmployee=recordName:string20;YearHired:1990.2000;Salary:Double;Position:string20;end;Varnewem1,newem2:TEmployee访问记录字段:单个字段赋值:newem1.Salary:=1000;所有字段赋值:beginnewem1.name:=张三;newem1.yearhired:=1993;newem1.salary:=2000.00;newem1.position:=主管;,记录的整体赋值。尽管记录中的每一个字段可以进行各种合法的运算,但记录作为一个整体,只能进行赋值运算,即把一个记录整体赋给另一个类型一致的记录。例如:VarCust1,Cust2:Customer;Cust1:=Cust2;赋值号右边的记录变量必须是有值的,所谓有值是指记录的每个字段都赋值。,记录与数组。记录与数组的相同点是:两者都是构造类型,是多个相关数据的集合,都可以整体赋值。记录如数组的不同点是:1)数组中元素的类型是相同的,而记录中的字段可以是不同类型。2)数组中元素的个数在一定范围内是可变的,而记录中字段的数量是固定的。3)数组的元素是通过数组变量名加方括号和下标来访问的,而记录中的字段是通过记录变量名加一个小圆点和字段名来访问的。,使用With语句ObjectPascal提供了一个With语句,其格式是:With记录变量名Do语句WithCust1DoBeginCustid:=2;Name:=ZHANG:Cpsl:=78.967;End;With语句中还可以有With语句,这称为With嵌套。,【例4-4】结合数组类型和记录类型编写一个计算学生成绩的程序。如程序所示,记录数据类型典型应用,procedureTForm1.FormCreate(Sender:TObject);typenode=recordname:string;xb:boolean;yw:integer;sx:integer;zf:integer;end;stud=array1.5ofnode;varst:stud;i:integer;beginst1.name:=王志刚;st1.xb:=true;st1.yw:=98;st1.sx:=78;st2.name:=刘霞;st2.xb:=false;st2.yw:=66;st2.sx:=77;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;fori:=1to5do/利用循环处理数组中的各记录beginlistbox1.Items.Add(sti.name);ifsti.xbthenlistbox2.items.Add(男)elselistbox2.items.Add(女);listbox3.items.add(inttostr(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个整数,并以逗号隔开的形式显示在第一个编辑框中。单击【选择法排序】按钮,则排好序的5个整数将显示在第二个编辑框里(从小到大排列),程序运行界面如图4-15所示。,图4-14程序设计界面,图4-15程序运行界面,4.2.2上机练习二:冒泡法排序【上机题目】编写一个冒泡法排序程序,程序的设计界面如图4-9所示。程序运行时,单击【输入】按钮将从键盘上输入任意10个整数并显示在第一个编辑框中,然后单击【冒泡排序】按钮,10个整数将按照从小到大的顺序重新排列,如图4-10所示。,图4-9程序设计界面,图4-10程序运行界面,4.2.3上机练习三:二维数组的“鞍点”,【练习题目】所谓二维数组的“鞍点”是指在本行中最大但在本列中最小的数组元素,有的数组有“鞍点”,有的数组没有。编程寻找一个从键盘上输入的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程序运行界面,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!