PLC编程培训-Visual Basic数组.doc

上传人:小魏子好文库 文档编号:9842959 上传时间:2021-03-30 格式:DOC 页数:26 大小:158.50KB
返回 下载 相关 举报
PLC编程培训-Visual Basic数组.doc_第1页
第1页 / 共26页
PLC编程培训-Visual Basic数组.doc_第2页
第2页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PLC编程培训-Visual Basic数组.doc》由会员分享,可在线阅读,更多相关《PLC编程培训-Visual Basic数组.doc(26页珍藏版)》请在三一文库上搜索。

1、5.1 数组的特点一、数组的概念在实际应用中,常常需要处理相同类型的一批数据。例如,为了处理100个员工的工资,可以用S(1),S(2),S(100)来分别代表每个员工的工资,其中S(1)代表第一个员工的工资,S(2)代表第二个员工的工资。数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据。每个元素用下标变量来区分;下标变量代表元素在数组中的位置。数组中的每一个数据称为数组元素,用数组名和该数据在数组中的序号来标识。序号又称为下标,数组元素又称为下标变量。例如,S(2)是一个数组元素,其中的S称为数组名,2是下标。在使用数组元素时,必须把下标

2、放在一对紧跟在数组名之后的括号中。S(3)是一个数组元素,而S3是一个简单变量。如果只用一个下标就能确定某个数组元素在数组中的位置,这样的数组称为一维数组。如果用两个或多个下标才能确定某个数组元素在数组中的位置,则数组分别称为二维数组或多维数组。其表示形式: 一维数组:S(2),S(3),S(10) 二维数组:X(1,1), X1(1,10), X(2,10) 多维数组:Y(0,0,0),Y(1,2,5),Y(2,3,4)二、Visual Basic中的数组,按不同的方式可分为以下几类1、按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。2、按元素的数据类型可分为:数值

3、型数组、字符串数组、日期型数组、变体数组等。3、按数组的维数可分为:一维数组、二维数组、多维数组。4、对象数组:菜单对象数组、控件数组。5.2.1 一维数组的声明数组应当先定义后使用,数组的定义又称为数组的声明或说明。形式: Dim 数组名(to)As 或: Dim 数组名(to)例如:与上面声明等价形式:Dim A%(1 to 10)定义了一个一维数组,该数组的名字为A,类型为Integer,占据10个整型变量的空间。说明: “说明符”为保留字,可以为Dim,Public,Private,Static中的任意一个。在使用过程中可以根据实际情况进行选用。这里主要讲述用Dim声明数组。定义数组后

4、,数值数组中的全部元素都初始化为0,字符串数组中的全部元素都初始化为空字符串。 “数组名”的命名规则与变量的命名相同。 “下标”的一般形式为“下界 to 上界”。 下标的上界、下界为整数,不得超过Long数据类型的范围,并且下界应该小于上界。如果不指定下界,下界默认为0。 要注意区分“可以使用的最大下标值”和“元素个数”。 和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。 “As类型”用来说明“数组元素”的类型,可以是Integer,Long,Single,Double,Currency,String(定长或变长)等基本类型或用户定义的类型,也可以是Variant类型

5、。如果省略“As类型”,则数组为Variant类型。 在同一个过程中,数组名不能与变量名同名,否则会出错。 可以通过类型说明符来指定数组的类型。例如:Dim A%(5),B!(3 To 5),C#(12)其中:% 表示为Integer 数组类型!表示为Single 数组类型# 表示为Double 数组类型 数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如图5-1所示:A(0)A(1)A(2)图5-1 数组中各元素的存储顺序5.2.2 一维数组元素的引用数组的引用通常是对数组元素的引用。一维数组元素的表示形式为: 数组名(下标)其中:下标可以是整型变量、常量

