[其它技巧]VB3.ppt

上传人:音乐台 文档编号:2002079 上传时间:2019-01-30 格式:PPT 页数:88 大小:842.47KB
返回 下载 相关 举报
[其它技巧]VB3.ppt_第1页
第1页 / 共88页
[其它技巧]VB3.ppt_第2页
第2页 / 共88页
[其它技巧]VB3.ppt_第3页
第3页 / 共88页
亲,该文档总共88页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[其它技巧]VB3.ppt》由会员分享,可在线阅读,更多相关《[其它技巧]VB3.ppt(88页珍藏版)》请在三一文库上搜索。

1、第3章 Visual Basic语言进阶,3.1 基本控制结构,3.1.1 顺序结构,顺序结构就是整个程序按书写顺序依次自上而下执行。前面两章设计和编写的程序都是顺序结构的。 顺序结构如图所示,先执行A,再执行B,即自上而下依次运行。图 左(左)图为框式流程图,图 (右)为N-S流程图,又称为盒图。,3.1.2 分支结构,分支结构用于判断并分支,又称为选择结构。,如图所示,E代表条件,当E条件成立(True)时执行A,否则(False)执行B,两条分支汇合在一起为一个出口。 分支结构有几种形式:If.Then.Else结构、Select Case结构和IIf函数。,3.1.2 分支结构,1If

2、.Then.Else结构 If.Then.Else结构表示 “如果.就.否则”。 语法: If 条件 Then 语句 或者: If 条件1 Then 语句块1 ElseIf 条件2 Then 语句块2 . . Else 语句块n End If,条件可以为各种表达式,都要转换为Boolean型,即所有非零的数值、字符等都转换为True,而0、“0“值则转换为False。 当If.Then.Else结构只有单独的If语句时,可以没有End If语句。 首先测试条件1,如果为 False,就测试条件2,依此类推,直到找到一个为 True 的条件就执行Then后面的语句块。当只有一个条件而且执行的是单

3、个语句时,If.Then.Else结构可以简化成If.Then语句。,3.1.2 分支结构,【例3-1】使用If.Then语句查询学生的成绩,大于等于60分的为及格,其余为不及格格。 界面设计:在窗体界面中创建两个文本框(Text1、Text2)、两个标签(Label1、Label2)和一个按钮(Command1)。文本框Text1输入分数,单击按钮Command1则在文本框Text2中显示成绩。,3.1.2 分支结构,程序代码如下: Private Sub Command1_Click() 单击按钮显示成绩 Dim x As Single Dim y As String x = Val(Te

4、xt1.Text) y = “不及格“ If x = 60 Then y = “及格“ Text2.Text = y End Sub 程序分析:使用If.Then语句,当满足条件“x=60”就执行Then后面的语句“y = “及格“”,否则就执行If.Then语句后面的语句。,3.1.2 分支结构,【例3-2】使用If.Then.Else结构查询学生的成绩,大于等于60分的为及格,其余为不及格。 界面设计和功能要求与【例3-1】相同,程序流程图如图所示。 程序代码如下:,Private Sub Command1_Click() 单击按钮显示成绩 Dim x As Single Dim y As

5、 String x = Val(Text1.Text) If x = 60 Then y = “及格“ Else y = “不及格“ End If Text2.Text = y End Sub,3.1.2 分支结构,【例3-3】使用多个条件的If.Then.Else结构查询学生的成绩,将成绩分成优、良、中、及格和不及格,90100为优,8090为良,7080为中,6070为及格,60以下为不及格。,3.1.2 分支结构,程序代码如下: Private Sub Command1_Click() 单击按钮显示成绩 Dim x As Single Dim y As String x = Val(Te

6、xt1.Text) If x = 90 Then y = “优“ ElseIf x = 80 Then,y = “良“ ElseIf x = 70 Then y = “中“ ElseIf x = 60 Then y = “及格“ Else y = “不及格“ End If Text2.Text = y End Sub,程序分析: 使用有多个条件的If.Then.Else结构,判断的顺序是“x=90”“x=80”“x=70”“x=60”剩下的就是“x60”。,3.1.2 Select Case语句(情况语句) 形式: Select Case 变量或表达式 Case 表达式列表1 语句块1 Cas

