您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Visual_FoxPro_程序设计教程机械工业出版社2008第7章
第7章数组7.1数组的概念7.2使用数组7.3对象数组7.1数组的概念7.1.1数组与数组元素数组是用一个统一的名称表示的、顺序排列的一组变量。数组中的变量称为数组元素,用数字(下标或称索引)来标识它们,因此数组元素又称为下标变量。7.1.2数组的维数在VFP中允许定义一维和二维数组。VFP对数组的大小和数据类型不作任何限制,同一数组中的数组元素可以具有不同的数据类型,对数组大小的唯一限制是可用内存空间的大小。7.2使用数组7.2.1数组的定义1.数组的声明数组在使用前必须先声明。声明的语法格式为{DIMENSION|DECLEAR}〈数组名〉(〈行数〉[,〈列数〉])2.数组的赋值数组在声明之后,每个元素被默认地赋予.F.值。可以单独为某一个数组元素赋值。如:A(1,2)=11或STORE11TOA(1,2)都是将数值11赋予A数组的第一行第二列元素。也可以用一个命令为一个数组的所有元素赋相同的值。如:A=13或STORE13TOA都是将数值13赋予A数组的每一个元素。【例7-1】随机产生14个两位整数,找出其最大值、最小值和平均值。分析:问题可以分为两部分,一个是产生14个随机整数,一个是对这14个整数求最大、最小以及平均值。为此,需要使用数组。根据以上分析画出流程图如图7-1、图7-2所示。p←i从1到14a(i)←INT(RAND()*90)+10P←p+a(i)输出pmax←10,min←100,s←0i从1到14如果a(i)max真max←a(i)如果a(i)min真min←a(i)s←s+a(i)输出max,min,s设计步骤如下:①选择“新建”表单,进入表单设计器,首先增加5个标签Label1~Label5和3个命令按钮Command1~Command3,并修改各个控件的属性,如图7-3左所示。②编写代码。随机整数的生成由表单的Activate事件代码完成:PUBLICa(14)&&因为要在不同的过程中使用数组,故声明为PUBLICp=FORi=1TO14a(i)=INT(RAND()*90)+10p=p+STR(a(i),3)+,ENDFORTHISFORM.Label2.Caption=ALLT(LEFT(p,LEN(p)–1))THISFORM.Label3.Caption=最大值=THISFORM.Label4.Caption=最小值=THISFORM.Label5.Caption=平均值=求最大、最小以及平均值由“确定”按钮Command2的Click事件代码完成:min=100max=10s=0FORi=1TO14IFa(i)maxmax=a(i)ENDIFIFa(i)minmin=a(i)ENDIFs=s+a(i)NextTHISFORM.Label3.Caption=最大值=+STR(max,3)THISFORM.Label4.Caption=最小值=+STR(min,3)THISFORM.Label5.Caption=平均值=+STR(s/14,6,2)“重置”按钮Command1的Click事件代码:THISFORM.Activate最后是“关闭”按钮Command3的Click事件代码:RELEASETHISFORM如果要求产生的随机整数互不相同,应改写表单的Activate事件代码:PUBLICa(14)p=FORi=1TO14yes=1DOWHILEyes=1x=INT(RAND()*90)+10&&变量x用来存放刚产生的随机整数yes=0&&变量yes用来作为标志FORj=1TOi–1IFx=a(j)yes=1&&如与前面的元素相同,则返回到Do循环EXITENDIFENDFORENDDOa(i)=xp=p+STR(a(i),3)+,ENDFORTHISFORM.Label2.Caption=ALLT(LEFT(p,LEN(p)–1))THISFORM.Label3.Caption=最大值=THISFORM.Label4.Caption=最小值=THISFORM.Label5.Caption=平均值=7.2.2数组的使用1.重新定义数组的维数重新执行DIMENSION命令可以改变数组的维数和大小。数组的大小可以增加或减少,一维数组可以转换为二维数组,二维数组可以降低为一维数组。如果数组中元素的数目增加了,就将原数组中所有元素的内容复制到重新调整过的数组中,增加的数组元素初始化为“假”(.F.)。2.数组变量的释放使用RELEASE命令可以从内存中释放变量和数组。其语法是:RELEASE{〈变量列表〉|〈数组名列表〉}其中各变量或数组名用逗号分隔。【例7-2】斐波那契(Fibonacci)数列问题。Fibonacci数列问题起源于一个古典的有关兔子繁殖的问题:假设在第1个月时有一对小兔子,第2个月时成为大兔子,第3个月时成为老兔子,并生出一对小兔子(一对老,一对小)。第4个月时老兔子又生出一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子成为老兔子,上个月的小兔子变成大兔子,两对老兔子生出两对小兔子(两对老,一对中,两对小)…这样,各月的兔子对数为1,1,2,3,5,8,…这就是Fibonacci数列。其中第n项的计算公式为Fib(n)=Fib(n–1)+Fib(n–2)声明数组f()f(1)←1:f(2)←1i从3到nf(i)←f(i-1)+f(i-2)输出f(i)设计步骤如下:①选择“新建”表单,进入表单设计器,增加一个标签Label1一个微调器控件Spinner1和一个列表框List1,如图7-5左所示。设置各对象的属性,见表7-2。对象属性属性值Form1Caption求Fibonacci数列的前n项Label1Caption请输入所需的项数:Spinner1KeyBoardHighValue50KeyBoardLowValue2SpinnerHighValue50.00SpinnerLowValue2.00Value1List1ColumnCount2ColumnWidths60,160RowSourceFRowSourceType5–数组②编写代码。首先在表单的Load事件代码中声明全局数组F():PUBLICF(1,2)F(1,1)=Fib(1)F(1,2)=1在表单的UnLoad事件代码中释放全局数组F():RELEASEF在微调器控件Spinner1的InteractiveChange事件代码中改变数组的大小:n=THIS.ValueDIMEF(n,2)F(2,1)=Fib(2)F(2,2)=1FORI=3TOnF(i,1)=Fib(+ALLT(STR(i))+)F(i,2)=F(i–1,2)+F(i–2,2)ENDFORTHISFORM.List1.NumberOfElements=n表单运行结果如图7-5右所示。3.二维数组表示为一维数组假如建立了一个二维数组,其下标也可以使用一维数组表示法来表示。这样一来可使代码更为简单。下面的公式可将二维数组表示法转换成一维数组表示法:序号(一维数组)=(行数–1)*数组列数+列数或使用AELEMENT()函数也能取得一维数组表示法的元素位置,即:序号(一维数组)=AELEMENT(数组名,行数,列数)【例7-3】设有一个5×5的方阵,其中元素是由计算机随机生成的小于100的整数。求出:①主对角线上元素之和。②方阵中最大的元素,如图7-6所示。分析:方阵中的元素可以用一个二维的数组表示。赋值时转换成一维数组,计算时则利用二维数组的性质。设计步骤如下:①程序界面的建立与各控件属性的设置,如图7-6所示,其中列表框的属性设置见表7-3。②编写代码。首先在表单的Load事件代码中声明数组:PUBLICa(5,5)方阵的生成由表单的Activate事件代码完成:FORI=1TO25yes=1DOWHILEyes=1x=INT(RAND()*100)yes=0FORj=1TOI–1IFx=VAL(a(j))yes=1&&如与前面的元素相同,则返回到Do循环EXITENDIFENDFORENDDOa(i)=STR(x,3)ENDFORTHISFORM.List1.NumberOfElements=5THISFORM.Text1.Value=THISFORM.Text2.Value=在表单的UnLoad事件代码中释放全局变量数组a():RELEASEa计算功能由“计算”按钮Command1的Click事件代码完成:s=0FORi=1TO5s=s+VAL(a(I,i))ENDFORTHISFORM.Text1.Value=smax=0FORI=1TO5FORj=1TO5IFmaxVAL(a(I,j))max=VAL(a(I,j))p=iq=jENDIFENDFORENDFORTHISFORM.Text2.Value=A(+STR(p,1)+,+STR(q,1)+)=+STR(max,3)“重置”按钮Command2的Click事件代码:THISFORM.Activate7.2.3数组数据的处理1.处理数组元素的函数数组提供了一种快速排序数据的方法。如果数据保存在数组中,就可以很方便地对其进行检索、排序或其他各种操作。可以使用如下函数来处理数组元素:①数组元素的排序——ASORT()。②数组元素的搜索——ASCAN()。③数组元素的删除——ADEL()。④数组元素的插入——AINS()。⑤数组元素的个数——ALEN()。【例7-4】由计算机随机生成10个互不相同的数,然后将这些数按由小到大的顺序显示出来。如图7-7所示。分析:这是一个“排序”问题,使用排序函数可以轻而易举地对数组元素进行排序。设计步骤如下:①程序界面的建立与各控件属性的设置参见图7-7。②编写代码。首先在表单的Load事件代码中声明数组:PUBLICa(10)随机整数的生成由表单的Activate事件代码完成:p=FORI=1TO10yes=1DOWHILEyes=1x=INT(RAND()*100)yes=0FORj=1TOI–1IFx=VAL(a(j))yes=1&&如与前面的元素相同,则返回到Do循环EXITENDIFENDFORENDDOa(i)=STR(x,2)p=p+a(i)+,ENDFORTHISFORM.Label2.Caption=LEFT(p,LEN(p)–2)THISFORM.Label4.Caption=编写“排序”按钮Command1的Click事件代码:asort(a)p=FORI=1TO10p=p+a(i)+,ENDFORTHISFORM.Label4.Caption=LEFT(p,LEN(p)–2)编写“重置”按钮Command2的Click事件代码:THISFORM.Activate2.与数据表记录进行数据交换的命令用于数组与数据表记录之间进行数据交换的命令有:①SCATTER——将数据从当前记录复制到数组中去。②GATHER——用来自数组的数据替换当前表中的数据。③COPYTOARRAY——从当前表向一个数组复制数据。④APPENDFROMARRAY——用来自数组的数据给当前表追加新记录。【例7-5】使用数组来作为组合框的数据源。设计步骤如下:①选择新建表单,进入表单设计器。增加一个组合框Combo1、一个文本框Text1、一个复选框Check、两个标签和两个形状控件。②设置对象属性,见表7-4,其他控件的属性设置参见图7-8。对象属性属性值Combo1RowSourceaRowSourceType5–数组Check1Caption年代③编写事件代码。编写表单事件代码:Load事件:PUBLICa(9,3)a(1,1)=曹植a(1,2)=三国a(1,3)=七步诗+CHR(13)+CHR(13)+煮豆燃豆萁,+CHR(13)+豆在釜中泣:+CHR(13)+‘本是同根生,+CHR(13)+相煎何太急!’a(2,1)=李白a(2,2)=唐代a(2,3)=望庐山瀑布+CHR(13)+C
本文标题:Visual_FoxPro_程序设计教程机械工业出版社2008第7章
链接地址:https://www.777doc.com/doc-3395841 .html