6、或表达式。一般通过循环语句及InputBox函数、文本框给数组输入数据。数组的输出一般用Print方法、标签或文本框实现。【例】设有下面的数组B(10) As Integer则下面的语句都是正确的。A(1)=A(2)+B(1)+5取数组元素运算A(i)=B(i)下标使用变量B(i+1)=A(i+2) 下标使用表达式【例】编写程序,把输入的10个整数按逆序输出。Private Sub Command1_Click()Dim a(10)As Integer,i%Print 输入的数据为For i=1 To 10a(i)=InputBox(请输入一个整型数)Print a(i),Next iPrin

7、tPrint 逆序输出为For i=10 To 1 step-1Print a(i),Next iEnd Sub5.2.3 一维数组的基本操作一、可通过循环给数组元素的初值For i=1 To 10 A(i)=1 A数组的每个元素值为1Next i 二、数组的输入 输入100个数,并存入到数组A中。For i=1 To 100A(i)=Val(InputBox(“输入A(” & i & “) 的值”)Next i三、求数组中最大元素及所在下标Dim Max As Integer,iMax As Integer Max=A(1):iMax=1For i=2 To 105.2.4 一维数组的应用一

8、、分类统计【例】从键盘上输入40人的考试成绩,输出高于平均成绩的分数。分析:该问题可分三部分处理:一是输入40个人的成绩;二是求平均分;三是把这40个分数逐一和平均成绩进行比较,若高于平均成绩,则输出。Private Sub Command1_Click()Dim score(40)As Single,aver!,i% aver=0For i=1 To 40score(i)=InputBox(请输入成绩)aver=aver+score(i)Next iaver=aver/40For i=1 To 40If score(i)aver Then Print score(i)Next iEnd Su

9、b二、排序问题【例】从键盘上输入10个整数,把这些数按由小到大的顺序排序输出。分析:排序的方法很多,如选择法、冒泡法等。这里介绍最容易理解的“冒泡法”。设10个数存放在A数组中,分别为:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。第1轮:先将A(1)与A(2)比较,若A(1)A(2),则将A(1)、A(2)的值互换,否则,不作交换;这样处理后,A(1)一定是A(1)、A(2)中的较小者。再将A(1)分别与A(3)、A(10)比较,并且依次作出同样的处理。最后,10个数中的最小者放入了A(1)中。第2轮:将A(2)分别与A(3)、A(10

10、)比较,并依次作出同第1轮一样的处理。最后,第1轮余下的9个数中的最小者放入A(2)中,亦即A(2)是10个数中的第二小的数。照此方法,继续进行第3轮直到第9轮后,余下的A(10)是10个数中的最大者。至此,10个数已从小到大顺序存放在A(1)A(10)中。为简单起见,我们以7,5,3三个数为例,再做说明:第1轮:找出最小值3作为第一个数组元素。7 5 3 比较7和5,75,需要交换,交换后的序列为5 7 3;5 7 3 比较5和3,53,需要交换,交换后的序列为3 7 5;第2轮:找出剩下的元素中的最小值5作为第二个数组元素。3 7 5 比较7和5,75,需要交换,交换后的序列为3 5 7。

11、剩下的一个元素7为三个元素中的最大者,排序完成。参见动画演示Private Sub Command1_Click()Dim t%,i%,j%,a(10)As Integer For i=1 To 10a(i)=InputBox(输入一个整数)Next iPrint 输入的10个整数为For i=1 To 10Print a(i),Next iPrintFor i=1 To 9For j=i+1 To 10If a(i)a(j)Then t=a(i):a(i)=a(j):a(j)=tNext jNext iPrint 排序后的结果为For i=1 To 10Print a(i),Next IEn

12、d Sub【例】随机产生10个两位整数,找出其中最大值、最小值。分析:该问题可以分为两部分处理:一是产生10个随机整数,并保存到一维数组中;二是对这10个整数求最大、最小值。Private Sub Command1_Click()Dim min%,max%,i%,a(10)As IntegerRandomizeFor i=1 To 10a(i)=Int(Rnd*90)+10Next iPrint 产生的随机数为For i=1 To 10Print a(i),Next iPrintmin=a(1):max=a(1)For i=2 To 10If a(i)max Then max=a(i)If a

13、(i)a(row,Column) ThenMax=a(i,j)row=iColumn=jEnd IfNext jNext iPrint 最大元素是; MaxPrint 在第 & row & 行,; 第 & Column & 列三、计算两矩阵相乘设有矩阵A有ML个元素,矩阵B有LN个元素,则矩阵C=AB有MN个元素。矩阵C中任一元素:(i=1,2,m;j=1,2,n)下面是两矩阵相乘的程序段: For i=1 TO MFor j=1 TO NC(i,j)=0For k=1 TO LC(i,j)=C(i,j)a(i,k)* b(k,j)Next kNext jNext i四、矩阵的转置 设A是M*

14、N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:For i=To For j=To Nb(j,i)=a(i,j) Next jNext I设如果是方阵,即A是MM的二维数组,则可以不必定义另一数组,否则就需要再定义新数组。方阵的转置的程序代码如下:For i= To For j= To NTemp=a(i,j) a(i, j)=a(j, i)a(j, i)=TempNext j Next I5.3.3 二维数组的基本操作 一、二维数组数据的输入Const N=4, M=5, L=6Dim a(1 to N,1 to M) As Integer, i As Intege

15、r, j As Integer,k%二维数组a输入数据的程序段如下:For i=1 to 4For j=1 to 5 A(i,j)=Val(InputBox(a(& I &, & j & )=?)Next jNext i二、求最大元素及其所在的行和列用变量max存放最大值,row,column存放最大值所在行列号Max=a(1,1): row=1: Column=1 For i=1 To NFor j=1 To MIf a(i,j)a(row,Column) ThenMax=a(i,j)row=iColumn=jEnd IfNext jNext iPrint 最大元素是; MaxPrint 在

16、第 & row & 行,; 第 & Column & 列三、计算两矩阵相乘设有矩阵A有ML个元素,矩阵B有LN个元素,则矩阵C=AB有MN个元素。矩阵C中任一元素:(i=1,2,m;j=1,2,n)下面是两矩阵相乘的程序段: For i=1 TO MFor j=1 TO NC(i,j)=0For k=1 TO LC(i,j)=C(i,j)a(i,k)* b(k,j)Next kNext jNext i四、矩阵的转置 设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:For i=To For j=To Nb(j,i)=a(i,j) Next jNext I设如果

17、是方阵,即A是MM的二维数组,则可以不必定义另一数组,否则就需要再定义新数组。方阵的转置的程序代码如下:For i= To For j= To NTemp=a(i,j) a(i, j)=a(j, i)a(j, i)=TempNext j Next I5.4.1 动态数组的建立及使用一、 动态数组 动态数组:在声明时未给出数组的大小。定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。二、动态数组的建立及使用 建立动态数组包括声明和大小说明两步:(一)在使用Dim、Private或Public语句声明括号内为空的数组。格式:Dim | Private|Public 数组名(

18、)As 数据类型例:Dim a() As Integer(二)在过程中用ReDim语句指明该数组的大小。格式:例:Redim A(10) Redim Preserve A(20) 说明: ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。 定长数组声时中的下标只能是常量,而动态数组ReDim 语句中的下标是常量,也可以是有了确定值的变量。例如:Private Sub Form_Click()Dim N As IntegerN=Val(InputBox(“输入N=?”)Dim a(N) As Integer.End sub5.4.2 与数组操作有关的几个函

19、数与数组操作有关的几个函数:一、Array函数Array函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。 【例】要将1,2,3,4,5,6,7 这些值赋值给数组a,可使用下面的方法赋值。Dim a()A=array(1,2,3,4,5,6,7)Dim a A=array(1,2,3,4,5,6,7)二、求数组的上界Ubound( )函数、下界Lbound( )函数 Ubound( )函数和Lbound( )函数分别用来确定数组某一维的上界和下界值。使用形式如下:UBound(,)LBound(,)其中: :必需的。数

20、组变量的名称,遵循标准变量命名约定。 :可选的;一般是整型常量或变量。指定返回哪一维的上界。1表示第一维,2表示第二维,如此等等。如果省略默认是1。三、Split函数使用格式:Split( ,)说明: 使用Split函数可从一个字符串中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。5.5 控件数组一、控件数组的概念(一)控件数组是一组相同类型的控件组成这些控件共用一个控件名字,具有相似的属性设置,共享同样的事件过程。控件数组中各个控件相当于普通数组中的各个元素,同一控件数组中各个控件的Index属性相当于普通数组中的下标。例如:设有一个包含3个按钮的控件数组Co

21、mmand1,它的3个元素就是Command1(0),Command1(1),Command1(2)。但Command1,Command2,Command3不是控件数组。(二)控件数组具有以下特点: 相同的控件名称(即Name属性) 控件数组中的控件具有相同的一般属性 所有控件共用相同的事件过程二、控件数组的建立控件数组中每一个元素都是控件,它的定义方式与普通数组不同。建立控件数组有三种方法: 给控件起相同的名称,Name属性设置为同一值。 复制已有的控件并将其粘贴到窗体上。 将控件的Index属性设置为非Null数值,以下标索引值(Index)来标识各个控件,第一个下标索引号为0。三、控件数

22、组的应用建立了控件数组之后,控件数组中所有控件共享同一事件过程。例如,假定某个控件数组含有10个命令按钮,则不管单击哪个命令按钮,系统都会调用同一个Click过程。由于每个命令按钮在程序中的作用不同,系统会将被单击的命令按钮的Index属性值传递给过程,由事件过程根据不同的Index值执行不同的操作。【例】设计一个简易计算器,能进行整数的加、减、乘、除运算。其运行界面如图5-3所示。1、界面设计:一个标签用于计算器输出;数字按钮控件数组CM;操作符控件数组CMfh ;一个“=”按钮用于计算结果;一个“CLS”按钮用于清屏。图5-3 运行界面表5-2 计算器界面设计表操作步骤属性设置添加一个标签

23、NameLabel1Caption空添加一个命令按钮NameCM Caption0操作:复制该命令按钮。然后在窗体上粘贴9次,把每个按钮的Caption分别设置为1,2,3,4,5,6,7,8,9添加一个命令按钮NameCMfhCaption+操作:复制该命令按钮。然后在窗体上粘贴3次,把每个按钮的Caption分别设置为,添加一个命令按钮NameCMCCaptionCLS添加一个命令按钮NameCm等号Caption=2、窗体级变量声明Dim number(1 To 6) As Single存储一个数字字符,运算符Dim simple(1 To 10), yunsuan(1 To 6) As

24、 StringDim i, j, p, q, n As IntegerDim ls, char, fh As StringDim jieguo As Single 存储运算结果 按下数字键09的事件过程Private Sub CM_Click(index As Integer) 录入一个数字char=Trim(Str(index)getanumber (char)End SubPrivate Sub getanumber(chr As String) 接收一个数字If i=0 Then i=1simple(i)=chrls=ls+simple(i)Label1.Caption=lsi=i+1E

25、nd Sub按下操作键、/ 的事件过程Private Sub CMfh_Click(index As Integer) 录入一个符号Select Case indexCase 0fh=+Case 1fh=-Case 2fh=*Case 3fh=/End Selectinputasymbol (fh)End SubPrivate Sub inputasymbol(chr As String) 接收一个运算符number(j)=Val(ls)yunsuan(j)=chrj=j + 1i=1For p=1 To 10simple(p)=Nextls=Label1.Caption=lsEnd Sub第五章 数组 本章主要教学内容总结本章主要教学的内容有数组的维数和下标的上界、下界的概念。数组数据的定义,访问形式;通过应用举例,介绍了数据的基本组织方式和简单常用的算法。数组是由固定数目的同类元素按一定顺序排列而成的结构类型数据。数组元素通过下标访问。数组常用循环结构处理。数组是一种程序设计中常用的数据结构。简单排序、矩阵运算是典型的应用举例。数组元素为控件时,称为控件数组。用于界面设计时组织相关操作的对象。

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

当前位置:首页 > 职业教育


经营许可证编号:宁ICP备18001539号-1