大学计算机vb课程第六章

收藏

编号:170163595    类型:共享资源    大小:418.52KB    格式:PPT    上传时间:2022-11-19
10
积分
关 键 词:
大学计算机 vb 课程 第六
资源描述:
第六章第六章 数组、枚举和自定义类型数组、枚举和自定义类型6.1 6.1 数组的概念数组的概念6.2 6.2 数组的基本操作数组的基本操作6.3 6.3 控件数组控件数组6.4 6.4 枚举类型枚举类型6.5 6.5 自定义数据类型自定义数据类型6.6 6.6 应用举例应用举例 数组中常见错误和注意事项数组中常见错误和注意事项6.16.1 数组的概念数组的概念 数组并不是一种数据类型,而是一组相同类型的变量数组并不是一种数据类型,而是一组相同类型的变量的集合的集合.两类数组两类数组:静态和定长数组;动态静态和定长数组;动态(可变长可变长)数组数组6.1.16.1.1 定长数组及声明定长数组及声明形式形式:Dim 数组名数组名(下标下标1下界下界 To 上界上界,下标下标2)As 类型类型 Dim 数组名数组名(下标下标1上界上界,下标下标2上界上界)As 类型类型功能:功能:声明了数组的名、维数、大小、类型声明了数组的名、维数、大小、类型维数:维数:几个下标为几维数组几个下标为几维数组下标下标:下界下界 To 上界上界 省略下界为省略下界为0 ,必须为常数。必须为常数。每一维大小每一维大小:上界下界上界下界+1数组大小数组大小:每一维大小的乘积每一维大小的乘积 例:例:Dim mark(1 to 100)As Integer6.1 6.1 数组的概念数组的概念Dim a(5)as Integer 一维数组一维数组 维数维数=1 大小大小=5-0+1=6Private b(0 to 3,4)as string 二维数组二维数组 维数维数=2 大小大小=4x5Public c(1 to 1,0 to 2,3)as single 三维数组三维数组 维数维数=3 大小大小=1x3x46.1 6.1 数组的概念数组的概念6.1.1 定长数组及声明数组声明例子数组声明例子Dim lArray(0 To 3,0 To 4)As Long 共有共有 45个元素个元素等价于:Dim lArray(3,4)As Long例:Dim mark(1 to 100)As Integer6.1 6.1 数组的概念数组的概念6.1.16.1.1 定长数组及声明定长数组及声明数组存储格式数组存储格式1.虽然下标下界缺省默认为虽然下标下界缺省默认为0,但也可以自己定义数组的下界是但也可以自己定义数组的下界是1或或0。格式:格式:Option Base 1|0 (在通用声明段说明在通用声明段说明)例如例如 Option Base 1 设下标的初值为设下标的初值为1 Dim mark(100)As Integer 等价于等价于 Dim mark(1 To 100)As Integer6.1 6.1 数组的概念数组的概念6.1.16.1.1 定长数组及声明定长数组及声明说明:说明:2.在数组声明中的下标说明了数组的整体在数组声明中的下标说明了数组的整体,即每一维的大小;而在即每一维的大小;而在程序其他地方出现的下标表示数组中的一个元素。程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。两者写法形式相同,但意义不同。例如:例如:Dim x(10)As Integer 声明了声明了x数组有数组有11个元素个元素x(10)=100 对对x(10)这个数组元素赋值这个数组元素赋值6.1.16.1.1 定长数组及声明定长数组及声明说明说明3.在同一个过程中,在同一个过程中,数组名数组名不能与不能与变量变量同名同名。例如:例如:Dim s as integer Dim s(1 to 5)as string4.声明数组时,下标值不能是变量或表达式,只声明数组时,下标值不能是变量或表达式,只能是常数。能是常数。例如:例如:Dim x(1 to n)as integer 是是错错的的 Dim s(1+k to 5)as string 是是错错的的取得数组下标的上、下界值取得数组下标的上、下界值Lbound(数组名称(数组名称,维数,维数)取得指定数组之某一维的下标下界值取得指定数组之某一维的下标下界值Ubound(数组名称(数组名称,维数,维数)取得指定数组之某一维的下标上界值取得指定数组之某一维的下标上界值Dim X(8,1 To 6)Lbound(X,1)=0 Lbound(X,2)=1 Ubound(X,1)=8 Ubound(X,2)=6下标下标1的上、下界值的上、下界值 下标下标2的上、下界值的上、下界值6.1 6.1 数组的概念数组的概念6.1.16.1.1 定长数组及声明定长数组及声明数据类型与默认数组数据类型与默认数组声明时声明时,当当As 类型类型缺省或数据类型为缺省或数据类型为Variant时,都是时,都是变体类型。各个元素能够包含不同种类的数据变体类型。各个元素能够包含不同种类的数据(对象、字对象、字符串、数值等等符串、数值等等)。Private Sub Form_Activate()Dim s(3)As Variant s(0)=4:s(1)=23.4 s(2)=Good Morning!s(3)=Now()Print s(0),s(1):Print s(2),s(3)End Sub例例6-1平均分和高于平均分的人数平均分和高于平均分的人数6.1 6.1 数组的概念数组的概念6.1.16.1.1 定长数组及声明定长数组及声明 6.1 6.1 数组的概念数组的概念6.1.26.1.2 动态数组、静态数组及声明动态数组、静态数组及声明 动态数组动态数组(不定长)不定长)-在程序未执行之前并未分配任何单元给该数在程序未执行之前并未分配任何单元给该数组,而是程序执行到该数组声明时,才分配内存单元。组,而是程序执行到该数组声明时,才分配内存单元。静态数组静态数组是指该数组在程序载入到内存时,就已经分配好内存是指该数组在程序载入到内存时,就已经分配好内存空间供静态数组使用。空间供静态数组使用。1.1.静态数组声明方法静态数组声明方法使用使用Static语句声明维数,大小一定的语句声明维数,大小一定的过程级过程级数组数组 Static a(5)as integer当过程结束后,数组的值依然存在当过程结束后,数组的值依然存在Static a(3)As Integer For i=1 To 3 a(i)=a(i)+i*2 Print“a(;i;)=;a(i)Next iPrintDim a(3)As Integer For i=1 To 3 a(i)=a(i)+i*2 Print“a(;i;)=;a(i)Next iPrint例例6-2 比较用比较用Dim 与与 Static的区别的区别6.1 6.1 数组的概念数组的概念6.1.26.1.2 动态数组、静态数组及声明动态数组、静态数组及声明2.2.动态数组声明方法动态数组声明方法(1)使用使用Dim、Private或或Public语句声明括号内为空的语句声明括号内为空的数组数组 dim a()as integer(2)在过程中用在过程中用ReDim语句指明该数组的大小语句指明该数组的大小 Redim a(3,4)as integer6.1 6.1 数组的概念数组的概念6.1.26.1.2 动态数组、静态数组及声明动态数组、静态数组及声明例例 Dim A()As Single Sub Form_Click()ReDim A(4,8)End Sub Dim、Private、Public变量声明语句是说明性语句,可出现在变量声明语句是说明性语句,可出现在过程外或内过程外或内。v ReDim语句是执行语句,只能出现在语句是执行语句,只能出现在过程内过程内。v ReDim语句可以多次重复定义数组的语句可以多次重复定义数组的大小大小,但不能改变数组第但不能改变数组第一次用一次用ReDim语句所定义的语句所定义的数据类型数据类型。v 使用使用ReDim语句重新定义数组后,会使数组原来的数据丢失,语句重新定义数组后,会使数组原来的数据丢失,若想保留,可在若想保留,可在ReDim语句之后加参数语句之后加参数Preserve。例例6-3 6-3 在例在例6-16-1基础上基础上,班级人数动态给出,班级人数动态给出6.1 6.1 数组的概念数组的概念6.1.26.1.2 动态数组、静态数组及声明动态数组、静态数组及声明说明:说明:格式:格式:Erase Erase 数组名称数组名称 可以将动态数组从内存中清除,将数值型静态可以将动态数组从内存中清除,将数值型静态数组清为数组清为0 0,将字符型静态数组清为空字符串,将字符型静态数组清为空字符串。ReDim aa(5)As IntegerStatic bb(5)As Integer aa(2)=5:bb(2)=8Print aa(2);bb(2)Erase aa,bbPrintPrint aa(2)Print bb(2)例例6-4清除数组应用清除数组应用3.清除数组清除数组6.1 6.1 数组的概念数组的概念6.1.26.1.2 动态数组、静态数组及声明动态数组、静态数组及声明1 1数组元素的输入(赋值)数组元素的输入(赋值)2 2数组的初始化数组的初始化3 3数组元素的输出数组元素的输出4 4数组元素的复制数组元素的复制6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制6.2.26.2.2 For Each Next语句语句1数组元素的输入(赋值)(1 1)用赋值语句直接赋值)用赋值语句直接赋值(2 2)用循环结构输入)用循环结构输入(3 3)用输入框或文本框输入)用输入框或文本框输入6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制(1)用赋值语句直接赋值)用赋值语句直接赋值 当数组元素较少或只需对数组中的指定元素赋值时,当数组元素较少或只需对数组中的指定元素赋值时,可以用赋值语句来实现数组元素的输入。例如:可以用赋值语句来实现数组元素的输入。例如:Dim X(2)As Integer,Y(2,2)As Integer X(0)=5 X(1)=15 X(2)=25 Y(1,1)=1006.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制(2)用循环结构输入)用循环结构输入 当数组元素很多或是多维数组时,元素的输入可以通过循环当数组元素很多或是多维数组时,元素的输入可以通过循环或多重循环语句来实现。多维数组的存储是按行的顺序存储的,或多重循环语句来实现。多维数组的存储是按行的顺序存储的,因此可以把数组的第一维的循环变量放在最外层循环中。例如:因此可以把数组的第一维的循环变量放在最外层循环中。例如:Dim Arr(2,4)For i=0 to 2 按行按行 For j=0 to 4 按列按列 Arr(i,j)=i+j 将将i+j赋给赋给Arr(i,j)Next j Next i6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制(3)用输入框或文本框输入)用输入框或文本框输入 数组元素的输入也可以通过输入框。例如,在数组元素的输入也可以通过输入框。例如,在6.1节例节例1中中学生成绩的输入就应用了学生成绩的输入就应用了InputBox函数。程序段如下:函数。程序段如下:For i=1 To 30 sum(i)=Val(InputBox(“请输入学生成绩请输入学生成绩”)sum_mt=sum_mt+sum(i)Next i 当然,对于大量的数据输入,为了便于编辑一般不用当然,对于大量的数据输入,为了便于编辑一般不用InputBox函数,而用文本框(见函数,而用文本框(见6.2.2节例节例6-7)。)。6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制2.2.数组的初始化数组的初始化 所谓数组的初始化,就是给数组的各元素赋初值。所谓数组的初始化,就是给数组的各元素赋初值。VB提供的提供的Array函数则可以使数组在程序运行之前初始函数则可以使数组在程序运行之前初始化得到初值。化得到初值。格式:格式:数组变量名数组变量名=Array(数组元素值表)(数组元素值表)功能:功能:将数组元素值表中的值,赋给具有自由类型将数组元素值表中的值,赋给具有自由类型(Variant)的数组变量名的对应元素。)的数组变量名的对应元素。6.2 6.2 数组的基本操作数组的基本操作Dim ib As Variantib=Array(abc,def,67)For i=0 To UBound(ib)Picture1.Print ib(i);Next i6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制 (1)预先定义的数组(将被赋值的数组)可以声明为没有下标)预先定义的数组(将被赋值的数组)可以声明为没有下标和维数的可调数组或连圆括号都可省略的数组,且类型只能是自和维数的可调数组或连圆括号都可省略的数组,且类型只能是自由类型(由类型(Variant)。)。(2)由于建立的数组是)由于建立的数组是Variant类型数组,所以数组元素值类型数组,所以数组元素值表中的值可以是任意数据类型,数据类型也可以不必完全一样。表中的值可以是任意数据类型,数据类型也可以不必完全一样。若参数的个数超过两个,中间必须用逗号隔开。若参数的个数超过两个,中间必须用逗号隔开。(3)数组的下界默认为)数组的下界默认为0,也可以通过,也可以通过Option Base语句设定;语句设定;上界由上界由Array函数括号内的元素个数决定,也可通过函数括号内的元素个数决定,也可通过Ubound函函数获得。数获得。(4)Array函数只能给一维数组赋值,对二维以上的多维数组函数只能给一维数组赋值,对二维以上的多维数组不适用。不适用。2 2 数组的初始化数组的初始化Array函数使用说明:函数使用说明:6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制Option Base 1Private Sub Form_Activate()Dim week As Variant mydate=#5/1/2002#week=Array(日日,一一,二二,三三,四四,五五,六六)Print Print 今天是:星期今天是:星期+week(Weekday(Now)Print Print 2002年年5月月1日是星期日是星期+week(Weekday(mydate)End Sub例例6-56-5利用利用ArrayArray函数显示今天是星期函数显示今天是星期几几2 2 数组的初始化数组的初始化6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制Option Base 1Private Sub Form_Activate()Dim Number(4,4)As Integer For i=1 To 4 i代表行号代表行号 For j=1 To i j 代表列号代表列号 Number(i,j)=i*j 输入数组元素输入数组元素 Print Number(i,j);输出数组元素输出数组元素 Next j Print 换行显示换行显示 Next IEnd sub数组元素可以象输出其他数据一样,用数组元素可以象输出其他数据一样,用Print、标签、文本框等实、标签、文本框等实现。现。例例6-6打印下三角图形打印下三角图形3.3.数组的输出数组的输出6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制4.4.数组的复制数组的复制在在VB6.0中,提供了数组直接对数组的赋值。例如:中,提供了数组直接对数组的赋值。例如:Dim a()As Variant,b()As Variant,i%a=Array(1,2,3,4,5)ReDim b(UBound(a)b=a For i=0 To UBound(a)b(i)=a(i)Next i注意:注意:赋值号左边的数组只能声明为赋值号左边的数组只能声明为VariantVariant的动态可调数组或的动态可调数组或简单变量。数组元素复制时,赋值号两边的数据类型必须一致。简单变量。数组元素复制时,赋值号两边的数据类型必须一致。6.2 6.2 数组的基本操作数组的基本操作6.2.16.2.1 数组元素的输入、输出和复制数组元素的输入、输出和复制 格式:格式:For Each 变量变量 In 数组名称数组名称 循环体循环体 Exit for Next 变量变量 根据数组元素的个数,通过循环将数组各元素的根据数组元素的个数,通过循环将数组各元素的值依值依次次赋给赋给变量变量。注意:注意:(1)变量变量必须是使用必须是使用As Variant声明的自由类型数据声明的自由类型数据(2)循环次数循环次数=数组元素的个数数组元素的个数6.2.2 6.2.2 For Eachnext数组循环语句数组循环语句6.2 6.2 数组的基本操作数组的基本操作例子:例子:用用For Each next数组循环显示数组内容,并显示数组循环显示数组内容,并显示其累加和其累加和Option base 1dim score()as variant,total as integerdim e_score as variantScore=array(90,20,80)total=0:I=0For Each e_score In score I=I+1 total=total+e_score Print I;e_score;totalNext6.2 6.2 数组的基本操作数组的基本操作6.2.2 6.2.2 For Eachnext数组循环语句数组循环语句例子例子:显示四个成绩及成绩和显示四个成绩及成绩和Option base 1dim score(2,2)as integer,total as integerdim e_score as variantscore(1,1)=90:score(1,2)=20:score(2,1)=80score(2,2)=60:total=0:I=0For Each e_score In score I=I+1 total=total+e_score Print I,e_score,totalNext6.2 6.2 数组的基本操作数组的基本操作6.2.2 6.2.2 For Eachnext数组循环语句数组循环语句例例6-7 对对6-1进行改进,进行改进,利用利用For Each 循环完成循环完成Private Sub Command2_Click()Dim avg As Integer For Each e_sum In sum total=total+e_sum Next avg=total/k For Each e_sum In sum If e_sum avg Then n=n+1 求高出平均分的人数求高出平均分的人数 Next Label2.Caption=共输入共输入+Str(k)+个学生成绩个学生成绩*_ +其平均成绩为:其平均成绩为:+Str(avg)+分分*_ +超过平均分的人数为:超过平均分的人数为:+Str(n)End Sub6.2 6.2 数组的基本操作数组的基本操作6.2.2 6.2.2 For Eachnext数组循环语句数组循环语句6.3 6.3 控件数组控件数组1控件数组的基本概念控件数组的基本概念 控件数组是一组具有控件数组是一组具有相同名称和类型相同名称和类型的控件。它们的的控件。它们的事件过程也相同事件过程也相同。通常用于对若干个控件执行大致相同。通常用于对若干个控件执行大致相同的操作。当建立控件数组的时候,系统给每个元素赋一的操作。当建立控件数组的时候,系统给每个元素赋一个个唯一的索引值(唯一的索引值(Index)或称下标值,第一个控件的或称下标值,第一个控件的下标值是下标值是0,第二个为,第二个为1,依次类推,通过属性窗口的,依次类推,通过属性窗口的Index属性,不仅可以知道该控件的下标值是多少,也属性,不仅可以知道该控件的下标值是多少,也可以将该控件的下标值设为其它值。可以将该控件的下标值设为其它值。2建立控件数组的方法控件数组的建立有设计时控件数组的建立有设计时创建和运行时添加创建和运行时添加两种方式:两种方式:(1 1)设计时创建控件数组有以下三种方法:设计时创建控件数组有以下三种方法:方法方法1 1 将相同名字赋予多个控件将相同名字赋予多个控件.方法方法2 2 复制现有的控件并将其粘贴到窗体上。复制现有的控件并将其粘贴到窗体上。方法方法3 3 将控件的将控件的 Index Index 属性设置为属性设置为非空数值。非空数值。6.3 6.3 控件数组控件数组3.控件数组应用控件数组应用 在用控件数组设计程序时,由于它们的事件过程也在用控件数组设计程序时,由于它们的事件过程也相同。为了区分控件数组中的各个元素,相同。为了区分控件数组中的各个元素,VB会把会把下标值下标值传递给过程传递给过程,例如,建立一个选项按钮数组,例如,建立一个选项按钮数组Option1,单击任意一个选项按钮,都会调用如下同一个过程:单击任意一个选项按钮,都会调用如下同一个过程:Sub Option1_Click(Index As Integer)只是根据传递给过程的只是根据传递给过程的Index值的不同,给出不同的值的不同,给出不同的结果。结果。6.3 6.3 控件数组控件数组Private Sub Option1_Click(Index As Integer)Select Case Index Case 0 Print“单击了单击了第一第一个选项按钮个选项按钮”Case 1 Print“单击了单击了第二第二个选项按钮个选项按钮”Case 2 Print“单击了单击了第三第三个选项按钮个选项按钮”End SelectEnd Sub6.3 6.3 控件数组控件数组3.控件数组应用控件数组应用Label1Label5Label4Label2Label3Command1Option1控件数组控件数组Frame1Text1Text2例例6-8 输入两个数,输入两个数,通过运算符的选择给出结果通过运算符的选择给出结果6.3 6.3 控件数组控件数组3.控件数组应用控件数组应用(2 2)运行时添加控件数组)运行时添加控件数组 在运行时,可用在运行时,可用 Load 和和 Unload 语句添加和删除控语句添加和删除控件数组中的控件,然而,添加的控件必须是现有控件件数组中的控件,然而,添加的控件必须是现有控件数组的元素。建立控件数组的步骤如下:数组的元素。建立控件数组的步骤如下:步骤步骤1 在设计时创建一个(在大多数情况下)在设计时创建一个(在大多数情况下)Index 属性属性为为 0 的控件,表示该控件是控件数组的第一个元素。的控件,表示该控件是控件数组的第一个元素。步骤步骤2 在编程时通过在编程时通过Load 和和 Unload 语句添加或删除控语句添加或删除控件数组中的元素。件数组中的元素。步骤步骤3 每个新添加的控件数组元素通过每个新添加的控件数组元素通过Left和和Top属性,属性,确定其在窗体的位置,并将确定其在窗体的位置,并将Visible属性设置为属性设置为True。6.3 6.3 控件数组控件数组2 2建立控件数组的方法建立控件数组的方法Load 和和 Unload 语句格式:语句格式:【格式】Load 控件名(下标值)【功能】添加控件数组元素。【格式】Unload 控件名(下标值)【功能】删除控件数组元素。【说明】u 控件名:在控件数组中添加或删除的控件名称。u 下标值:控件在数组中的索引值。例如,Laod Option1(1),UnLaod Option1(1)。6.3 6.3 控件数组控件数组2 2建立控件数组的方法建立控件数组的方法添加前 添加后例例6-9 6-9 单击命令按钮,单击命令按钮,可以添加选项按钮,通过选择可以添加选项按钮,通过选择不同的选项按钮,实现显示不同的图形不同的选项按钮,实现显示不同的图形6.3 6.3 控件数组控件数组2 2建立控件数组的方法建立控件数组的方法6.4 6.4 枚举类型枚举类型 所谓“枚举”就是把变量的值一一列举出来,变量的值只限于列举出来的值的范围。枚举只能通过在标准模块或公用类模块中的声明部分,用 Enum 语句声明一个枚举类型来创建。Enum 语句格式如下:【格式格式】Public|PrivateEnum 类型名称 成员名=常数表达式 成员名=常数表达式 End Enum例例6-10 6-10 利用枚举类型输出是否是工作日利用枚举类型输出是否是工作日用用“文件文件”菜单中的菜单中的“新建工程新建工程”命令建立一个工程,命令建立一个工程,然后执行然后执行“工程工程”菜单中的菜单中的“添加模块添加模块”命令,在模块窗命令,在模块窗口中输入下面的枚举类型定义:口中输入下面的枚举类型定义:Public Enum WorkDays Saturday Sunday=0 Monday Tuesday Wednesday Thursday Friday Invalid=-1End EnumPrivate Sub Form_Click()Dim MyDay As WorkDays MyDay=Wednesday If MyDay Max Then Max=a(i):iMax=i Next I a(1)=a(2)=a(3)=a(4)=a(5)=原始数据原始数据 5 14 9 24 2第第1次循环次循环 条件条件 a(2)maxa(1)满足满足max=a(2)imax=I=2第第2次循环次循环 条件条件 a(3)maxa(2)不不满足满足第第3次循环次循环 条件条件 a(4)maxa(2)满足满足 max=a(4)imax=I=4第第4次循环次循环 条件条件 a(5)maxa(4)不不满足满足最后最后 最大值最大值 max=a(4)=24 imax=I=4 例题6-13求数组中最大元素及所在下标6.6 6.6 应用举例应用举例 数组中各元素的交换实质上是找下标之间的规率。数组中各元素的交换实质上是找下标之间的规率。例如,要求将数组第一个元素与最后一个元素交换,例如,要求将数组第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,以此类推。解决第二个元素与倒数第二个元素交换,以此类推。解决的方法为,首先找出数组下标的中间值,若数组有的方法为,首先找出数组下标的中间值,若数组有n n个个元素,则中间值为元素,则中间值为n/2n/2,为了避免出现小数,用整除,为了避免出现小数,用整除n2n2取中间值;然后通过循环语句,利用某个中间变量,取中间值;然后通过循环语句,利用某个中间变量,将数组的元素交换。将数组的元素交换。2.2.将数组中各元素交换将数组中各元素交换6.6 6.6 应用举例应用举例 将数组中各元素交换将数组中各元素交换 a(I)a(10-I+1)For i=1 To 102 第第1次循环次循环 a(1)a(10)t=A(i)第第2次循环次循环 a(2)a(9)A(i)=A(10-i+1)第第3次循环次循环 a(3)a(8)A(10-i+1)=t 第第4次循环次循环 a(4)a(7)Next I 第第5次循环次循环 a(5)a(6)29tA(I)A(10-I+1)交交 换换123例题例题6-146.6 6.6 应用举例应用举例 对已知存放在数组中的对已知存放在数组中的n个数,用个数,用选择法选择法按递增顺序排序。按递增顺序排序。(1)从从n个数的序列中选出最小的数个数的序列中选出最小的数(递增递增),与第与第1个数交换个数交换位置位置;(2)除第除第1个数外,其余个数外,其余n-1个数再按个数再按(1)的方法选出次小的的方法选出次小的数,与第数,与第2个数交换位置个数交换位置;(3)重复重复(1)n-1遍,最后构成递增序列。遍,最后构成递增序列。For i=1 To n-1 iMax=i For j=i+1 To n If A(j)A(iMax)Then iMax=j Next j t=A(i):A(i)=A(iMax):A(iMax)=t Next I 3.3.数组排序数组排序6.6 6.6 应用举例应用举例 原始数据原始数据 6 9 3 2 7a(1)a(2)a(3)a(4)a(5)第第1趟交换后趟交换后 2 9 3 6 7 a(2)a(3)a(4)a(5)第第2趟交换后趟交换后 2 3 9 6 7 a(3)a(4)a(5)第第3趟交换后趟交换后 2 3 6 9 7 a(4)a(5)第第4趟交换后趟交换后 2 3 6 7 9 排序过程示意图排序过程示意图For i=1 To 4 iMax=i For j=i+1 To 5 If A(j)A(iMax)Then iMax=j Next j t=A(i):A(i)=A(iMax):A(iMax)=tNext I 选择法排序选择法排序For i=1 To n-1 iMax=i For j=i+1 To n If A(j)A(iMax)Then iMax=j Next j t=A(i):A(i)=A(iMax):A(iMax)=tNext I For i=n To 2 step 1 iMax=i For j=1 To i-1 If A(j)A(iMax)Then iMax=j Next j t=A(i):A(i)=A(iMax):A(iMax)=tNext I 递增递增递减递减6.6 6.6 应用举例应用举例 对已知存放在数组中的对已知存放在数组中的n个数,用个数,用冒泡法冒泡法按递增顺序排序。按递增顺序排序。从数据的第一项开始,每一项从数据的第一项开始,每一项(I)都与下一项都与下一项(I+1)进行进行比较,如果下一项的值较小,就将这两项的值交换,从而使比较,如果下一项的值较小,就将这两项的值交换,从而使较小的数据项排在前面。这样反复处理,直到结束,然后再较小的数据项排在前面。这样反复处理,直到结束,然后再回到开头进行重新处理回到开头进行重新处理。For i=n To 2 step-1 For j=1 To i-1 If A(j)A(j+1)Then t=A(j):A(j)=A(j+1):A(j+1)=t end if Next jNext I 6.6 6.6 应用举例应用举例 冒泡法冒泡法5 7 9 2 35 7 9 2 35 7 2 9 35 7 2 3 9 5 7 2 3 95 2 7 3 95 2 3 7 92 5 3 7 92 3 5 7 9a(1)a(2)a(3)a(4)a(5)7 5 9 2 3For i=5 To 2 step-1 For j=1 To i-1 If A(j)A(j+1)Then t=A(j):A(j)=A(j+1)A(j+1)=t end if Next jNext I I=5I=4I=32 3 5 7 9无交换无交换I=26.6 6.6 应用举例应用举例 冒泡法For i=n To 2 step-1 For j=1 To i-1 If A(j)A(j+1)Then t=A(j):A(j)=A(j+1):A(j+1)=t end if Next jNext I For i=2 To n For j=n To i step-1 If A(j)A(j-1)Then t=A(j):A(j)=A(j-1):A(j-1)=t end if Next jNext I For i=n To 2 step-1 For j=1 To i-1 If A(j)A(j-1)Then t=A(j):A(j)=A(j-1):A(j-1)=t end if Next jNext I 递增递增递减递减6.6 6.6 应用举例应用举例 思路:思路:在数据序列中,由第一个元素开始按顺序用在数据序列中,由第一个元素开始按顺序用关键关键值与数组中的元素逐一比较,值与数组中的元素逐一比较,直到找到结果或全部数据直到找到结果或全部数据查找完毕为止。查找完毕为止。例例6-166-16利用顺序查寻法查寻利用顺序查寻法查寻一组数据中是否含有数一组数据中是否含有数5 5,若有,则是第几个数。若有,则是第几个数。4.4.顺序查找顺序查找6.6 6.6 应用举例应用举例 例例6-166-16 若有若有n n个数个数,则顺序查找法的则顺序查找法的平均查找次数为平均查找次数为 n/2Option Base 1Dim Arr,num%,inum%Arr=Array(3,6,12,5,8,24)num=5:inum=0For i=1 To UBound(Arr)If Arr(i)=num Then inum=iNext i PrintIf inum=0 Then Print 查无此数据查无此数据;numElse Print 第第;inum;个数据是个数据是;numEnd If6.6 6.6 应用举例应用举例 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=1 To 30 a(i)=a(i-2)+a(i-1)Next I数组中常见错误和注意事项:数组中常见错误和注意事项:3数组维数错数组维数错 数组声明时的维数与引用数组元素时的维数不一致。数组声明时的维数与引用数组元素时的维数不一致。Dim a(3,5)As Long a(1)=104Aarry函数使用问题函数使用问题 只能对只能对Variant 的变量或动态数组赋值。的变量或动态数组赋值。5获得数组的上界、下界获得数组的上界、下界 UBound、Lbound函数函数数组中常见错误和注意事项数组中常见错误和注意事项:
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学计算机vb课程第六章
链接地址:https://www.zhuangpeitu.com/article/170163595.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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