[其它技巧]VB3.ppt

上传人:sccc 文档编号:5616539 上传时间:2023-08-02 格式:PPT 页数:88 大小:842.47KB
返回 下载 相关 举报
[其它技巧]VB3.ppt_第1页
第1页 / 共88页
[其它技巧]VB3.ppt_第2页
第2页 / 共88页
[其它技巧]VB3.ppt_第3页
第3页 / 共88页
[其它技巧]VB3.ppt_第4页
第4页 / 共88页
[其它技巧]VB3.ppt_第5页
第5页 / 共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.Th

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

3、可以简化成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(Text1.Text)y=不及格 If x=60 T

4、hen y=及格 Text2.Text=yEnd 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 String x=Val(Text1.Text)If x=60 Then y=及格 Els

5、e y=不及格 End If Text2.Text=yEnd 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(Text1.Text)If x=90 Then y=优 ElseIf x=80 Then,y=良 ElseIf x=70 Then y=

6、中 ElseIf x=60 Then y=及格 Else y=不及格 End If Text2.Text=yEnd Sub,程序分析:使用有多个条件的If.Then.Else结构,判断的顺序是“x=90”“x=80”“x=70”“x=60”剩下的就是“x60”。,3.1.2 Select Case语句(情况语句)形式:Select Case 变量或表达式Case 表达式列表1语句块1Case 表达式列表2语句块2Case Else语句块n+1End Select:与同类型的下面四种形式之一:表达式 例:A+5一组枚举表达式(用逗号分隔)2,4,6,8 表达式1 To 表达式2 60 to 10

7、0 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 Else y=不及格 End SelectSub Text2.Text=yEnd,Private Sub Command1_Click()单击按钮显示成绩 Dim x As Single Dim y As String x=Int(Text1.Text

8、)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.Then.Else 结构当只有一个条件时还可以使用IIf函数来实现,用IIf函数语句可以说是If.Then.Else 结构的简写版本。语法:IIF(条件,真部分,假部分)说明:IIf函数的步骤是先判断条件,当条件为True时执行真部分,否则就执行假部分。在【例3-2】中当分数=60为及格,否则为不及格

9、的关系可以用IIf函数表示为:y=IIf(x=60,及格,不及格),4.选择结构的嵌套 在IF语句的Then分支和Else分支中可以完整地嵌套另一IF语句或Select Case语句,同样Select Case语句每一个Case分支中都可嵌套另一IF语句或另一Select 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,注意:只要在一个分

10、支内嵌套,不出现交叉,满足结构规则,其嵌套的形式将有很多种,嵌套层次也可以任意多。对于多层IF嵌套结构中,要特别注意IF与Else的配对关系,一个Else必须与IF配结,配对的原则是:在写含有多层嵌套的程序时,建议使用缩进对齐方式,这样容易阅读和维护。,例,设计一个用户身份验证程序,运行界面如下图所示。,3.1.3循环结构,1DoLoop结构,Do 循环有两种形式。即“当型”循环(While结构)和“直到型”(Do While 结构)循环。“当型”循环结构的程序流程图如图“直到型”循环结构的程序流程图,“当型”循环的语法:Do While|Until 条件 语句块 Exit Do 语句块Loo

11、p,3.1.3 循环结构,“直到型”循环的语法:Do 语句块 Exit Do 语句块Loop While|Until 条件说明:“直到型”循环与“当型”循环所不同的是先执行语句块,然后测试条件,只要条件为 True 就循环语句块;如果条件为 False,则跳过循环体。这种“直到型”循环保证语句块至少被执行一次。,注意:在Do.Loop结构中Until和While不同,判断条件正好相反。Until结构是只要条件为False(而不是 True),就执行循环的语句块,否则跳出循环体。,3.1.3 循环结构,【例 3-6】用“当型”循环计算1到100的和。界面设计:在窗体界面中放置一个文本框Text1

12、、一个标签和一个按钮Command1,单击按钮Command1开始计算1100的和。,序代码如下:Private Sub Command1_Click()单击按钮开始计算 Dim i As Integer,Sum As Integer Sum=0:i=1,Do While i=100 Sum=Sum+i i=i+1 Loop Text1.Text=SumEnd Sub,例 求两个整数的最大公约数、最小公倍数,Dim n%,m%,nm%,r%m=Val(InputBox(m=)n=Val(InputBox(n=)nm=n*mIf m 0)m=n n=r r=m mod n LoopPrint 最

13、大公约数=,n Print 最小公倍数=,nm/n,算法使用转碾除法,流程图如右,实现的程序代码如下:,3.1.3 循环结构,【例3-7】用“直到型”循环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

14、End Sub,如果将循环体外的置初始值语句由“i=1”改为“i=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)如果步长为正值,则判断计数器是否大于终止值,如果大于则 跳出循环。