7、e 表达式列表2 语句块2 Case Else 语句块n+1 End Select :与同类型的下面四种形式之一: 表达式 例: A +5 一组枚举表达式(用逗号分隔) 2, 4, 6, 8 表达式1 To 表达式2 60 to 100 Is 关系运算符表达式 Is 60,数值型或字符串表达式,3.1.2 分支结构,【例3-4】使用Select Case 结构实现学生成绩的查询,将 成绩分成优、良、中、及格和不及格,90100为优,8090为良,7080为中,6070为及格,60以下为不及格。,Case 70 To 79 y = “中“ Case 60 To 69 y = “及格“ Case

8、Else y = “不及格“ End Select Sub Text2.Text = y End,Private Sub Command1_Click() 单击按钮显示成绩 Dim x As Single Dim y As String x = Int(Text1.Text) Select Case x Case 90 To 100 y = “优“ Case 80 To 89 y = “良“,程序分析: x = Int(Text1.Text)用来将分数取整,因为分数可能是小数。 “Case 90 To 100”后面的值使用连续的范围表示90100。,3.1.2 分支结构,3. IIf函数 If

9、.Then.Else 结构当只有一个条件时还可以使用IIf函数来实现,用IIf函数语句可以说是If.Then.Else 结构的简写版本。 语法: IIF(条件,真部分,假部分) 说明: IIf函数的步骤是先判断条件,当条件为True时执行真部分,否则就执行假部分。 在【例3-2】中当分数=60为及格,否则为不及格的关系可以用IIf函数表示为: y = IIf( x = 60,“及格“,“不及格“),4. 选择结构的嵌套 在IF语句的Then分支和Else分支中可以完整地嵌套另一IF语句或Select Case语句,同样Select Case语句每一个Case分支中都可嵌套另一IF语句或另一Se

10、lect Case语句。下面是两种正确的嵌套形式: (1)IF Then IF Then Else End If . Else . IF Then Else End If End IF,(2)IF Then Select Case Case IF Then Else End If Case. End Select . End IF,注意:只要在一个分支内嵌套,不出现交叉,满足结构规则,其嵌套的形式将有很多种,嵌套层次也可以任意多。对于多层IF嵌套结构中,要特别注意IF与Else的配对关系,一个Else必须与IF配结,配对的原则是:在写含有多层嵌套的程序时,建议使用缩进对齐方式,这样容易阅读和维

11、护。,例,设计一个用户身份验证程序,运行界面如下图所示。,3.1.3循环结构,1DoLoop结构,Do 循环有两种形式。即“当型”循环( While结构)和“直到型”( Do While 结构)循环。“当型”循环结构的程序流程图如图 “直到型”循环结构的程序流程图,“当型”循环的语法: Do While|Until 条件 语句块 Exit Do 语句块 Loop,3.1.3 循环结构,“直到型”循环的语法: Do 语句块 Exit Do 语句块 Loop While|Until 条件 说明: “直到型”循环与“当型”循环所不同的是先执行语句块,然后测试条件,只要条件为 True 就循环语句块;

12、如果条件为 False,则跳过循环体。 这种“直到型”循环保证语句块至少被执行一次。,注意:在Do.Loop结构中Until和While不同,判断条件正好 相反。Until结构是只要条件为False(而不是 True),就执行循环的语句块,否则跳出循环体。,3.1.3 循环结构,【例 3-6】 用“当型”循环计算1到100的和。 界面设计:在窗体界面中放置一个文本框Text1、一个标签和一个按钮Command1,单击按钮Command1开始计算1100的和。,序代码如下: Private Sub Command1_Click() 单击按钮开始计算 Dim i As Integer, Sum A

