[ Exit Do ] [语句块]

Download Report

Transcript [ Exit Do ] [语句块]

第五章 循环结构
教学内容
循环语句
Timer控件和滚动条的使用
教学目标
•掌握循环语句
•掌握Timer控件和滚动条
5.1 循环语句
VB.Net主要提供了三种循环控制方式:
For…Next
While…End While
Do…Loop
5.1.1 For…Next循环
For循环语句通常用于将一组语句重复执行指定的次数。
For循环的重复次数,可以由设定一个计数变量及其上、下限来决定。
语句形式如下(方括号中的内容为可选项):
For 循环变量 = 初值 To 终值 [ Step 步长 ]
[ 语句块 ]
[ Exit For ]
[ 语句块 ]
Next [ 循环变量 ]
其中:
 循环变量为必选项。其类型通常是 Integer,但也可以是支持大于号 (>)、小
于号 (<) 和加号 (+) 的任何基本数值类型。
 步长,每次循环后循环变量的增量。一般为正,初值小于终值;若为负,这
时初值大于终值;如果省略了该项,则步长的默认值为1。
 语句块是放在 For 和 Next 之间的一条或多条语句,亦被称为循环体。它们
将被执行指定的次数。
 Exit For,当遇到该语句时,退出循环(无论是否执行完指定次数),执行
Next 语句后面的语句。
例如:编写一个计算正整数的阶乘的程序。
对任意正整数K,K!符号代表阶乘表达式,
我们有:
K! (k  1)!K
为了解决这个问题,可以用一个For循环
中的循环变量表示K的变化范围,在循环体
中计算当前K值的阶乘。新建工程Factorial,
在窗体上添加一个Button和一TextBox控件。
为BtnStart按钮的click事件过程,
添加下面的代码:
Private Sub BtnStart_Click(ByVal_
sender As System.Object, _
ByVal e As System.EventArgs) Handles
BtnStart.Click
Dim lngResult As Long
Dim i As Integer
TxtOutput.Clear()
lngResult = 1
For i = 1 To 15
lngResult = lngResult * i
TxtOutput.Text += i.ToString() +
"!=" + lngResult.ToString() _
+ vbCrLf
Next
End Sub
阶乘程序的运行结果
如果一个三位数的个位数、十位数和百位数的立方和等于该数自
身, 则称该数为水仙花数。编一程序求出所有的水仙花数。显然,
水仙花数要在100~999的范围内去找。我们对于这个范围内所
有的数一一检验其是否符合水仙花数的定义。项目的建立同上,
代码如下:
Private Sub BtnStart_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnStart.Click
Dim intMumber As Integer
Dim intHandred As Integer
Dim intTen As Integer
Dim intSingle As Integer
TxtOutput.Clear()
For intMumber = 100 To 999
intHandred = intMumber \ 100
intTen = (intMumber \ 10) Mod 10
intSingle = intMumber Mod 10
If intMumber = intHandred ^ 3 + intTen ^ 3 + intSingle ^ 3 Then
TxtOutput.Text += intMumber.ToString() + " = " + _
intHandred.ToString() + "^3 + " + intTen.ToString() _
+ "^3 + " + intSingle.ToString() + "^3" + vbCrLf
End If
Next
End Sub
水仙花数的运算
5.1.2 While...End While 循环
While...End While 循环用于对一条件表达式进行计算,如果值为True,则
执行循环体。每一次循环结束后,重新计算条件表达式。
While...End While与For循环的差别在于: For循环循环次数是不变的,执行
一定次数后结束循环。While循环的循环次数依赖与条件表达式的值,在不同情
况下循环次数不一样。While型循环结构使用While语句实现,语句形式如下:
While <条件表达式>
[语句块]
End While
其中:
条件表达式的值必须为 True 或 False。
如果表达式的值为 Nothing,则结果将作为 False 处理。
当表达式的值True时,则执行While后的循环体直到遇到 End While 语句。
随后控制返回到 While 语句并再次检查表达式结果。如果表达式仍为 True,则
重复上面的过程。如果为 False,则从 End While 语句后面的语句开始执行。
在设计While型循环时要注意在其循环体内应该在适当的时候使条件表达式
的值为False, 确保在执行了一定次数之后可以退出循环, 否则就成了“死循环”,
一旦程序进入这里, 将永远在循环结构中反复执行而无法结束。
编写一程序,计算1到100的整数和
(1+2+3…+100)。这道题非常简单,可
以通过公式(1+100)*100/2立刻计算出
结果。但这里采用逐项累加算法。新建
和Factorial同样界面的项目,为BtnStart
的Click事件编码如下:
Private Sub BtbStart_Click(ByVal sender As
System.Object, _
ByVal e As System.EventArgs) Handles
BtbStart.Click
Dim intSum As Integer
Dim i As Integer
intSum = 0
i=1
While i <= 100
intSum = intSum + i
i=i+1
End While
TxtOutput.Text = "1 + 2 + 3 + ... + 100 = "
+ intSum.ToString()
End Sub
累加程序的运行结果
5.1.3 Do…Loop循环
Do循环同样也是通过一个条件表达式来控制循环次数的循环结构。此种语句有
两种语法形式,条件前置的Do…Loop结构和条件后置的Do…Loop结构:
Do { While | Until } <条件表达式>
[语句块]
[ Exit Do ]
[语句块]
Loop
Do
[语句块]
[ Exit Do ]
[语句块]
Loop { While | Until } <条件表达式>
其中:
当条件表达式前置时,先计算表达式的值,因此当表达式的值在第一次计算
时就为False时,循环体一次也不执行。当条件表达式后置时,先执行一次循环体再
计算表达式的值,因此循环体至少被执行一次。
关键字 While 和 Until必选其一且只能选一个。While 用于指明条件表达式的
值为True时就执行循环体中的语句;Until正好相反。
Exit Do 语句将执行 Loop 语句后面的语句。也就是使得循环立即结束。
可以在 Do 循环中的任何位置放置任何数量的 Exit Do 语句。

