第3章VisualBasic语言进阶课件

上传人:仙*** 文档编号:241612451 上传时间:2024-07-09 格式:PPT 页数:95 大小:1.13MB
返回 下载 相关 举报
第3章VisualBasic语言进阶课件_第1页
第1页 / 共95页
第3章VisualBasic语言进阶课件_第2页
第2页 / 共95页
第3章VisualBasic语言进阶课件_第3页
第3页 / 共95页
点击查看更多>>
资源描述
第第3章章 Visual Basic语言语言进阶进阶 3.1 基本控制结构基本控制结构3.2 数组数组3.3 用户定义类型用户定义类型3.4 算法及举例算法及举例13.1 基本控制结构基本控制结构v3.1.1 顺序结构顺序结构v3.1.2 分支结构分支结构v3.1.3 循环结构循环结构23.1.1 顺序结构顺序结构 顺序结构顺序结构就是整个程序按书写顺序依次自上而下执行。就是整个程序按书写顺序依次自上而下执行。前面两章设计和编写的程序都是顺序结构的。前面两章设计和编写的程序都是顺序结构的。顺序结构如图所示,先执行顺序结构如图所示,先执行A A,再执行再执行B B,即自上而下即自上而下依次运行。图依次运行。图(左左)图为图为框式流程图框式流程图,图,图(右右)为为N-SN-S流程图流程图,又称为又称为盒图盒图。33.1.2 分支结构分支结构 分支结构分支结构用于判断并分支,又称为选择结构。用于判断并分支,又称为选择结构。如图所示,如图所示,E E代表条件,当代表条件,当E E条件成立(条件成立(TrueTrue)时执行时执行A A,否则(否则(FalseFalse)执行执行B B,两条分支汇合在一起为一个出口。两条分支汇合在一起为一个出口。分支结构有几种形式:分支结构有几种形式:If.Then.ElseIf.Then.Else结构、结构、Select Select CaseCase结构和结构和IIfIIf函数。函数。43.1.2 分支结构分支结构1If.Then.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结构可以结构可以简化成简化成If.Then语句。语句。53.1.2 分支结构分支结构【例例3-1】使用使用If.Then语句查询学生的成绩,大于等于语句查询学生的成绩,大于等于60分分的为及格,其余为不及格。的为及格,其余为不及格。界面设计:在窗体界面中创建两个文本框(界面设计:在窗体界面中创建两个文本框(Text1、Text2)、)、两个标签(两个标签(Label1、Label2)和一个按钮(和一个按钮(Command1)。)。文本框文本框Text1输入分数,单击按钮输入分数,单击按钮Command1则在文本框则在文本框Text2中显示成绩。中显示成绩。63.1.2 分支结构分支结构程序代程序代码如下:如下:Private Sub Command1_Click()单击按按钮显示成示成绩 Dim x As Single Dim y As String x=Val(Text1.Text)y=不及格不及格 If x=60 Then y=及格及格 Text2.Text=yEnd Sub程序分析:使用程序分析:使用If.Then语句,当句,当满足条件足条件“x=60”就就执行行Then后面的后面的语句句“y=及格及格”,否,否则就就执行行If.Then语句句后面的后面的语句。句。73.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=及格及格 Else y=不及格不及格 End If Text2.Text=yEnd Sub 83.1.2 分支结构分支结构【例例3-3】使用多个条件的使用多个条件的If.Then.Else结构查询学生的成绩,结构查询学生的成绩,将成绩分成优、良、中、及格和不及格,将成绩分成优、良、中、及格和不及格,90100为优,为优,8090为良,为良,7080为中,为中,6070为及格,为及格,60以下为不及格。以下为不及格。93.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=中中 ElseIf x=60 Then y=及格及格 Else y=不及格不及格 End If Text2.Text=yEnd Sub 程序分析程序分析:使用有多个条件的使用有多个条件的If.Then.Else结构,判断的顺序是结构,判断的顺序是“x=90”“x=80”“x=70”“x=60”剩下的就是剩下的就是“x0等。等。也可以也可以 是几种不同形式的组合,用逗号(,)将它们分隔开。是几种不同形式的组合,用逗号(,)将它们分隔开。例如,例如,-10,1 to 100。(3)Select Case和和End Select 必须成对出现。必须成对出现。123.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 Select Text2.Text=yEnd Sub 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。133.1.2 分支结构分支结构3.IIf函数函数If.Then.Else 结构当只有一个条件时还可以使用结构当只有一个条件时还可以使用IIf函数函数来实现,用来实现,用IIf函数语句可以说是函数语句可以说是If.Then.Else 结构的简写结构的简写版本。版本。语法语法:变量变量=IIF(条件条件,真部分真部分,假部分假部分)说明说明:IIf函数的步骤是先判断条件,当条件为函数的步骤是先判断条件,当条件为True时执行真部分,时执行真部分,否则就执行假部分。否则就执行假部分。在在【例例3-2】中当分数中当分数=60为及格,否则为不及格的关系为及格,否则为不及格的关系可以用可以用IIf函数表示为:函数表示为:y=IIf(x=60,及格及格,不及格不及格)143.1.2 分支结构分支结构4 4嵌套嵌套 嵌套是指把一个结构嵌入另嵌套是指把一个结构嵌入另一个结构之内。即一个结构之内。即IfIf和和End IfEnd If、Select CaseSelect Case和和End SelectEnd Select对都嵌对都嵌入,不能有交叉,因此在读程序入,不能有交叉,因此在读程序时,与时,与IfIf或或Select CaseSelect Case匹配的是匹配的是最近的最近的End IfEnd If或或End SelectEnd Select。如图所示为三层如图所示为三层IfIf嵌套的结嵌套的结构,构,IfIf与最近的与最近的End IfEnd If匹配成对,匹配成对,而且在书写时应养成每层缩进的而且在书写时应养成每层缩进的习惯便于程序的阅读。习惯便于程序的阅读。153.1.2 分支结构分支结构 例例3-53-5,解一元二次方程解一元二次方程axax2 2+bx+c=0+bx+c=0。一元二次方程一元二次方程的解的情况有下列几种可能:的解的情况有下列几种可能:a=0,不是二次方程;不是二次方程;b2-4ac=0,有两个相等实根有两个相等实根:b2-4ac0,有两个不等实根有两个不等实根:b2-4ac0计算复根的实部p和虚部q:输出两个复根:p+q,p-q输出两个实根:x1,x2aacbbx2422-=aacbbx2412-+-=abp2-=aacbq2)4(2-=真真真假假假173.1.3 循环结构循环结构 1DoLoop结构构Do 循循环有两种形式。即有两种形式。即“当型当型”循循环(While结构)和构)和“直到直到型型”(Do While 结构)循构)循环。当当E为真真 A False E TrueA“当型当型”循循环结构的程序流程构的程序流程图 A直到直到E为真真True E FalseA“直到型直到型”循循环结构的程序流程构的程序流程图 183.1.3 循环结构循环结构“当型当型”循环的语法循环的语法:Do While|Until 条件条件 语句块语句块 Exit Do 语句块语句块Loop“直到型直到型”循环的语法循环的语法:Do 语句块语句块 Exit Do 语句块语句块Loop While|Until 条件条件193.1.3 循环结构循环结构说明说明:“直到型直到型”循环与循环与“当型当型”循环所不同的是先执行循环所不同的是先执行语句块,然后测试条件,只要条件为语句块,然后测试条件,只要条件为 True 就循环语就循环语句块;如果条件为句块;如果条件为 False,则跳过循环体。这种则跳过循环体。这种“直直到型到型”循环保证语句块至少被执行一次。循环保证语句块至少被执行一次。注意注意:在:在Do.Loop结构中结构中Until和和While不同,判断不同,判断条件正好相反。条件正好相反。Until结构是只要条件为结构是只要条件为False(而不而不是是 True),),就执行循环的语句块,否则跳出循环体。就执行循环的语句块,否则跳出循环体。203.1.3 循环结构循环结构【例例 3-6】用用“当型当型”循环计算循环计算1到到100的和。的和。界面设计:在窗体界面中放置一个文本框界面设计:在窗体界面中放置一个文本框Text1、一个标一个标签和一个按钮签和一个按钮Command1,单击按钮单击按钮Command1开始计算开始计算1100的和。的和。213.1.3 循环结构循环结构序代序代码如下:如下: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 223.1.3 循环结构循环结构【例例3-7】用用“直到型直到型”循环循环While计算计算1到到100的和。的和。界面设计与界面设计与【例例3-6】相同,程序代码如下:相同,程序代码如下: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=3000 Then Exit For Next i Text1.Text=SumEnd Sub 303.1.3 循环结构循环结构4.嵌套嵌套 各种循各种循环结构中都可以嵌套其他任何循构中都可以嵌套其他任何循环结构,也可以嵌套构,也可以嵌套分支分支结构。各种构。各种结构在嵌套构在嵌套时必必须是完整地嵌入,不能交叉。是完整地嵌入,不能交叉。【例例3-11】计算九九乘法表。算九九乘法表。创建一个空白的窗体,在建一个空白的窗体,在单击窗体窗体时计算并算并显示九九乘法表。示九九乘法表。313.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);j&i&=&i*j;Next j Next iEnd Sub 程序分析程序分析:v由于九九乘法表有九行,每行不同列,因此必须使用双重循环来实现。由于九九乘法表有九行,每行不同列,因此必须使用双重循环来实现。v外循环为九九乘法表的行循环,内循环为每行的列循环。外循环为九九乘法表的行循环,内循环为每行的列循环。v内循环的次数每次都不同为内循环的次数每次都不同为1i。v使用使用Print语句在窗体上显示,使用语句在窗体上显示,使用Tab格式每列间隔格式每列间隔10个字符。个字符。323.2 数组数组3.2.1 声明数组声明数组3.2.2 数组的操作数组的操作3.2.3 静态数组和动态数组静态数组和动态数组3.2.4 多维数组多维数组333.2.1 声明数组声明数组 1.数组的概念数组的概念(1)数组数组数组数组是同类变量的一个有序集合。数组名的命名规则与变量是同类变量的一个有序集合。数组名的命名规则与变量相同,但数组名代表的是一组变量,而不是一个变量。相同,但数组名代表的是一组变量,而不是一个变量。(2)数组元素数组元素数组中的元素称为数组中的元素称为数组元素数组元素,数组元素具有相同名字和数据,数组元素具有相同名字和数据类型,通过下标来识别它们。类型,通过下标来识别它们。数组元素的表示数组元素的表示:数组名数组名(下标下标1,下标下标2,)说明:说明:下标表示数组元素在数组中的位置。下标表示数组元素在数组中的位置。数组的运算是对数组中的元素进行运算,可以使用变量的地数组的运算是对数组中的元素进行运算,可以使用变量的地方都可以使用数组,数组元素可以进行赋值、运算等操作。方都可以使用数组,数组元素可以进行赋值、运算等操作。343.2.1 声明数组声明数组2.声明数组声明数组在使用数组前必须声明数组,是用来指明数组的数在使用数组前必须声明数组,是用来指明数组的数据类型和每一维的上下界。据类型和每一维的上下界。语法:语法:Private|Public|Dim 数组名数组名(第一维上下第一维上下界,界,)As 数据类型数据类型说明:说明:数组元素每一维的上下界表示为数组元素每一维的上下界表示为“下界下界 To 上界上界”,上下界不得超过上下界不得超过 Long 数据类型的范围,省略下界时数据类型的范围,省略下界时取值为取值为0,下界,下界上界,当上下界为小数时会自动进行上界,当上下界为小数时会自动进行四舍五入。四舍五入。353.2.1 声明数组声明数组数组元素的个数数组元素的个数为(第一维上界为(第一维上界-下界下界+1)*(第(第二维上界二维上界-下界下界+1)*。数组中所有元素具有相同的数据类型。但当数据数组中所有元素具有相同的数据类型。但当数据类型为类型为Variant型时,各元素能够包含不同类型的数型时,各元素能够包含不同类型的数据,例如数值型、字符串型等。据,例如数值型、字符串型等。例如:例如:dim a(10)as integer dim a(-2 to 3)as integer dim a(2,3)as integer dim a(-3 to 3,4)as integer363.2.1 声明数组声明数组3Option Base 语句语句当声明数组时下界省略,则表示从当声明数组时下界省略,则表示从0开始,如果用户希望开始,如果用户希望数组下标从数组下标从1开始,就可以使用开始,就可以使用Option Base 语句来声明数语句来声明数组下标的默认下界。组下标的默认下界。语法语法:Option Base 0|1说明说明:Option Base 语句必须在代码编辑器窗口的语句必须在代码编辑器窗口的“通用通用”部部分声明,表示本模块的所有数组的默认下界。分声明,表示本模块的所有数组的默认下界。可以声明数组的默认下界为可以声明数组的默认下界为0或或1。373.2.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 从从c(1,1)到到c(2,3)共共2*3为为6 个元素个元素End Sub 一个模块中只能出现一次一个模块中只能出现一次Option Base语句,而且必须位于语句,而且必须位于本模块的本模块的“通用通用”部分。部分。383.2.2 数组的操作数组的操作 1.数组元素的赋值数组元素的赋值由于数组是一组有序的元素组成,因此赋值时有三由于数组是一组有序的元素组成,因此赋值时有三种方法:象变量一样一个个赋值,通过循环赋值和种方法:象变量一样一个个赋值,通过循环赋值和使用使用Array函数赋值。函数赋值。(1)用赋值语句对每个元素赋值用赋值语句对每个元素赋值用赋值语句对每个元素赋值,就是用赋值语句对数用赋值语句对每个元素赋值,就是用赋值语句对数组中的每个元素分别赋值。组中的每个元素分别赋值。(快讲)(快讲)393.2.2 数组的操作数组的操作【例例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 403.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 使用循环赋值使用循环赋值 a(i)=i+1 Next i For i=0 To 5 使用循环显示使用循环显示 Print a(i);Next iEnd Sub 413.2.2 数组的操作数组的操作(3)使用使用Array函数赋值函数赋值 使用使用Array函数可以把数据集一次赋值给一个函数可以把数据集一次赋值给一个Variant型一型一维数组变量。维数组变量。语法:语法:变量名变量名=Array(数据列表数据列表)说明:说明:变量名只能是变量名只能是Variant型。型。数据列表是用逗号数据列表是用逗号“,”分隔的一系列数据。如果不提供数分隔的一系列数据。如果不提供数据列表,则创建一个长度为据列表,则创建一个长度为 0 的数组。的数组。数组的下界默认为数组的下界默认为0,使用,使用Option Base 语句指定下界也可语句指定下界也可以。数组的上界由数据列表的元素个数决定。以。数组的上界由数据列表的元素个数决定。423.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。433.2.2 数组的操作数组的操作2数组函数数组函数(1)LBound和和UBound 函数函数 LBound 函数用于指定的数组某维可用的最小下标(下函数用于指定的数组某维可用的最小下标(下界),界),UBound函数则用于指定的数组某维可用的最大下函数则用于指定的数组某维可用的最大下标(上界)。标(上界)。语法语法:Ubound(数组名数组名,维维)Lbound(数组名数组名,维维)说明:维是指定某一维,省略时为说明:维是指定某一维,省略时为1表示第一维,表示第一维,2 表示第表示第二维,依此类推。例如,返回数组的上下界:二维,依此类推。例如,返回数组的上下界:Dim a(1 To 10,5 To 15)As IntegerDim L As Integer,U As IntegerL=LBound(a,1)返回返回1U=UBound(a,2)返回返回15 443.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。453.2.2 数组的操作数组的操作3.For EachNext语句语句For EachNext语句类似于循环结构语句类似于循环结构For Next,都是重复执行语句块直到循环结束。但都是重复执行语句块直到循环结束。但For EachNext语句是专门针对数组或对象集合而设语句是专门针对数组或对象集合而设置的。语法:置的。语法:For Each 成员成员 In 数组数组|集合集合 语句块语句块 Exit ForNext 成员成员(自学)(自学)463.2.2 数组的操作数组的操作3.For EachNext语句语句说明:说明:对于数组成员只能是对于数组成员只能是Variant型变量,代表数组中型变量,代表数组中每个元素。对于集合,成员可以是每个元素。对于集合,成员可以是Variant变量、变量、Object变量、或对象。成员类似于变量、或对象。成员类似于ForNext循环中循环中的循环控制变量,但不需要为其提供初值和终值。的循环控制变量,但不需要为其提供初值和终值。循环的次数由数组的元素个数或集合的成员个数决循环的次数由数组的元素个数或集合的成员个数决定。定。语句块就是循环体。语句块就是循环体。473.2.2 数组的操作数组的操作【例例3-15】数组数组a(5)的的6个元素已经赋值为个元素已经赋值为1,2,3,4,5,6,使,使用用For EachNext语句用语句用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为最后一个元为最后一个元素的值时结束循环。素的值时结束循环。483.2.3 静态数组和动态数组静态数组和动态数组 静态数组静态数组是固定大小的数组,维数和大小都不能改变,前面是固定大小的数组,维数和大小都不能改变,前面介绍的数组都是静态数组。介绍的数组都是静态数组。动态数组动态数组是在运行时大小可以改变的数组。是在运行时大小可以改变的数组。1.定义动态数组定义动态数组在编程时,如果需要一个在运行过程中能够改变元素个数的在编程时,如果需要一个在运行过程中能够改变元素个数的数组,使用静态数组只能定义一个足够大的数组,当元素个数数组,使用静态数组只能定义一个足够大的数组,当元素个数较少时就使用较少的元素,而元素个数较多时,就使用较多的较少时就使用较少的元素,而元素个数较多时,就使用较多的元素,这种方法会导致占用大量内存,使操作速度变慢。元素,这种方法会导致占用大量内存,使操作速度变慢。使用动态数组可以在运行时根据需要改变数组的大小,使用使用动态数组可以在运行时根据需要改变数组的大小,使用动态数组灵活、方便,并有助于有效管理内存。动态数组灵活、方便,并有助于有效管理内存。493.2.3 静态数组和动态数组静态数组和动态数组 定义动态数组的语法定义动态数组的语法:Dim 数组名数组名()As 数据类型数据类型ReDim 数组名数组名(第一维上下界第一维上下界,)说明:说明:ReDim语句是一条可执行语句,可反复执行;语句是一条可执行语句,可反复执行;使用使用ReDim可以反复改变数组大小,但不能改变数组的数据可以反复改变数组大小,但不能改变数组的数据类型。类型。每次执行每次执行ReDim语句后,当前数组中的值会全部丢失,数值语句后,当前数组中的值会全部丢失,数值将重新初始化。将重新初始化。503.2.3 静态数组和动态数组静态数组和动态数组 例例1:Dim a()As integerReDim a(4,3)例例2:Dim a()As integerReDim a(3,3)ReDim a(10)513.2.3 静态数组和动态数组静态数组和动态数组【例例3-16】求求Fibonacci斐波纳契数列:斐波纳契数列:1,1,2,3,5,8,,Fibonacci数列满足以下关系:数列满足以下关系:F1=1F2=1Fn=Fn-1+Fn-2功能要求:单击窗体功能要求:单击窗体Form时,用时,用InputBox输入框输入要输入框输入要计算计算Fibonacci数列的个数,并用数列的个数,并用Print语句在窗体上显示。语句在窗体上显示。523.2.3 静态数组和动态数组静态数组和动态数组2.保留数组元素值保留数组元素值使用具有使用具有Preserve 关键字的关键字的ReDim语句既可以改变数组大语句既可以改变数组大小又不丢失数组中的数据。小又不丢失数组中的数据。语法:语法:ReDim Preserve 数组名数组名(第一维上下界第一维上下界,)说明说明:当改变原有数组最末维的大小时,使用当改变原有数组最末维的大小时,使用Preserve 关键字可关键字可以保留数组中原来的数据。以保留数组中原来的数据。如果改变数组的维数或其他维界则会产生错误。如果改变数组的维数或其他维界则会产生错误。当重新定义的数组大小比原来小,则释放多余的存储单元,当重新定义的数组大小比原来小,则释放多余的存储单元,如果重新定义的数组大小比原来大,则将新增的元素单元赋该如果重新定义的数组大小比原来大,则将新增的元素单元赋该数据类型对应的初始值。数据类型对应的初始值。533.2.3 静态数组和动态数组静态数组和动态数组例:例:Dim a()As integer,i as integer ReDim a(5)for i=0 to 5 a(i)=i next i ReDim Preserve a(6)a(6)=6 for i=0 to 6 print a(i);next i结果:结果:0 1 2 3 4 5 6 543.2.3 静态数组和动态数组静态数组和动态数组3.Erase语句语句Erase语句用于重新初始化静态数组的元素,或者语句用于重新初始化静态数组的元素,或者释放动态数组的存储空间。释放动态数组的存储空间。语法语法:Erase 数组数组1,数组数组2,说明:说明:数组数组1,数组数组2,可以是可以是静态数组名或动态数组名静态数组名或动态数组名。Erase语句对静态数组设置初始值,对动态数组则语句对静态数组设置初始值,对动态数组则释放存储空间,使其成为没有存储单元的空数组。释放存储空间,使其成为没有存储单元的空数组。553.2.3 静态数组和动态数组静态数组和动态数组例:例:Dim a()As integer,i as integer ReDim a(5)for i=0 to 5 a(i)=i next i Erase a 释放动态数组的存储空间释放动态数组的存储空间 563.2.4 多维数组多维数组 1.二维数组二维数组二维数组中元素的存储顺序是按行存储的,即下标先变二维数组中元素的存储顺序是按行存储的,即下标先变列后变行。列后变行。2.三维数组三维数组 三维数组要用三个下标表示。例如,三维数组要用三个下标表示。例如,a(2,3,4)中的第一个中的第一个下标表示行,第二个下标表示列,第三个下标表示页,元下标表示行,第二个下标表示列,第三个下标表示页,元素总数为三个维数的乘积素总数为三个维数的乘积345为为60个。个。573.2.4 多维数组多维数组【例例3-17】根据根据4名学生的语文、数学和英语成绩,计算名学生的语文、数学和英语成绩,计算并显示每人的平均成绩和每门课程的平均成绩。学生的信息并显示每人的平均成绩和每门课程的平均成绩。学生的信息如下表所示。如下表所示。姓名姓名语文语文数学数学英语英语平均成绩平均成绩李小明李小明988489王强王强828679赵雷赵雷767972陈敏陈敏667269平均成绩平均成绩功能要求:单击窗体,输入学生分数并计算每人平均成绩功能要求:单击窗体,输入学生分数并计算每人平均成绩和每门课程的平均成绩,并用和每门课程的平均成绩,并用Print语句显示在窗体上。语句显示在窗体上。583.3 用户定义类型用户定义类型 用户定义类型将不同的数据类型按需要组合用户定义类型将不同的数据类型按需要组合起来,创建自定义的数据类型,也称为起来,创建自定义的数据类型,也称为记录类型记录类型。在在【例例3-173-17】中学生的姓名为字符型,而成中学生的姓名为字符型,而成绩则为数值型,必须使用绩则为数值型,必须使用Student和和Score两个数组两个数组来表示,如果再增加学号和性别,就又必须增加来表示,如果再增加学号和性别,就又必须增加数组。数组。(自学)(自学)593.3 用户定义类型用户定义类型 创建用户定义类型的格式:创建用户定义类型的格式:Private|Public Type 用户定义类型名用户定义类型名 用户定义类型元素用户定义类型元素 As 数据类型数据类型 用户定义类型元素用户定义类型元素 As 数据类型数据类型 End Type 元素的表示形式:元素的表示形式:用户类型变量名用户类型变量名.用户类型元素用户类型元素603.3 用户定义类型用户定义类型 例题:定义一个有关职工信息的自定义类型:例题:定义一个有关职工信息的自定义类型:Type Client_Record cltName as String*16 cltPassword as String*8 cltDeposit as CurrencyEnd Type注意:注意:(1)自定义类型必须在标准模块或窗体模块的声明部分定)自定义类型必须在标准模块或窗体模块的声明部分定义,在标准模块中定义时默认为全局变量(义,在标准模块中定义时默认为全局变量(Public)。)。在在窗体模块定义时在关键字窗体模块定义时在关键字Type前应加上前应加上Private关键字。关键字。(2)自定义类型元素类型如果有字符串,则必须是定长字)自定义类型元素类型如果有字符串,则必须是定长字符串,即应该使用形式为:符串,即应该使用形式为:strName As String*常数常数613.3 用户定义类型用户定义类型【例例3-18】建立一个学生成绩处理程序,每个学生的记录建立一个学生成绩处理程序,每个学生的记录由姓名、语文成绩、数学成绩、英语成绩和平均成绩组成。由姓名、语文成绩、数学成绩、英语成绩和平均成绩组成。学生的信息如下表所示。学生的信息如下表所示。姓名姓名语文语文数学数学英语英语平均成绩平均成绩李小明李小明988489王强王强828679赵雷赵雷767972陈敏陈敏667269功能要求:单击窗体时运算并显示每个学生的平均成绩,功能要求:单击窗体时运算并显示每个学生的平均成绩,并用并用Print语句显示在窗体上。语句显示在窗体上。623.4 算法及举例算法及举例3.4.1 算法分析算法分析3.4.2 算法举例算法举例633.4.1 算法分析算法分析 算法算法就是解决某个特定问题的方法和步骤。就是解决某个特定问题的方法和步骤。1.算法的特点算法的特点作为算法应具有以下特点:作为算法应具有以下特点:(1)确定性)确定性算法的确定性是指每个步骤都应准确无误,没有歧算法的确定性是指每个步骤都应准确无误,没有歧义性。义性。(快讲)(快讲)643.4.1 算法分析算法分析(2)可行性)可行性算法的可行性是指算法都是计算机能够有效执行算法的可行性是指算法都是计算机能够有效执行的、可以实现的,并能够得到确定的结果的。针对的、可以实现的,并能够得到确定的结果的。针对VB的算法应是的算法应是VB的语言功能可以实现的算法。的语言功能可以实现的算法。(3)有穷性)有穷性一个算法的步骤必须是有限的,是计算机能够在一个算法的步骤必须是有限的,是计算机能够在合理的时间内完成的。程序的循环不会进入死循环,合理的时间内完成的。程序的循环不会进入死循环,有循环的结束条件。有循环的结束条件。653.4.1 算法分析算法分析(4)输入性)输入性 算法可以有多个输入,也可以没有输入,算法的算法可以有多个输入,也可以没有输入,算法的输入必须是计算机可以执行的。如果由计算机自己输入必须是计算机可以执行的。如果由计算机自己产生数据输入则表示没有输入。产生数据输入则表示没有输入。(5)输出性)输出性 算法必须有一个或多个输出,因为算法是计算机算法必须有一个或多个输出,因为算法是计算机用于解题的方法,必须将结果输出,否则没有意义,用于解题的方法,必须将结果输出,否则没有意义,因此算法必须具有输出的功能。因此算法必须具有输出的功能。663.4.1 算法分析算法分析2.算法的分类算法的分类计算机算法可以分为两大类:计算机算法可以分为两大类:(1)数值算法)数值算法数值算法主要用于解决一般数学解析方法难以处数值算法主要用于解决一般数学解析方法难以处理的一些数学问题,如解方程的根、求定积分、解理的一些数学问题,如解方程的根、求定积分、解微分方程等。微分方程等。(2)非数值算法)非数值算法非数值算法解决某些非数值问题的特定方法,如非数值算法解决某些非数值问题的特定方法,如对数据的排序、查找等。对数据的排序、查找等。673.4.1 算法举例算法举例 1用牛用牛顿迭代法解方程迭代法解方程 算法算法说明:牛明:牛顿迭代法是求解一元超越方程根的常用算迭代法是求解一元超越方程根的常用算法,已知精确解在初始解法,已知精确解在初始解x0 附近,附近,则根据牛根据牛顿迭代公式:迭代公式:输入:初始解入:初始解x0。输出:精确解出:精确解xn+1。(自学)(自学)683.4.1 算法举例算法举例【例例3-19】用牛用牛顿迭代法求方程迭代法求方程2x3-4x2+3x-6=0在在x0=3的准确的准确解解x,误差差小于等于小于等于0.0001。计算步算步骤:(1)先)先计算算f(x0)=2x3-4x2+3x-6和和f(x0)=6 x2-8x+3。(2)再根据迭代公式再根据迭代公式计算出算出x1。(3)当)当|xn+1-xn|0.0001时,xn+1为所求的方程根;否所求的方程根;否则,继续计算算x2、x3 xn。693.4.1 算法举例算法举例功能要求:单击窗体时,用牛顿迭代法计算方程的根,并功能要求:单击窗体时,用牛顿迭代法计算方程的根,并用用Print方法显示。方法显示。程序流程图如图,运行结果如图,计算出方程的根为程序流程图如图,运行结果如图,计算出方程的根为2。703.4.1 算法举例算法举例程序代程序代码如下:如下:Private Sub Form_Click()用牛用牛顿迭代法解方程迭代法解方程 Dim x As Single,x0 As Single,f As Single,f1 As Single x0=3:x=x0 Do x0=x f=(2*x0-4)*x0+3)*x0-6 f1=(6*x0-8)*x0+3 x=x0-f/f1 Loop While Abs(x-x0)=0.00001 Print Print Tab(8);解方程解方程 2x3-4x2+3x-6=0 Print Tab(8);方程的解方程的解=&xEnd Sub程序分析:程序分析:采用采用Do 循循环,当,当“Abs(x-x0)=0.00001”为True时执行循行循环。713.4.1 算法举例算法举例2.矩阵相乘矩阵相乘算法说明:算法说明:矩阵矩阵A(m,k)为为m行行k列的矩阵,矩阵列的矩阵,矩阵B(k,n)为为k行行n列的矩阵列的矩阵才能相乘,得出乘积才能相乘,得出乘积C(m,n)为为m行行n列的矩阵。则矩阵列的矩阵。则矩阵C的元的元素为:素为:Cij=Ai1B1j+Ai2B2j+AikBkj输入输入:矩阵:矩阵A和和B。输出输出:矩阵:矩阵C。循环结束条件循环结束条件:循环次数为矩阵的行列数。:循环次数为矩阵的行列数。(自学)(自学)723.4.1 算法举例算法举例【例例3-203-20】计算矩阵计算矩阵a a和和b b的乘积。的乘积。功能要求:单击窗体,计算矩阵功能要求:单击窗体,计算矩阵a a和和b b的乘积,并用的乘积,并用printprint语句将矩阵语句将矩阵a a、矩阵矩阵b b和矩阵和矩阵c c显示出来。显示出来。733.4.1 算法举例算法举例3折半查找法折半查找法算法说明:折半查找法是在算法说明:折半查找法是在已经排序已经排序的数组中查找一个数。的数组中查找一个数。查找的数用查找的数用Num表示,排序组用表示,排序组用a,最小值位置用最小值位置用Min表示,表示,最大值位置用最大值位置用Max表示,中间值位置用表示,中间值位置用Mid表示。表示。查找步骤如下:查找步骤如下:(1)判断)判断Num是否在要查找的数组范围内;是否在要查找的数组范围内;(2)计算得出)计算得出Mid=int(Min+Max)/2);(3)判断判断a(Mid)与与Num的大小;的大小;如果相等,则找到;如果相等,则找到;如果如果a(Mid)Num,则,则Max=Mid-1;(4)循环执行(循环执行(2)()(3)步骤;)步骤;(5)当)当MinMax,则没有该数。则没有该数。743.4.1 算法举例算法举例例如例如:key=64 的查找过程如下的查找过程如下minmaxmidmin mid max midmin 指示查找区间的下界指示查找区间的下界;max 指示查找区间的上界指示查找区间的上界;mid=int(min+max)/2)。753.4.1 算法举例算法举例输入输入:查找数据:查找数据Num和排序数组和排序数组a。输出输出:数据:数据Num在数组在数组a的位置。的位置。循环结束条件循环结束条件:找到数据或:找到数据或MinMax。【例例3-213-21】已经排序的数组为已经排序的数组为10个数:个数:0、3、15、28、32、53、74、84、145、268,输入要,输入要查找的数据,显示其在数组中的位置。查找的数据,显示其在数组中的位置。763.4.1 算法举例算法举例4起泡法排序起泡法排序算法说明:算法说明:起泡法排序就是每次将两两相邻的数进行比较,如果从小起泡法排序就是每次将两两相邻的数进行比较,如果从小到大排列,就将小的调换到前面,大的放在后面,就象气泡,到大排列,就将小的调换到前面,大的放在后面,就象气泡,重的沉在下面。重的沉在下面。数组用数组用a表示,起泡法排序的表示,起泡法排序的步骤步骤如下:如下:(1)第一轮将数据两两比较将较大的调换到后面,)第一轮将数据两两比较将较大的调换到后面,a(1)与与a(2)比较后调换,比较后调换,a(2)与与a(3)比较后调换比较后调换.,直到最后一个,直到最后一个数数a(N),这样就将最大的调换到最后面。这样就将最大的调换到最后面。773.4.1 算法举例算法举例4起泡法排序起泡法排序(2)第二轮再将数据两两比较将较大的调换到后面,)第二轮再将数据两两比较将较大的调换到后面,a(1)与与a(2)比较后调换,比较后调换,a(2)与与a(3)比较后调换比较后调换.,直到倒数第,直到倒数第二个数二个数a(N-1),这样就将第二大的调换到倒数第二位置。这样就将第二大的调换到倒数第二位置。(3)第)第N-1轮比较并调换,只剩下轮比较并调换,只剩下a(1)与与a(2)两个数需要比两个数需要比较后调换。较后调换。输入:未排序的数组。输入:未排序的数组。输出:排好序的数组。输出:排好序的数组。循环结束条件:外循环为循环结束条件:外循环为N-1次。次。783.4.1 算法举例算法举例例例49 38 65 97 76 13 27 30初初始始数数值值38 49 65 76 13 27 30 97第第一一趟趟38 49 65 13 27 30 76第第二二趟趟38 49 13 27 30 65第第三三趟趟38 13 27 30 49第第四四趟趟13 27 30 38第第五五趟趟13 27 30第第六六趟趟38497697139727973097137676762730136527653065131349493049273827383038【例例3-223-22】79小小 结结1.区分三种条件语句的差异;区分三种条件语句的差异;2.IIf函数;函数;3.ForNext循环应用场合与循环次数计算:循环应用场合与循环次数计算:Int(循环次数(终值初值)步长循环次数(终值初值)步长1)4.灵活的灵活的Do循环;循环;5.数组的定义;数组的定义;6.数组的输出(循环数组的输出(循环Print方法);方法);7.静态与动态数组的区别;静态与动态数组的区别;8.数组的初始化与运行中赋值;数组的初始化与运行中赋值;9.数组的应用(常用算法)。数组的应用(常用算法)。80习习 题题 一一 选择题选择题1结构化程序设计方法的核心规定了三种基本结构:顺结构化程序设计方法的核心规定了三种基本结构:顺序结构,序结构,_结构,循环结构。结构,循环结构。A.条件条件 B.分支分支 C.当形当形 D.逻辑逻辑2若要退出若要退出For循环,可使用的语句为循环,可使用的语句为_。A.Exit B.Exit Do C.Exit Sub D.Exit For3.对对Do循环结构作用说明正确的是:循环结构作用说明正确的是:_。A.不能用不能用Do循环设计出预先知道循环次数的循环循环设计出预先知道循环次数的循环B.While和和Until关键字必须选择其中之一关键字必须选择其中之一C.While和和Until关键字可以同时使用关键字可以同时使用D.While和和Until关键字的作用相反关键字的作用相反4.执行下面的程序后,执行下面的程序后,x的值是的值是_。x=5For i=1 To 20 Step 2x=x+i 5Next iA.21 B.22 C.23 D.24 81习习 题题5.Do 循环的语法结构如下:循环的语法结构如下:Do While 条件条件语句块语句块_A.End Do B.Loop C.Next D.End While6.在窗体放置一个命令按钮在窗体放置一个命令按钮Command1,并编写如下程序:并编写如下程序:Private Sub Command1_Click()For i=1 To 20 x=x+i Next iPrint xEnd Sub单击按钮后,窗体显示的结果是单击按钮后,窗体显示的结果是_。A.34 B.50 C.150 D.210 82习习 题题7.在窗体放置一个命令按钮在窗体放置一个命令按钮Command1和一个文本框和一个文本框Text1,并编写如下程序:并编写如下程序:Private Sub Command1_Click()x=A:y=B:z=CFor i=1 To 2x=y:y=z:z=xNext iText1.Text=x+y+zEnd Sub单击按钮后,文本框显示的结果是单击按钮后,文本框显示的结果是_。A.CBA B.BCA C.BCB D.CBC83习习 题题8.以下叙述正确的是以下叙述正确的是_。A.Select Case语句中的测试表达式可以是任何形语句中的测试表达式可以是任何形式的表达式式的表达式B.Select Case语句中的测试表达式只能是数值表语句中的测试表达式只能是数值表达式或字符表达式达式或字符表达式C.在执行在执行Select Case语句时,所有的语句时,所有的Case子句都子句都按出现的次序被顺序执行按出现的次序被顺序执行D.Select Case的测试表达式会多次计算的测试表达式会多次计算 84习习 题题9.在窗体放置一个命令按钮在窗体放置一个命令按钮Command1和一个文本和一个文本框框Text1,并编写如下程序:并编写如下程序:Private Sub Command1_Click()Dim i As Integer,n As IntegerFor i=0 To 50i=i+3n=n+1If i10 Then Exit ForNext iText1.Text=Str(n)End Sub单击按钮后,文本框显示的结果是单击按钮后,文本框显示的结果是_。A.2 B.3 C.4 D.5 85习习 题题10.要创建一个用户自定义类型,由学生的学号、姓名和三要创建一个用户自定义类型,由学生的学号、姓名和三门课程的成绩组成,则下面定义正确的是门课程的成绩组成,则下面定义正确的是_。86习习 题题二二.填空题填空题1.当程序进入循环结构时,出现死循环按当程序进入循环结构时,出现死循环按 _键可以终键可以终止程序运行。止程序运行。2以下循环结构循环执行了以下循环结构循环执行了_ 次。次。j=10
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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