13、s Integer Sum = 0: i = 1,Do While i = 100 Sum = Sum + i i = i + 1 Loop Text1.Text = Sum End Sub,例 求两个整数的最大公约数、最小公倍数,Dim n%,m%,nm%,r% m=Val(InputBox(“m=“) n=Val(InputBox(“n=“) nm=n*m If m 0) m=n n=r r= m mod n Loop Print “最大公约数=“, n Print “最小公倍数=“, nm/n,算法使用转碾除法,流程图如右,实现的程序代码如下:,3.1.3 循环结构,【例3-7】用“直到

14、型”循环While计算1到 100的和。Sum = Sum + i i = i + 1 当i = 100 直到E为真图3.10 流程图 Sum = 0 i = 1Text1.Text = Sum 界面设计与图相同,程序代码如下: Private Sub Command1_Click() 单击按钮开始计算 Dim i As Integer, Sum As Integer Sum = 0: i = 1 Do Sum = Sum + i i = i + 1 Loop While i = 100 Text1.Text = Sum End Sub,如果将循环体外的置初始值语句由“i = 1”改为“i =

15、 101”,则两种不同 的Do.Loop结构结果就不同了: 【例 3-6】判断条件后直接跳出循环,Sum的结果是0; 【例 3-7】进入循环体一次后判断条件跳出循环,Sum的结果是101。,3.1.3 循环结构,2ForNext结构 如果已经知道了循环的次数,使用ForNext循环 比 DoLoop循环更方便。 语法: For 计数器 = 初始值 To 终止值 Step 步长 语句块 Exit For Next 计数器 ForNext循环的步骤:,(1)设置计数器等于初始值。 (2)如果步长为正值,则判断计数器是否大于终止值,如果大于则 跳出循环。如果步长为负数则判断计数器是否小于终止值。 (

16、3)执行语句块。 (4)计数器=计数器步长。 (5)循环执行步骤(2)(5)。 ForNext循环步长为正值的程序流程图如图所示。,3.1.3 循环结构,【例3-8】用ForNext循环结构 来计算1到100的和,步长为1。 Private Sub Command1_Click() 单击按钮开始计算 Dim i As Integer, Sum As Integer Sum = 0 For i = 1 To 100 步长默认为1 Sum = Sum + i Next i Text1.Text = Sum End Sub,【例3-9】 ForNext循环结 构 计算1到100的和,步长-1。 Pr

17、ivate Sub Command1_Click()单击按钮开始计算 Dim i As Integer, Sum As Integer Sum = 0 For i = 100 To 1 Step -1 步长为-1 Sum = Sum + i Next i Text1.Text = Sum End Sub,3.1.3 循环结构,3退出循环结构 用 Exit 语句可以直接退出ForNext循环和DoLoop循环。“Exit For”为退出ForNext循环,“Exit Do”为退出DoLoop循环。 程序执行时遇到 Exit 语句,就不再执行循环结构中的任何语句立即跳出循环,跳转到循环结构的下一句

18、执行。Exit 语句几乎总是出现在循环体内嵌套的If 语句或 Select Case 语句中。 注意:当运行程序进入死循环时,按Ctrl+break 键可以终止程序的运行。,3.1.3 循环结构,【例3-10】 用ForNext循环结构来计算1到100的和,当和 大于等于3000时终止循环。运行界面如图所示。,Private Sub Command1_Click() 单击按钮开始计算 Dim i As Integer, Sum As Integer Sum = 0 For i = 1 To 100 Sum = Sum + i If Sum = 3000 Then Exit For Next i

19、 Text1.Text = Sum End Sub,4. 循环的嵌套多重循环结构 如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。 上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:,(1)For I=. For J=. . Next J Next I,(2)For I=. Do While/Until . . Loop Next I,(3)Do While. For J=. . Next J Loop,(4)Do While/Until. Do While/Until . . L

20、oop Loop,对于循环的嵌套,要注意以下事项: (1) 内循环变量与外循环变量不能同名; (2) 外循环必须完全包含内循环,不能交叉; (3) 不能从循环体外转向循环体内,也不能从外循环转向内循环. 正 确 错 误,For i =1 To 10 For j=1 To 20 Next i Next j,For i =1 To 10 For i=1 To 20 Next i Next i,For i =1 To 10 For j=1 To 20 Next j Next i,For i =1 To 10 Next i For i =1 To 10 Next i,几种循环语句比较,循环结构与选择结

21、构的嵌套,在循环结构中可以完整嵌套选择结构即整个选择结构都属于循环体。在选择结构中嵌套循环结构时,则要求整个循环结构必须完整地嵌套在一个分支内,一个循环结构不允许出现在两个或两个以上的分支内。,(1)For I= IF Then End IF Next I,(6) IF Then For I= End IF Next I,(5)Select Case For I= Case Case Next I End Select,(3)For I= IF Then Next I End IF,(2)IF Then For I= Next I End IF,(4)For I= Select Case Ca

22、se Case End Select Next I,3.1.3 循环结构,【例3-11】计算九九乘法表。,创建一个空白的窗体,在单击窗体时计算并显示九九乘法表。,3.1.3 循环结构,程序代码如下: Private Sub Form_Click() 单击窗体显示乘法表 Dim i As Integer, j As Integer For i = 1 To 9 For j = 1 To i,Print Tab(j - 1) * 10 + 1); i Next j Next i End Sub,程序分析: 由于九九乘法表有九行,每行不同列,因此必须使用双重循环来实现。 外循环为九九乘法表的行循环,