1 1 1
   ...
4
3 5 7
利用Do循环求  的近似值。利用公式:
计算,直到最后一项的绝对值小于104为止。新建和前面一
样的项目,为BtnStart的Click事件编写如下代码:
Private Sub BtnStart_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles BtnStart.Click
Dim dblPI As Double = 0
Dim dblTolerance As Double = 1
Dim intTerm As Integer = 1
Dim shortSign As Short = 1
Do
dblPI += dblTolerance
intTerm += 2
shortSign = -shortSign
dblTolerance = shortSign / intTerm
Loop While Math.Abs(dblTolerance) > 0.0001
dblPI *= 4
Pi值的计算结果
TxtOutput.Text = "pi = " + dblPI.ToString()
End Sub
 1
5.2 Exit 语句
在程序中强制改变程序流程。如:强制跳转
至某个程序,或强制脱离循环。
VB .Net提供了Exit语句来满足这些要求。语
句形式如下:
Exit { Do | For | Function | Property | Select | Sub | Try | While }
使用中途跳转语句,可以为某些循环体或过
程设置明显的出口,能够增强程序的可读性,符
合结构化程序设计的要求。
• Exit For 立即退出所在的For循环。继续执行Next语句后面的语句。只
能在For...Next或For Each...Next循环内使用Exit For。当在嵌套的For循
环中使用Exit For时,Exit For会将控制传送到Exit For所在循环的外层
循环。
• Exit While 立即退出所在的While循环。继续执行End While语句后面的
语句。只能在While 循环内使用Exit While。当在嵌套的While循环中使
用Exit While时,Exit While将控制传送到Exit While所在循环的外层循
环。
• Exit Do 立即退出所在的Do循环。继续执行Loop语句后面的语句。只
能在Do循环内使用 Exit Do。在嵌套的Do循环中使用Exit Do时,Exit
Do会将控制传送到 Exit Do所在循环的外层循环。
• Exit Sub 立即退出所在的Sub过程。继续执行调用Sub过程的语句后面
的语句。只能在Sub 过程内使用 Exit Sub。
• Exit Function 立即退出所在的Function过程。继续执行调用Function过
程的语句后面的语句。只能在Function过程内使用Exit Function。
• Exit Property 立即退出所在的Property过程。继续执行调用Property过
程的语句,即继续执行请求或设置属性值的语句。只能在Property过程
内使用Exit Property。
• Exit Select 立即退出所在的Select Case。继续执行End Select语句后面的
语句。只能在Select Case 语句内使用Exit Select。
• Exit Try 立即退出所在的Try或Catch块。如果有Finally块,则继续执行
Finally块,否则继续执行End Try语句后面的语句。只能在
Try...Catch...Finally语句内使用Exit Try。
5.3 多重循环
多重循环:一个循环体内包含一个完整的循
环结构,内嵌的循环中还可以包含其他循环。 前
面介绍的三种循环语句都可以嵌套。
例如,要统计用1、2、3、4这四个数可以组
成的四位数。列出所有可能组成的四位数(四位
数字可以相同),并统计出四位数的个数。这个
问题可以用四重循环来解决.每层循环的初值为1,
终值为4,总的循环次数就是所有四位数的个数。
新建一个和前面一样的项目,并将ScrollBars的属性设置为VerticalBtnStart(目的是添
加一个垂直滚动条)。BtnStrat的Click事件代码如下:
Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles BtnStart.Click
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim intSum As Integer = 0
Dim intNumber As Integer
For i = 1 To 4
For j = 1 To 4
For k = 1 To 4
For l = 1 To 4
intNumber = 1000 * i + 100 * j + 10 * k + l
intSum += 1
TxtOutput.Text += intNumber.ToString() + " "
If intSum Mod 6 = 0 Then
TxtOutput.Text += vbCrLf
End If
Next
Next
Next
Next
TxtOutput.Text += vbCrLf + "sum=" + intSum.ToString()
End Sub
4个数字可以组合成的4位数
又例:公元5世纪末,我国古代数学家张丘建在
他编写的《算经》里提出了一个不定方程问题,世
界数学史上称为“百鸡问题”。题目是这样的:
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,
值钱一。百钱买百鸡,间鸡翁、母、雏各几何?
译成现代汉语就是说每只公鸡价值5个钱,每只
母鸡价值3个钱,每3只小鸡价值1个钱。现有100个
钱想买100只鸡,问公鸡、母鸡和小鸡各应买几只?
根据题意,设x,y分别为鸡翁,鸡母,鸡雏的数
目,则可得如下方程:
5x + 3y + z/3=100
x + y + z=160
三个未知数,只有两个方程,因此这是一个不
定方程问题。
新建一个和前面同样界面的项目HundredCock,为
BtnStart添加下列代码;
Private Sub BtnStart_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles BtnStart.Click
Dim intCock As Integer
Dim intHen As Integer
Dim intChicken As Integer
For intCock = 1 To 20
For intHen = 1 To 34 - intCock
intChicken = 100 - intCock - intHen
If intCock * 5 + intHen * 3 + intChicken / 3 = 100 Then
TxtOutput.Text += "Cock:" + intCock.ToString() + _
" Hen:" + intHen.ToString() + " Chicken:" _
+ intChicken.ToString() + vbCrLf
End If
Next
Next
End Sub
通过验证每一个可能的
解,最终找到全部正确的
解。因为20只公鸡的价钱
是100元,33.3只母鸡的
价钱是100元。就是说,
100元钱最多能买20只公
鸡或者34只母鸡。因此,
循环的次数最大分别取到
20以及34-公鸡数。程序
的运行结果如右。
百鸡问题
5.4 其它辅助控制语句
5.4.1 GoTo语句