VB语言数组专题讲解.ppt

上传人:牧羊曲112 文档编号:5451993 上传时间:2023-07-08 格式:PPT 页数:61 大小:254.50KB
返回 下载 相关 举报
VB语言数组专题讲解.ppt_第1页
第1页 / 共61页
VB语言数组专题讲解.ppt_第2页
第2页 / 共61页
VB语言数组专题讲解.ppt_第3页
第3页 / 共61页
VB语言数组专题讲解.ppt_第4页
第4页 / 共61页
VB语言数组专题讲解.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《VB语言数组专题讲解.ppt》由会员分享,可在线阅读,更多相关《VB语言数组专题讲解.ppt(61页珍藏版)》请在三一办公上搜索。

1、1,第5章 数 组,本章重点介绍:1.静态数组2.动态数组3.控件数组,2,第5章 数 组,一个人N门课的成绩怎样存储和处理?一个班N门课的成绩怎样存储和处理?.,这些数据的特点:具有相同的数据类型。为了方便地使用这些数据,VB语言提供了一种构造数据类型:数组,例如:存储学生成绩用实型数组 score(1 to 5)其中:score是数组名。该数组可以存放5个成绩,分别用下标变量表示:score(1),score(5)。,3,5.1数组的概念及其声明,5.1.1数组与数组元素,1.数组概念 数组就是一组相同类型数据的集合,这一组数中的每一个组成元素就叫做数组元素。用一个统一的名字(数组名)代表

2、逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。,例如:dim mark(1 to 100)As Integer 第一个学生成绩用mark(1)来表示,其值为95 第二个学生成绩用mark(2)来表示,其值为80,4,2.数组的命名 命名规则和简单变量的命名规则相同。例如:用 mark 来代表100个学生的成绩,3.数组维数,数组中下标的个数称为数组的维数,一维数组:例如mark(100),二维数组:有两个下标例如:x(2,3)二维数组相当于一个矩阵,三维数组:有三个下标,例如:m(3,4,5),5.1.1数组与数组元素,5,4.数组元素,5.1.1数组与数组元