23、内循环为每行的列循环。 内循环的次数每次都不同为1i。 使用Print语句在窗体上显示,使用Tab格式每列间隔10个字符。,例 编一程序验证哥德巴赫猜想:一个大于等于6的偶数可以表示为两个素数之和。例如: 6=3+3 8=3+5 10= 3+7,算法设计:设N为大于等于6的任一偶数,将其分解为N1和N2两个数,使用N1+N2=N,分别判断N1和N2是否为素数,若都是,则为一组解。若N1不是素数,就不必再检查N2是否素数。先从N1=3开始,直到N1=N/2为止。算法流程图如图4-29所示。将程序代码写到窗体的单击事件中。,实现上面算法的程序代码如下:,Private Sub Form_Click

24、() Dim N%, N1%, N2%, I%, K1%, K2% N=Val(InputBox(“输入大于6的偶数“) For N1 = 3 To N 2 Step 2 K1 = Int(Sqr(N1) For I = 2 To K1 判断N1是否是素数 If N1 Mod I = 0 Then Exit For Next I If I K1 Then 如果N1为素数,将N分解为N1+N2 N2 = N - N1 K2 = Int(Sqr(N2) For I = 2 To K2 判断N2是否是素数 If N2 Mod I = 0 Then Exit For Next I If I K2 Th

25、en 如果N2也为素数,则打印输出 Print N & “=“ & N1 & “+“ & N2 End If End If Next N1 End Sub,例 统计文本框中英文单词的个数。 算法设计 (1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False。 (2)若所取字符不是“空格”、“逗号”、“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True,则表示新单词的开始,让单词数Nw=Nw+1;让WT=True。 (3)若所取字符是“空格”、“逗号”、“分号”或“感叹号”等单词的分隔符,则表示字符不是单词内字符,

26、让WT=False。 (4)再依次取下一个字符,重复(2)(3)步直到文本结束。,Private Sub Command1_Click() Dim Nw As Integer, i As Integer, nL As Integer Dim Wt As Boolean Dim strI As String, strT As String strI = Text1.Text Nw = 0: Wt = False nL = Len(RTrim(strI) For i = 1 To nL strT = Mid$(strI, i, 1) 取第i个字符 Select Case Asc(strT) 字符为

27、空格、!、,、:、;、回车、换行等单分隔字符 Case 32, 33, 44, 46, 58, 59, 13, 10 Wt = False Case Else 当前字符不是单分隔字符 If Not Wt Then 前一个字符是单分隔字符 Nw = Nw + 1 Wt = True End If End Select Next i Picture1.Print “单词数为:“, Nw End Sub,例 字符的加密和解密 加密算法是: 将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=chr(Asc(c)+k) 例如:设序数k为5,这时 “A“ “F“, “a“ “f“

28、,“B“ “G“ 当加序数后的字母超过“Z“或“z“则 c=Chr(Asc(c)+k -26) 例如:You are good Dtz fwj ltti 解密算法:解密为加密的逆过程 将每个字母C减(或加)一序数K,即 c=chr(Asc(c)-k), 例如:序数k为5,这时 “Z“U“, “z“u“,“Y“T“ 当加序数后的字母小于“A“或“a“则 c=Chr(Asc(c)-k +26),Private Sub Command1_Click() Dim i As Integer, nl As Integer, iA As Integer Dim strI As String, strT As

29、 String, strP As String strI = Trim(Text1) i = 1: strP = “ nl = Len(RTrim(strI) Do While (i = “A“ And strT Asc(“Z“) Then iA = iA - 26 strP = strP + Chr$(iA) ElseIf (strT = “a“ And strT Asc(“z“) Then iA = iA - 26 strP = strP + Chr$(iA) Else strP = strP + strT End If i = i + 1 Loop Text2 = strP End Su

30、b,加密程序代码,Private Sub Command2_Click() Dim i As Integer, nl As Integer, iA As Integer Dim strI As String, strT As String, strP As String strI = Trim(Text2) i = 1: strP = “ nl = Len(RTrim(strI) Do While (i = “A“ And strT = “a“ And strT = “z“) Then iA = Asc(strT) - 5 If iA Asc(“a“) Then iA = iA + 26 st

31、rP = strP + Chr$(iA) Else strP = strP + strT End If i = i + 1 Loop Text3 = strP End Sub,解密程序代码,3.2.1 声明数组,1. 数组的概念 (1)数组 数组是同类变量的一个有序集合。数组名的命名规则与变量相同,但数组名代表的是一组变量,而不是一个变量。 (2)数组元素 数组中的元素称为数组元素,数组元素具有相同名字和数据类型,通过下标来识别它们。 数组元素的表示: 数组名(下标1,下标2,) 说明: 下标表示数组元素在数组中的位置。 数组的运算是对数组中的元素进行运算,可以使用变量的地方都可以使用数组,数

32、组元素可以进行赋值、运算等操作。,Visual Basic中的数组,按不同的方式可分为以下几类: 按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。 按数组的维数可分为:一维数组、二维数组、多维数组。 对象数组:菜单对象数组、控件数组。,3.2.1 声明数组,2. 声明数组 在使用数组前必须声明数组,是用来指明数组的数据类型和每一维的上下界。 语法: Private|Public|Dim 数组名(to)As 或: Private|Public|Dim数组名(to) 例:Dim a(1 to 10)

33、 As Integer 声明了a数组有10个元素,与上面声明等价形式: Dim a%(1 to 10),说明: 数组元素每一维的上下界表示为“上界 To 下界”,上下界不得超过 Long 数据类型的范围,省略下界时取值为0,下界上界,当上下界为小数时会自动进行四舍五入。 数组元素的个数为(第一维上界-下界+1)*(第二维上界-下界+1)*。 数组中所有元素具有相同的数据类型。但当数据类型为Variant型时,各元素能够包含不同类型的数据,例如数值型、字符串型等。 和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。 数组中各元素在内存占一片连续的存储空间,一维数组在内存中

34、存放的顺序是下标大小的顺序,如下图所示:,3.2.1 声明数组,3.2.1 声明数组,3Option Base 语句 当声明数组时下界省略,则表示从0开始,如果用户希望数组下标从1开始,就可以使用Option Base 语句来声明数组下标的默认下界。 语法: Option Base 0 | 1 说明: Option Base 语句必须在代码编辑器窗口的“通用”部分声明,表示本模块的所有数组的默认下界。 可以声明数组的默认下界为0或1。,例如,在模块中使用Option Base 语句: Option Base 1 将的数组下标默认设为 1 Private Sub Command1_Click()

35、 Dim a(5) As Integer 从a(1)到a(5)共5 个元素 Dim b(-1 to 5) As Integer 从b(-1)到b(5)共7 个元素 Dim c(2, 3) As Integer 从c(1,1)到c(2,3)共2*3为6 个元素 End Sub 一个模块中只能出现一次Option Base语句,而且必须位于本模块的“通用” 部分。,3.2.2 数组的操作,数组元素的赋值 由于数组是一组有序的元素组成,因此赋值时有三种方法:象变量一样一个个赋值,通过循环赋值和使用Array函数赋值。 (1) 用赋值语句对每个元素赋值 用赋值语句对每个元素赋值,就是用赋值语句对数组中

36、的每个元素分别赋值。,【例3-12】对数组a(5)的6个元素赋值为1,2,3,4,5,6,并用Print语句显示,运行界面如图所示。 在单击按钮Command1时运行程序: Private Sub Command1_Click() Dim a(5) As Integer a(0) = 1 a(1) = 2 a(2) = 3 a(3) = 4 a(4) = 5 a(5) = 6 Print a(0); a(1); a(2); a(3); a(4); a(5) End Sub,3.2.2 数组的操作,(2) 通过循环赋值 当数组的元素个数较多时,单独对每个元素赋值工作量就很大,可以使用循环结构进行

37、赋值。 【例3-13】使用循环结构对a(5)的6个元素赋值为1,2,3,4,5,6, 并用Print语句显示。 Private Sub Command1_Click() Dim a(5) As Integer Dim i As Integer For i = 0 To 5 使用循环赋值 a(i) = i + 1 Next i For i = 0 To 5 使用循环显示 Print a(i); Next i End Sub,例: 求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=A(1):iMax=1 For i = 2 To 10 If

38、A(i)Max Then Max=A(i) iMax=i End If Next I,例:将数组元素倒置 For i =1 To 102 t=A(i) A(i)=A(10-i+1) A(10-i+1)=t Next I,3.2.2 数组的操作,(3) 使用Array函数赋值 使用Array函数可以把数据集一次赋值给一个Variant型一维数组变量。 语法:变量名=Array(数据列表) 说明: 变量名只能是Variant型。 数据列表是用逗号“,”分隔的一系列数据。如果不提供数据列表,则创建一个长度为 0 的数组。 数组的下界默认为0,使用Option Base 语句指定下界也可以。 数组的上

39、界由数据列表的元素个数决定。,3.2.2 数组的操作,【例3-14】使用Array函数对数组a(5)的6个元素赋值 为1,2,3,4,5,6,并用Print语句显示。 Private Sub Command1_Click() Dim a a = Array(1, 2, 3, 4, 5, 6) For i = 0 To 5 Print a(i); Next i End Sub 程序分析: 声明变量a时,不说明数组的上下界。 “Dim a”语句表示a为Variant型变量。 数组a用Array函数赋值后,上界为5下界为0。,3.2.2 数组的操作,2数组函数 (1) LBound和UBound 函

40、数 LBound 函数用于指定的数组某维可用的最小下标(下界), UBound函数则用于指定的数组某维可用的最大下标(上界)。 语法:Ubound(数组名, 维) Lbound(数组名, 维) 说明:维一般是整型常量或变量。指定返回哪一维的上界。省略时为1表示第一维,2 表示第二维,依此类推。,例如,返回数组的上下界: Dim a(1 To 10, 5 To 15) As Integer Dim L As Integer, U As Integer L = LBound(a, 1) 返回1 U = UBound(a, 2) 返回15,3.2.2 数组的操作,(2) IsArray函数 IsAr

41、ray函数用来判断是否为数组。 语法: IsArray(变量名) 说明:变量如果是数组,则返回True,否则就返回False。 例如,使用IsArray函数判断变量是否为数组: Dim a a = 1 Print IsArray(a) a = Array(1, 2, 3, 4, 5) Print IsArray(a) 程序分析:当变量a=1时,IsArray(a)得出为False;用Array函数赋值后,IsArray(a)得出为True。,3.2.2 数组的操作,3. For EachNext语句 For EachNext语句类似于循环结构For Next,都是重复执行语句块直到循环结束。但

42、For EachNext语句是专门针对数组或对象集合而设置的。 语法: For Each 成员 In 数组|集合 语句块 Exit For Next 成员 说明: 对于数组成员只能是Variant型变量,代表数组中每个元素。对于集合,成员可以是Variant变量、Object变量、或对象。成员类似于ForNext循环中的循环控制变量,但不需要为其提供初值和终值。 循环的次数由数组的元素个数或集合的成员个数决定。 语句块就是循环体。,3.2.2 数组的操作,【例3-15】使用For EachNext语句对数组a(5)的6个元素赋值为1,2,3,4,5,6,并用Print语句显示。 Private

43、 Sub Command1_Click() Dim x Dim i As Integer Dim a(5) As Integer For i = 0 To 5 给数组赋值 a(i) = i + 1 Next i For Each x In a 显示数组 Print x; Next x End Sub 程序分析: x必须是Variant变量。 x的值是处于不断的变化之中,开始执行时,x是数组第1个元素的值,执行完一次循环体后,x变为数组第2个元素的值,当x为最后一个元素的值时结束循环。,3.2.3 静态数组和动态数组,静态数组是固定大小的数组,维数和大小都不能改变,前面介绍的数组都是静态数组。

44、动态数组是在运行时大小可以改变的数组。 1. 定义动态数组 在编程时,如果需要一个在运行过程中能够改变元素个数的数组,使用静态数组只能定义一个足够大的数组,当元素个数较少时就使用较少的元素,而元素个数较多时,就使用较多的元素,这种方法会导致占用大量内存,使操作速度变慢。静态数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。使用动态数组可以在运行时根据需要改变数组的大小,使用动态数组灵活、方便,并有助于有效管理内存。,动态数组的建立及使用 建立动态数组包括声明和大小说明两步: 1在使用Dim、Private或Public语句声明括号内为空的数组。 格式:Dim | Priva

45、te|Public 数组名()As 数据类型 例:Dim a() As Integer 2在过程中用ReDim语句指明该数组的大小。 格式:ReDim Preserve 数组名(下标1,下标2),Preserve参数:保留数组中原来的数据,例:Redim A(10) Redim Preserve A(20),说明: ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。 定长数组声时中的下标只能是常量,而动态数组ReDim 语句中的下标是常量,也可以是有了确定值的变量。 例: Private Sub Form_Click() Dim N As Integer

46、 N=Val(InputBox(“输入N=?”) Dim a(N) As Integer . End sub,在过程中可以多次使用ReDim来改变数组的大小,也可 改变数组的维数。 例:ReDim x(10) ReDim x(20) x(20) = 30 Print x(20) ReDim x(20, 5) x(20, 5) = 10 Print x(20, 5) 每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve 参数来保留数组中的数据。但此时 只能改变最后一维的大小。,3.2.2 数组的操作,【例3-16】 求Fibonacci数列:1,1,2,3,5,8,

47、,Fibonacci数列满足以下关系: F 1=1 F 2=1 F n=F n-1+Fn-2 功能要求:单击窗体Form时,用InputBox输入框输入要计算Fibonacci数列的个数,并用Print语句在窗体上显示。,Private Sub Form_Click() 单击窗体计算Fibonacci数列 Dim i As Integer, f() As Integer Dim n As Integer n = Val(InputBox(“请输入数组元素个数“, “输入“) If n 0 Then ReDim f(n) f(0) = 1: f(1) = 1 置F1,F2初值 For i = 2 To n - 1 计算Fn f(i) = f(i - 2) + f(i - 1) Next For i = 0 To n - 1 If i Mod 5 = 0 And i 0 Then Print 打印5个数换一行 ElseIf i Mod 5 0 Then Print Tab(8 * (i Mod 5); 在每隔8字符的位置打印一个数 End If Print f(i); Next i Print End If

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

当前位置:首页 > 其他


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