15、如果步长为负数则判断计数器是否小于终止值。(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=SumEnd Sub,【例3-9】ForNext循环结 构 计算1到100的和,步长-1

16、。Private 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=SumEnd Sub,3.1.3 循环结构,3退出循环结构用 Exit 语句可以直接退出ForNext循环和DoLoop循环。“Exit For”为退出ForNext循环,“Exit Do”为退出DoLoop循环。程序执行时遇到 Exit 语句,就不再执行循环结构中的任何语句立即跳出循环,跳转到循环结构的下一句执行。Exit 语句几乎

17、总是出现在循环体内嵌套的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 Text1.Text=SumEnd Sub,4.循环

18、的嵌套多重循环结构 如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:,(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.Loop.Loop,对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环

19、必须完全包含内循环,不能交叉;(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,几种循环语句比较,循环结构与选择结构的嵌套,在循环结构中可以完整嵌套选择结构即整个选择结构都属于循环体。在选择结构中嵌套循环结构时,则要求整个循环结构必须完整地

20、嵌套在一个分支内,一个循环结构不允许出现在两个或两个以上的分支内。,(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 Case Case End Select Next I,3.1.3 循环结构,【例3-11】计算九九乘法表。,创建一个空白的窗体,在单击窗体时计

21、算并显示九九乘法表。,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 iEnd Sub,程序分析:由于九九乘法表有九行,每行不同列,因此必须使用双重循环来实现。外循环为九九乘法表的行循环,内循环为每行的列循环。内循环的次数每次都不同为1i。使用Print语句在窗体上显示,使用Tab格式每列间隔10个字符。,例 编一程序验证哥德巴赫猜想:一个大于等于6的偶数可以

22、表示为两个素数之和。例如: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()Dim N%,N1%,N2%,I%,K1%,K2%N=Val(InputBox(输入大于6的偶数)For N1=3 To N 2 Step 2 K1=Int(Sqr(N1)For

23、 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 Then 如果N2也为素数,则打印输出 Print N&=&N1&+&N2 End If End If Next N1End Sub,例 统计文本框中英文单词的个数。算法设计(1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符

24、是否是单词内的字符,初值设为False。(2)若所取字符不是“空格”、“逗号”、“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True,则表示新单词的开始,让单词数Nw=Nw+1;让WT=True。(3)若所取字符是“空格”、“逗号”、“分号”或“感叹号”等单词的分隔符,则表示字符不是单词内字符,让WT=False。(4)再依次取下一个字符,重复(2)(3)步直到文本结束。,Private Sub Command1_Click()Dim Nw As Integer,i As Integer,nL As IntegerDim Wt As BooleanDim strI

25、As String,strT As StringstrI=Text1.TextNw=0:Wt=FalsenL=Len(RTrim(strI)For i=1 To nLstrT=Mid$(strI,i,1)取第i个字符Select Case Asc(strT)字符为空格、!、,、:、;、回车、换行等单分隔字符Case 32,33,44,46,58,59,13,10 Wt=FalseCase Else 当前字符不是单分隔字符 If Not Wt Then 前一个字符是单分隔字符 Nw=Nw+1 Wt=True End IfEnd SelectNext iPicture1.Print 单词数为:,N

26、wEnd Sub,例 字符的加密和解密加密算法是:将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式:c=chr(Asc(c)+k)例如:设序数k为5,这时 A F,a f,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,这时 ZU,zu,YT当加序数后的字母小于A或a则 c=Chr(Asc(c)-k+26),Private Sub Command1_Click()Dim i A

27、s Integer,nl As Integer,iA As IntegerDim strI As String,strT As String,strP As StringstrI=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 LoopText2=strPEnd

28、Sub,加密程序代码,Private Sub Command2_Click()Dim i As Integer,nl As Integer,iA As IntegerDim strI As String,strT As String,strP As StringstrI=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 strP=strP+Chr$(iA)Else strP=strP+strT End If

29、i=i+1 LoopText3=strPEnd Sub,解密程序代码,3.2.1 声明数组,1.数组的概念(1)数组数组是同类变量的一个有序集合。数组名的命名规则与变量相同,但数组名代表的是一组变量,而不是一个变量。(2)数组元素数组中的元素称为数组元素,数组元素具有相同名字和数据类型,通过下标来识别它们。数组元素的表示:数组名(下标1,下标2,)说明:下标表示数组元素在数组中的位置。数组的运算是对数组中的元素进行运算,可以使用变量的地方都可以使用数组,数组元素可以进行赋值、运算等操作。,Visual Basic中的数组,按不同的方式可分为以下几类:按数组的大小(元素个数)是否可以改变来分为:

30、定长数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。,3.2.1 声明数组,2.声明数组在使用数组前必须声明数组,是用来指明数组的数据类型和每一维的上下界。语法:Private|Public|Dim 数组名(to)As 或:Private|Public|Dim数组名(to)例:Dim a(1 to 10)As Integer 声明了a数组有10个元素,与上面声明等价形式:Dim a%(1 to 10),说明:数组元素每一维的上下界表示为“上界 To 下界”,上下

31、界不得超过 Long 数据类型的范围,省略下界时取值为0,下界上界,当上下界为小数时会自动进行四舍五入。数组元素的个数为(第一维上界-下界+1)*(第二维上界-下界+1)*。数组中所有元素具有相同的数据类型。但当数据类型为Variant型时,各元素能够包含不同类型的数据,例如数值型、字符串型等。和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序,如下图所示:,3.2.1 声明数组,3.2.1 声明数组,3Option Base 语句当声明数组时下界省略,则表示从0开始,如果用户希望数组下标

32、从1开始,就可以使用Option Base 语句来声明数组下标的默认下界。语法:Option Base 0|1说明:Option Base 语句必须在代码编辑器窗口的“通用”部分声明,表示本模块的所有数组的默认下界。可以声明数组的默认下界为0或1。,例如,在模块中使用Option Base 语句:Option Base 1将的数组下标默认设为 1Private Sub Command1_Click()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从

33、c(1,1)到c(2,3)共2*3为6 个元素End Sub一个模块中只能出现一次Option Base语句,而且必须位于本模块的“通用”部分。,3.2.2 数组的操作,数组元素的赋值由于数组是一组有序的元素组成,因此赋值时有三种方法:象变量一样一个个赋值,通过循环赋值和使用Array函数赋值。(1)用赋值语句对每个元素赋值用赋值语句对每个元素赋值,就是用赋值语句对数组中的每个元素分别赋值。,【例3-12】对数组a(5)的6个元素赋值为1,2,3,4,5,6,并用Print语句显示,运行界面如图所示。在单击按钮Command1时运行程序:Private Sub Command1_Click()

34、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)通过循环赋值当数组的元素个数较多时,单独对每个元素赋值工作量就很大,可以使用循环结构进行赋值。【例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 使用循环赋值

35、a(i)=i+1 Next i For i=0 To 5 使用循环显示 Print a(i);Next iEnd Sub,例:求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=A(1):iMax=1 For i=2 To 10 If A(i)Max ThenMax=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)=tNext I,3.2.2 数组的操作,(3)使用Array函数赋值使用Array函数可以把数据集一次赋值给一个Vari

36、ant型一维数组变量。语法:变量名=Array(数据列表)说明:变量名只能是Variant型。数据列表是用逗号“,”分隔的一系列数据。如果不提供数据列表,则创建一个长度为 0 的数组。数组的下界默认为0,使用Option Base 语句指定下界也可以。数组的上界由数据列表的元素个数决定。,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 En

37、d Sub 程序分析:声明变量a时,不说明数组的上下界。“Dim a”语句表示a为Variant型变量。数组a用Array函数赋值后,上界为5下界为0。,3.2.2 数组的操作,2数组函数(1)LBound和UBound 函数LBound 函数用于指定的数组某维可用的最小下标(下界),UBound函数则用于指定的数组某维可用的最大下标(上界)。语法:Ubound(数组名,维)Lbound(数组名,维)说明:维一般是整型常量或变量。指定返回哪一维的上界。省略时为1表示第一维,2 表示第二维,依此类推。,例如,返回数组的上下界:Dim a(1 To 10,5 To 15)As IntegerDim

38、 L As Integer,U As IntegerL=LBound(a,1)返回1U=UBound(a,2)返回15,3.2.2 数组的操作,(2)IsArray函数IsArray函数用来判断是否为数组。语法: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

39、 数组的操作,3.For EachNext语句For EachNext语句类似于循环结构For Next,都是重复执行语句块直到循环结束。但For EachNext语句是专门针对数组或对象集合而设置的。语法:For Each 成员 In 数组|集合 语句块 Exit ForNext 成员说明:对于数组成员只能是Variant型变量,代表数组中每个元素。对于集合,成员可以是Variant变量、Object变量、或对象。成员类似于ForNext循环中的循环控制变量,但不需要为其提供初值和终值。循环的次数由数组的元素个数或集合的成员个数决定。语句块就是循环体。,3.2.2 数组的操作,【例3-15】

40、使用For EachNext语句对数组a(5)的6个元素赋值为1,2,3,4,5,6,并用Print语句显示。Private 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 xEnd Sub程序分析:x必须是Variant变量。x的值是处于不断的变化之中,开始执行时,x是数组第1个元素的值,执行完一次循环体后,x变为数组第2个元素的值,当x为最后一个元素的值时结束循环。,3.2.3 静

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

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

43、Sub Form_Click()Dim N As Integer 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数

44、列:1,1,2,3,5,8,,Fibonacci数列满足以下关系:F 1=1F 2=1F 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 计

45、算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 IfEnd Sub,3.2.2 数组的操作,2.保留数组元素值使用具有Preserve 关键字的ReDim语句既可以改变数组大小又不丢失数组中的数据。语法:ReDim Preserve数组名(第一维上下界,)说明:当改变原有数组最末维的大小时,使

46、用Preserve 关键字可以保留数组中原来的数据。如果改变数组的维数或其他维界则会产生错误。当重新定义的数组大小比原来小,则释放多余的存储单元,如果重新定义的数组大小比原来大,则将新增的元素单元赋该数据类型对应的初始值。,3.2.2 数组的操作,3.Erase语句Erase语句用于重新初始化静态数组的元素,或者释放动态数组的存储空间。语法:Erase 数组1,数组2,说明:数组1,数组2,可以是静态数组名或动态数组名。Erase语句对静态数组设置初始值,对动态数组则释放存储空间,使其成为没有存储单元的空数组。,3.2.4 多维数组,1.二维数组二维数组中元素的存储顺序是按行存储的,即下标先变

47、列后变行。,2.三维数组三维数组要用三个下标表示。例如,a(2,3,4)中的第一个下标表示行,第二个下标表示列,第三个下标表示页,元素总数为三个维数的乘积345为60个。,二维数组数据的输入,Const N=4,M=5,L=6Dim a(1 to N,1 to M)As Integer,i As Integer,j As Integer,k%1.给二维数组a输入数据的程序段如下:For i=1 to 4 For j=1 to 5 A(i,j)=Val(InputBox(a(&I&,&j&)=?)Next j Next i,2.求最大元素及其所在的行和列 用变量max存放最大值,row,colu

48、mn存放最大值所在行列号,Max=a(1,1):row=1:Column=1 For i=1 To N For j=1 To M If a(i,j)a(row,Column)Then Max=a(i,j)row=i Column=j End If Next jNext iPrint 最大元素是;MaxPrint 在第 第&Column&列,3.矩阵的转置,方阵的转置的程序代码如下:For i=To For j=To I-1 Temp=a(i,j)a(i,j)=a(j,i)a(j,i)=Temp Next j Next i,设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程

49、序代码如下:For i=To For j=To N b(j,i)=a(i,j)Next jNext i,3.3 用户定义类型,用户定义类型将不同的数据类型按需要组合起来,创建自定义的数据类型,也称为记录类型。【例3-17】中学生的姓名为字符型,而成绩则为数值型,必须使用Student和Score两个数组来表示,如果再增加学号和性别,就又必须增加数组。创建用户定义类型的格式:Private|Public Type 用户定义类型名 用户定义类型元素 As 数据类型 用户定义类型元素 As 数据类型 End Type,3.4.1 算法分析,1.算法的特点作为算法应具有以下特点:(1)确定性算法的确定

50、性是指每个步骤都应准确无误,没有歧义性。(2)可行性算法的可行性是指算法都是计算机能够有效执行的、可以实现的,并能够得到确定的结果的。针对VB的算法应是VB的语言功能可以实现的算法。(3)有穷性一个算法的步骤必须是有限的,是计算机能够在合理的时间内完成的。程序的循环不会进入死循环,有循环的结束条件。,3.4.1 算法分析,(4)输入性算法可以有多个输入,也可以没有输入,算法的输入必须是计算机可以执行的。如果由计算机自己产生数据输入则表示没有输入。(5)输出性算法必须有一个或多个输出,因为算法是计算机用于解题的方法,必须将结果输出,否则没有意义,因此算法必须具有输出的功能。VB是结构化设计的程序

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号