3、素,如何确定100个学生和这个数据组中的各个成绩对应关系呢?,给数组中的数据编号,也就是顺序号,从而出现了数组中的下标变量,所以数组元素也称为下标变量.数组元素表示为:,(),例如:mark(1)、mark(99),例如:c(2,3)表示数组c中第2行第3列的那个元素,对于数组中下标的使用说明:,(1)下标放在数组名后的括号内,mark1,mark2,mark(1),6,5.1.1数组与数组元素,(2)下标可以是常量、变量或者表达式,mark(1)=60,for i=2 to 100 mark(i)=cint(inputbox(“输入”)next i,mark(i+1)=0,(3)下标反映的是

4、数据在数组中的位置,应该为整数,如为非整数,要四舍五入取整,例如x(3.6)取整后为x(4),7,5.数组的类型 Visual Basic中的数组,按不同的方式可分为以下几类:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组,也称为静态数组或动 态数组。,5.1.1数组与数组元素,按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。,按数组的维数可分为:一维数组、二维数组、多维数组。,对象数组:菜单对象数组、控件数组。,8,5.2 静态数组,静态数组是指固定大小的数组,类型、维数和大小将不得改变。,5.2.1 静态数组及声明,语法:Dim 数组名(下

5、标1,下标2)As 类型,下界 to 上界,维数:几个下标为几维数组,最多60维,例:Dim mark(1 to 100)As Integer,Dim c(0 to3,0 to 4)As Integer,9,每一维大小:上界下界+1,数组大小:每一维大小的乘积,Dim lArray(0 To 3,0 To 4)As Long,共有 45个元素,下标:下界 To 上界,下界可以省略,当缺省时,下标的下界由Option Base n语句控制,给出的上下界必须为常数。,(1)如果在数组声明的时候,没有给出下标下界,则下界由Option Base 语句控制,默认值为0。,例如:Dim b(2,4,3)

6、,5.2.1 静态数组及声明,Option Base 1Dim a(2,0 to 4,3),10,Dim lArray(0 To 3,0 To 4)As Long 等价于:Dim lArray(3,4)As Long,5.2.1 静态数组及声明,(2)考虑:下面对数组的声明是否正确?n=Inputbox(“输入n”)Dim x(n)As Single,错误的声明,下标是变量,11,5.2.1 静态数组及声明,(3)例如:考虑两个x(10)的区别?Dim x(10)As Integer x(10)=100,声明了x数组有11个元素,对x(10)这个数组元素赋值,在数组声明中的下标说明了数组的整体

7、,即每一维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。,声明数组:声明了数组的名、维数、大小、类型,并且对数组进行初始化,12,补充 与数组操作有关的几个函数,Array函数(1)Array函数可方便地对数组整体赋值,但它只能给声明Variant的变量或仅由括号括起的动态数组赋值。,=Array(),(2)数组的下界由option base控制语句决定,上界由Array函数括号内的参数个数决定,也可通过函数Ubound获得,例如,要将1,2,3,4,5,6,7 这些值赋值给数组a,可使用下面的方法赋值。Dim a()a=array(1,2,3,4,5,

8、6,7)Dim a a=array(1,2,3,4,5,6,7),13,2.求数组的上界Ubound()函数、下界 Lbound()函数,作用:分别用来确定数组某一维的上界和下界值。使用形式如下:UBound(,)LBound(,),补充 与数组操作有关的几个函数,Dim score(3,4)as integerUBound(score,2),其中:必需的,遵循标准变量命名约定。:可选的;一般是整型常量或变量。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略默认是1。,4,LBound(score,2),0,14,5.2.2 数组的引用,使用数组就是对数组元素进行操作,

9、对数组元素的操作类似于对简单变量的操作。,引用数组元素需要注意的问题:,引用数组元素的方法:在数组名后的括号中指明下标,例如a(5),b(3,4),引用数组元素时,数组名、数组类型必须与数组声明时一致,引用数组元素时,下标值应在数组声明时所指定的范围内,在同一过程中,数组与简单变量不能同名,15,1.数组元素的输入(赋初值),(1)赋值语句 Dim iA(1 To 10)As String iA(1)=“张三”:iA(2)=“李四”,再如:for i=1 to 10 a(i)=int(Rnd*90)+10 循环加赋值 next i,(2)在运行时通过 inputbox函数输入,for i=1

10、to 10 a(i)=inputbox(“请输入”)next i,16,(3)用循环 For i=1 To 10 a(i)=0 Next i,1.数组元素的输入(赋初值),(4)Array函数 Dim ib()用array函数给动态数组赋值时不能指定数组类型 ib=Array(abc,def,67)For i=0 To UBound(ib)form1.Print ib(i);Next i,17,1.数组元素的输入(赋初值),一维数组在输入时可用一重循环,二维数组要用二重循环,多维数组用多重循环。在VB中,数据按行存储,所以一般将数组第一维的循环变量放在外重循环中,例5.1 求数组中的最小元素及

11、下标要求:创建一个包含10个元素的数组,从键盘输入10个数,找出其中最小的数,并且输出最小数的下标。,数据分析:除了声明包含 10个元素的数组外,还应该声明几个变量,分别是什么类型?求最大值最小值算法分析:?,18,Private Sub Form_Click()Dim a(1 To 10)As Integer Dim min As Integer,p As Integer,For i=1 To 10 a(i)=Val(InputBox(请输入一个数,输入数,0)Next i,min=a(1):p=1,For i=2 To 10 If a(i)min Then min=a(i)p=i End

12、IfNext i,Print 数组第&p&个元素是最小值&minEnd Sub,19,例5.2 Fibonacci数列问题 其中第n项的计算公式为:Fib(n)=Fib(n-1)+Fib(n-2),编程求出fibonacci数列的前15项,Dim f(1 to 15)as Integerf(1)=1:f(2)=1,For i=3 to 15 f(i)=f(i-1)+f(i-2)print f(i)Next i,20,1.数组元素的交换,For i=1 To 102 t=iA(i)iA(i)=iA(10-i+1)iA(10-i+1)=t Next i,5.2.3 数组的应用,21,Private

13、 Sub Form_Load()iA(1)=2:iA(2)=4 iA(3)=6:iA(4)=8 iA(5)=10:iA(6)=1 iA(7)=3:iA(8)=5 iA(9)=7:iA(10)=9 End Sub,Private Sub Command1_Click()交换前 Text1.FontSize=20 For i=1 To 10 Text1.Text=Text1.Text&_ iA(i)&Next iEnd Sub,演示,22,2.排序问题,排序算法 1用选择法对n个数进行由小到大排序 需反复进行求最小值与交换两个数这两种基本操作(1)从n个数的序列中选出最小的数(递增),与第1个数交

14、换位置;,(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;,(3)重复(1)n-1遍,最后构成递增序列。,23,1选择法,外重循环变量i:比较的趟数,n个数需要n-1趟比较,n从1变化到n-1内重循环j:每一趟比较的次数,j从i+1变化到n,24,25,2 选择法改进,26,例53 由计算机产生10个0100之间的随机整数,使用选择法排序,将这些数按递增的顺序排列。(纠正课本错误),Dim a(1 To 10)As Integer,For i=1 To 10 a(i)=Int(Rnd*100)+1 Print a(i);Next i,For i=1 To i

15、min=i For j=To 10 If a(j)a(imin)Then imin=j end if Next j t=a(i)=a(imin)a(imin)=tNext i,27,冒泡排序过程:需反复进行相邻两个数的比较与交换 两个数这两种基本操作。,2冒泡排序,(1)比较第一个数与第二个数,若为逆序a(0)a(1),则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上,(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置第n-1个元素位置,(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束,28,

16、2冒泡排序,从上述过程可以看到:N个数要比较N-1趟,而在第i趟比较中,要进行N-i次两两比较。,29,冒泡法排序(升序)的VB程序:,2冒泡排序,For i=1 To n-1 For j=1 To n-i If a(j)a(j+1)Then temp=a(j)a(j)=a(j+1)a(j+1)=temp End if Next jNext i,30,3.二维数组的应用,Dim StuScore(1 to 10,1 to 5)定义105的二维数组,可以使用For循环嵌套处理多维数组.,二维数组中的元素的存储顺序是按行存储的,因此外循环对应行的变化,内循环对应列的变化比较合适。,31,例5.4

17、设定一个5行5列的矩阵,首先给这个矩阵赋值,其值为对应的行坐标和列坐标之和,然后在窗体上以五行五列的方式输出。,数组定义:,Dim a(1 To 5,1 To 5)As Integer,For i=1 To 5 For j=1 To 5 a(i,j)=i+j Next jNext i,赋值:,输出:,For i=1 To 5 For j=1 To 5 Print a(i,j);Next j Print 作用是什么?Next i,3.二维数组的应用,演示,32,3.二维数组的应用,请大家考虑:如果声明一个 5行5列的矩阵,其中元素由计算机随机生成的小于100的整数。求(1)主对角线上元素之和(2

18、)主对角线上元素之积(3)方阵中最大元素和最小元素及其对应的下标,33,5.3 动态数组,请大家考虑:如果首先要通过用户界面输入数组长度,然后再用数组保存数据,应该如何定义数组呢?,例如:(动态数组示例),动态数组:指在声明数组时未给出数组的大小(省略括号中的下标);当要使用它时,随时用ReDim语句重新指出数组大小;但不能改变数组的类型。,34,创建动态数组的过程,创建动态数组的步骤如下:Public、Dim或Static语句声明一个空维数组。格式:Dim 数组名()As 数据类型,在过程中用ReDim语句分配实际的元素个数(维数和每维下标范围)。,形式:ReDim 数组名(下标1,下标2)

19、As 类型,Sub Form_Load()Dim sArray()As Single ReDim sArray(4,8)End Sub,35,说明:(1)Dim、Private、Public变量声明语句是说明性语句,可出现在过 程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。,(2)ReDim语句可以改变数组的维数、上界和下界,但是,不能改变数组的类型。同时数组的维数只能改变一次,由第一次出现的Redim语句定义的维数来决定。,(3)在过程中可多次使用ReDim来改变数组的大小,每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数用来保留数

20、组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。,36,例如:Dim aa()As Integer Redim aa(2,3,4)Redim Preserve aa(2,3,7),Dim MyArray()As Interger Redim MyArray(10)Redim Preserve MyArray(15),(4)ReDim中的下标可以是常量,也可以是有了确定值的变量。,37,Private Sub Command1_Click()Dim a()As Integer Dim sum As Integer Dim n As Integer Dim p As

21、 String n=Val(Text1.Text)ReDim a(1 To n)For i=1 To n a(i)=i Next i p=,For i=1 To n-1 p=p&i&+sum=sum+a(i)Next p=p&i sum=sum+a(n)Label2.Caption=p&=&sumEnd Sub,例:用动态数组求和,38,附加内容:For EachNext语句:它是一个循环语句,用来执行指定次数的循环,但For EachNext语句专门用于数组或对象集合中的每个元素。,1.语法格式For Each In Exit For Next,2.执行过程 可以对数组中的元素进行查询、显示

22、和读取。执行的循环次数由数组元素的个数决定。,说明:1成员是一个Variant 型变量2数组是一个数组名,没有上下界,也可以没 有括号,39,例:7-12用For EachNext语句,求1+2+3+100的值,Private Sub Command1_Click()Dim x(1 to 100)As Integer Dim a 定义变量a,默认的 数据类型为Variant 型 Dim s As Integer 和变量 s=0 求和初始化 For i=1 To 100 给数组赋初值 x(i)=i Next iEnd Sub,For Each a In x s=s+a Next a Label1

23、.Caption=sEnd Sub,代表着数组x中确定的元素值,执行次数?,40,5.4 控件数组,一组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。,控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个元素。,例:Private Sub cmdName _Click(Index As Integer)If Index=3 then 处理第四个命令按钮的操作 End If End Sub,41,2 选择以下方法之一创建控件数组:为控件起相同的名字 复制现有的控件 指定控件的索引值演示,5.4.2 控件数组的建立,1.设

24、计阶段在窗体中创建控件数组的步骤为:1 在窗体上添加一个新的控件(如命令按钮Command1),以决定控件的类型和控件数组中的第1个控件。设置控件的Name属性值,为控件命名。,42,2.运行时添加控件数组成员 控件数组必须是设计时创建的,在程序运行时,可以通过Load方法向控件数组中添加新的控件成员,并设置其属性值,也可以通过Unload方法删除控件数组中的控件。,Load方法和Unload方法的格式是:Load 控件数组名(Index)Unload 控件数组名(Index),Index为控件数组元素的下标,43,例:建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结

25、束操作。,44,Private Sub Command1_Click(Index As Integer)Select Case Index Case 0 画直线 Case 1 画矩形 Case 2 画圆 Case Else End End Select End Sub,演示,45,【例】设计一个简易计算器,能进行整数的加、减、乘、除运算。其运行界面如图所示。,界面设计:一个标签用于计算器输出,名称改为dataout;,数字按钮控件数组Number 09;操作符控件数组Operator+-*/;,一个“=”按钮用于计算结果,名称改为result;,一个“Cls”按钮用于清屏,演示,46,程序如下

26、:窗体级变量声明 Dim op As Byte 用来记录前面输入的操作符 Dim ops1&,ops2&两个操作数,长整型 Dim res As Boolean 用来表示是否已算出结果,Private Sub clear_Click()cls按钮 dataout.Caption=End Sub,Private Sub Form_Load()res=FalseEnd Sub,47,按下数字键09的事件过程 Private Sub number_Click(i1 As Integer)If Not res Then 连续按下好几个数字键,例如89 dataout.Caption=dataout.C

27、aption&i1 Else dataout.Caption=i1 res=False 结果还未算出 End If End Sub,48,按下操作键+、/的事件过程 Private Sub operator_Click(i2 As Integer)ops1=dataout.Caption 记下第一个操作数 op=i2 记下对应的操作符 dataout.Caption=End Sub,49,按下=键的事件过程 Private Sub result_Click()ops2=dataout.Caption 记下第二个操作数 Select Case op Case 0 dataout.Caption=

28、ops1+ops2 Case 1 dataout.Caption=ops1-ops2 Case 2 dataout.Caption=ops1*ops2 Case 3 dataout.Caption=ops1/ops2 End Select res=True 已算出结果 End Sub,50,数组中常见错误和注意事项,1.静态数组声明下标出现变量 n=InputBox(输入数组的上界)Dim a(1 To n)As Integer,2数组下标越界 引用的下标比数组声明时的下标范围大或小。Dim a(1 To 30)As Long,i%a(1)=1:a(2)=1 For i=3 To 40 a(i

29、)=a(i-2)+a(i-1)Next i,51,作业:p1303(2)3(3),3数组维数错 数组声明时的维数与引用数组元素时的维数不一致。Dim a(3,5)As Long a(i)=10,4Aarry函数使用问题 只能对Variant 的变量或动态数组赋值。,数组中常见错误和注意事项,52,(1)求ASC码值 Asc 函数用来求一个字符串首字符的ASC码值 语法格式为:Asc(string)参数string可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。例如:Asc(“A”)=64,(2)求ASC码字符 Chr 函数求一个ASC码值所对应的ASC

30、码字符。语法格式为:Chr(charcode)参数charcode是一个用来识别某字符的 Long型数。charcode 的正常范围为 0 255。例如,Chr(10)可以返回换行字符;例如:Chr(64)=“A”,53,Private Sub Command1_Click()水仙花数,用两重循选环实现算法Dim a As Integer,b As Integer,c As IntegerDim n As IntegerText1.FontSize=36Text1.Text=此句可省略For n=100 To 999 a=n 100 百位 b=(n 10)Mod 10 十位 c=n-100*a

31、-10*b 个位 If a 3+b 3+c 3=n Then Text1.Text=Text1.Text&n&Chr(13)&Chr(10)此句中的text1.text不可省End IfNext nEnd Sub,54,Private Sub Command1_Click()水仙花数,用三重循选环实现算法 Dim a As Integer,b As Integer,c As Integer Dim n As Integer Text1.FontSize=36 Text1.Text=此句可省略 For a=1 to 9 百位 for b=0 to 9 十位 for c=0 to 9 个位 n=1

32、00*a+10*b+c If a 3+b 3+c 3=n Then Text1.Text=Text1.Text&n&Chr(13)&Chr(10)此句中的text1.text不可省 End If Next c Next b Next aEnd Sub,55,Private Sub Command1_Click()马克思问题,在窗体上输出 Dim x As Integer,y As Integer,z As Integer FontSize=24 Print 男人,女人,小孩 For x=1 To 15 For y=1 To 23 z=30-x-y If 3*x+2*y+z=50 Then Pr

33、int x,y,z End If Next y Next xEnd Sub,56,Private Sub Command1_Click()马克思问题,在文本框上输出 Dim x As Integer,y As Integer,z As Integer For x=1 To 15 For y=1 To 23 z=30-x-y If 3*x+2*y+z=50 Then Text1.Text=Text1.Text&x&y&z&Chr(13)&Chr(10)End If Next y Next xEnd Sub,57,第五章习题3(2)Dim a(),b(),c()在通用段声明Dim Dim Priv

34、ate Sub Command1_Click()Dim i As Integera=Array(2,4,6,8,10)用array函数给数组赋初值b=Array(1,3,5,7,9)For i=0 To 4 输出两个数组 Text1.Text=Text1.Text&a(i)&Text2.Text=Text2.Text&b(i)&Next iEnd Sub,58,Private Sub Command2_Click()Dim i As Integer ReDim c(0 To 4)此语句不可省 For i=0 To 4 c(i)=a(i)+b(i)Next i For i=0 To 4 输出第三

35、个数组 Text3.Text=Text3.Text&c(i)&NextEnd Sub,59,第五章习题3(3)Dim a()As Integer 生成动态数组Dim b()As IntegerDim m As Integer 行数为m+1Dim n As Integer 列数为n+1Dim i As Integer 循环变量Dim j As IntegerPrivate Sub Command1_Click()m=Val(Text1.Text)行数为m+1 n=Val(Text2.Text)列数为n+1 ReDim a(m,n)指定动态数组a的大小,60,输出a数组 For i=0 To m

36、For j=0 To n Print a(i,j);Next j Print 换行Next i PrintEnd Sub,给a数组赋值 For i=0 To m For j=0 To n a(i,j)=Int(Rnd*50)+50 Next j Next i,61,Private Sub Command2_Click()ReDim b(n,m)指定动态数组b的大小转置算法 For i=0 To m For j=0 To n b(j,i)=a(i,j)Next j Next i,输出b数组 For i=0 To n For j=0 To m Print b(i,j);Next j Print 换行Next iEnd Sub,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号