配色: 字号:
《Visual Basic程序设计(第4版)》第6章 循环结构程序设计
2023-05-25 | 阅:  转:  |  分享 
  
单元六 循环结构程序设计 程序设计中的循环结构(简称循环)是指在程序中,从某处开始有规律地反复执行某一操作块(或程序块)的现象。被重复
执行的该操作块(或程序块)称为循环体,循环体的执行与否及次数多少视循环类型与条件而定。当然,无论何种类型的循环结构,其共同的特点是
:必须确保循环体的重复执行能被终止(即非无限循环)。 单元六 循环结构程序设计For 循 环 1Do 循 环 2列表框与组合框控
件 3常 用 算 法 实 例 46.1 For循环6.1.1 For循环的简单设计 求1 + 3 + 5 + … + 99
的值。Private Sub Command1_Click() Dim s As Integer, n As Integer
s = 0 For n = 1 To 100 Step 2 s = s + n Next n Label2.
Caption = s End SubFor〈循环变量〉=〈初值〉To〈终值〉[Step〈步长〉] [ 语句组1 ] [
Exit For] [ 语句组2 ] Next [ 循环变量 ] For语句的执行过程:进入For循环后,首先把〈初值〉赋给〈
循环变量〉,检查〈循环变量〉的值是否超过〈终值〉。如果超过就停止执行循环体,跳出循环,执行Next后面的语句;否则执行一次循环体,
然后把〈循环变量〉+〈步长〉的值赋给〈循环变量〉,重复上述过程。6.1.2 For循环的循环次数循环体为: For n = 1
To 100 Step 2 s = s + n Next n 循环体执行次数= Int((100-1)/2
+1)= Int(99/2+1)= Int(49.5+1)= Int(50.5)= 50次。 【相关知识】 (1)Fo
r循环遵循“先检查,后执行”的原则,即先检查〈循环变量〉是否超过〈终值〉,然后决定是否执行循环体。因次,循环的最少执行次数为0次。
(2)循环次数通过下式计算: 循环次数=INT((终值-初值)/步长+1) 如果计算出的循环次数
小于或者等于0,循环次数为0,这时系统将不执行循环体。6.1.3 利用For循环实现图形的输出Private Sub Form_
Load() Print: Print: Print Show For i = 1 To 5 Print Ta
b(5 + i); String(6 – i, "★"); Spc(6); String(i, "▲"); Spc(6); Str
ing(6 – i, "★") Next iEnd Sub6.1.4 For循环的嵌套Private Sub Form_Loa
d() Show FontSize = 12 Print Tab(25); "九九表" Print Print "
"; For i = 1 To 9 Print Tab(i 6); i; Next i Prin
t For j = 1 To 9 Print j; " "; For k = 1 To 9 m = j
k Print Tab(k 6); m; " "; Next k Print Next jEnd
Sub6.2 Do循环6.2.1 前测型Do循环语句 设有一张厚为x mm,面积足够大的纸,将它不断地对折。试问对折多少次
后,厚度可达珠穆朗玛峰的高度。Private Sub Command1_Click() n = 0 h = Text1.Tex
t Do While h < 8848000 n = n + 1 h = 2 h Loop Text2.Te
xt = n Text2.Locked = TrueEnd Sub 已知s = 1×2×3×…×n,计算出s不大于5000时
的最大n值。 Private Sub Command1_Click() Dim n As Integer, s As Long
CurrentY = Label2.Height + 200 n = 1 s = 1 D
o Until s > 5000 n = n + 1 s = s n
Print n, s Loop Label1.Caption = "n = " & Str(n –
1)End Sub前测型Do循环的特点是:先判断循环条件,根据条件决定是否执行循环体,执行循环体的最少次数为0。其语法格式为:Do
[{ While | Until }〈条件〉] [〈语句组1〉] [Exit Do] [〈语句组2〉]Loop6.2
.2 后测型Do循环语句设计程序,完成华氏温度向摄氏温度的转换。 Private Sub Form_Load() Dim h
As String, s As Single, ts As String Do h = InputBox("请输入华氏温度
", "华氏温度") If h <> "" Then s = Int((h - 32) 5 / 9)
MsgBox "摄氏温度为" & Str(s), 0 + 48 + 256, "转换为摄氏
温度" End If Loop While h <> "" End Sub
输入有效数字的位数,利用公式计算圆周率?的近似值。Private Sub Command1_Click() Dim m As I
nteger m = Val(Text1.Text) p = 0#: s = 2#: e = 0.1 ^ m Do t
= s : p = Sqr(2 + p) : s = s 2 / p Loop Until Abs(t - s) < 0.
1 ^ m f = String(m - 1, "#") Text2.Text = Format(s, "0." & f)
Text1.SetFocusEnd SubPrivate Sub Text1_GotFocus() Text1.SelStart
= 0 Text1.SelLength = Len(Text1.Text)End Sub 后测型Do循环的执行特点是:先执
行循环体,然后判断条件,根据条件决定是否继续执行循环,因此执行循环的最少次数为1。其语法格式为:Do [〈语句组1〉] [
Exit Do] [〈语句组2〉]Loop [{While | Until} 〈条件〉]6.3 列表框与组合框控件6.3.1
列表框控件ListBox在列表框中列出1~100之间能被3整除的数。 Private Sub Command1_Click()
List1.Clear For n = 1 To 100 If n Mod 3 = 0 Then List1.AddI
tem n Next nEnd Sub (1)列表框(ListBox)通过显示多个选择项,供用户选择其中一项,达到与用户对话
的目的。如果有较多的选择项,超出所画的区域而不能一次全部显示时,VB会自动加上垂直滚动条。 选中某列表框,在属性框中修改其L
ist属性值,每输入一个选项后,按〈Ctrl〉+〈Enter〉换行,继续输入下一选项。ListBox控件的常用属性ListBox控
件的常用方法2. ListBox控件中项目的选择和移动利用ListBox控件,设计“选项移动”窗体。 (1) 建立应用程序
用户界面与设置对象属性。 属性设置Private Sub Form_Load() List1.AddItem "邓小平理论
" : List1.AddItem "体育" List1.AddItem "英语" : List1.AddItem "应
用文写作" List1.AddItem "VB程序设计" : List1.AddItem "高等数学" List1.Add
Item "工程制图" : List1.AddItem "工程测量" List1.AddItem "计算机应用基础" :
List1.AddItem "美学欣赏"End SubPrivate Sub Command1_Click() i = 0
Do While i < List1.ListCount If List1.Selected(i) = True Then
List2.AddItem List1.List(i) List1.RemoveItem i
i = i + 1 End If LoopEnd SubPrivate Sub Comma
nd2_Click() For i = 0 To List1.ListCount – 1 List2.AddItem Li
st1.List(i) Next List1.Clear End SubPrivate Sub Command3_Cli
ck() i = 0 Do While i < List2.List(i) If List2.Selected(i) =
True Then List1.AddItem List2.List(i) List2.Re
moveItem i i = i + 1 End If LoopEnd SubPrivate Sub Comma
nd4_Click() For i = 0 To List2.ListCount – 1 List1.AddI
tem List2.List(i) Next List2.Clear
End Sub6.3.2 组合框控件ComboBox利用组合框设计一个“简易抽奖机”。Private Sub Combo1_Ke
yPress(KeyAscii As Integer) If KeyAscii = 13 Then
Combo1.AddItem Combo1.Text, 0 Combo1.SelStart = 0
Combo1.SelLength = Len(Combo1.Text) End If If KeyAscii = 27
Then If Combo1.ListIndex <> –1 Then Combo1.RemoveI
tem Combo1.ListIndex End If End IfEnd SubPrivate Sub Comma
nd1_Click() Randomize n = Combo1.ListCount a = Int(Rnd n)
Combo1.ListIndex = a MsgBox "中奖的号码是:" & Chr(13) & Combo1.
Text, 0, "恭喜!"End Sub 组合框是组合列表框和文本框的特性而成的控件。它可以像列表框一样,让用户通过
鼠标选择所需的项目,也可以像文本框一样,用键入的方式选择项目(下拉式组合框除外),但输入的内容不能自动添加到列表框中。若用户选中列
表框中的某项,该项内容自动装入文本框中。组合框比列表框占用的屏幕空间要小。 6.4 常用算法实例6.4.1 穷举法 :对
所有可能的值进行逐一判断,找出其中符合条件要求的解。 我国古代数学家张丘建在“算经”里曾提出一个世界数学史上有名的百鸡问题:“
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问鸡翁、母、雏各几何?”编写程序,求出结果。 Private Sub
Command1_Click( ) List1.Clear For x = 1 To 19 For y = 1 To 3
3 z = 100 – x – y If 5 x + 3 y + z / 3 = 100 Then
p = Format(x, "@@@@") & Format(y, "@@@@@") & _
Format(z, "@@@@@") List1.AddItem p
End If Next NextEnd Sub 有一个长长的楼梯,如果一次上两阶,最后剩一阶;如果一次上3阶,最后
剩两阶;如果一次上5阶,最后剩4阶;如果一次上6阶,最后剩5阶;如果一次上7阶,刚好上完。请编写程序,计算该阶楼梯至少有多少台阶?
Private Sub Command1_Click() Dim x As Integer x = 7 Do If x
Mod 3 = 2 And x Mod 5 = 4 And x Mod 6 = 5 Then Label2.Capti
on = x Exit Do Else x = x + 14 End If LoopEnd Su
bPrivate Sub Command2_Click() Unload MeEnd Sub6.4.2 递推法 递推法就是在已
知某个结果的前提下,根据已经给出的(或是分析总结出的)递推公式,推出下一个结果。 输出斐波那契(Fibonacci)数列的前10
项。斐波那契数列是指该数列的前两个数分别是1、1,从第3个数开始每个数是其前两个数据的和。即第3个数是1+1=2,第4个数是1+2
=3,第5个数是2+3=5,第6个数是3+5=8,等等。Private Sub Command1_Click() Dim A A
s Integer, B As Integer, i As Integer A = 1: B = 1 Picture1.Pri
nt A Picture1.Print B For i = 2 To 5 A = A + B B = B + A
Picture1.Print A Picture1.Print B Next iEnd Sub 一个猴子摘了一些
桃子。第一天吃了一半,又多吃一个;第二天吃剩下的一半,又多吃了一个;……;到第5天时只剩下一个桃子了。请编写程序,计算猴子第一天共
摘了多少个桃子?Private Sub Command1_Click() Dim x As Integer, i As Inte
ger x = 1 For i = 1 To 4 x = 2 (x + 1) Next i Label2.Caption = x & "只"End Sub6.4.3 辗转相除法输入两个正整数,求它们的最大公约数。 Private Sub Command1_Click() Dim m As Integer, n As Integer m = Val(Text1.Text) n = Val(Text2.Text) If m < n Then t = m: m = n: n = t End If Do If n <= 0 Or m <= 0 Then MsgBox "请重新输入数据!" Exit Do End If r = m Mod n m = n n = r Loop While r <> 0 Label3.Caption = mEnd Sub 结束
献花(0)
+1
(本文系大高老师原创)