1、计算机软件技术基础,Visual Basic程序设计,选择结构程序设计: IfThen 语句(单分支结构) If.ThenElse 语句(双分支结构) IfThen Else If 语句(多分支结构)结构 Select Case 语句(多分支结构),回 顾,语句格式:If 表达式1 Then 语句块1ElseIf 表达式2Then语句块2 Else语句块 n+1End If,格式:Select Case 测试变量或表达式Case 表达式表1语句块1Case 表达式表2语句块2Case 表达式表n语句块nCase Else语句块n+1End Select,表达式表有四种形式: 一个表达式。 如:
2、Case 6 一组用逗号隔开的枚举值。 如: Case 1,3,5,7 表达式1 TO 表达式2。 如: Case 1 To 10 Is 。 如:Case Is=80另外,在一个情况语句中,上述四种形式可以混合使用。,格式: Select Case 测试变量或表达式Case 表达式表1语句块1Case 表达式表2语句块2Case 表达式表n语句块nCase Else语句块n+1 End Select,在指定的条件下多次重复执行一组语句。 VB中提供了两种类型的循环语句:计数循环语句;条件循环语句。,DoLoop循环用于事先不知道循环次数的循环结构。 此种语句四种语法格式: Do While L
3、oop 语句 Do Loop While 语句 Do Until Loop 语句 Do Loop Until 语句,格式:Do While 条件表达式循环体 Loop,说明: 条件表达式可以是一个逻辑表达式,也可以是一个关系表达式,其值应是逻辑型。 Do While和Loop应成对出现。 循环体中要有控制循环的语句,以避免出现死循环。 这种循环可以一次也不执行循环体。,例 打印1到20的整数。,格式:Do While 条件表达式循环体 Loop,Private Sub Form_Click()Dim i As Integeri = 1Do While i = 20Print ii = i +
4、1Loop End Sub,格式:Do 循环体 Loop While条件表达式,说明: 至少要执行循环体一次。 与Do While循环的区别:Do While循环先测试条件是否成立,只有成立才执行循环;而该循环先执行循环体,后测试条件是否成立。,Private Sub Form_Click()Dim i As Integeri = 1DoPrint ii = i + 1Loop While i = 20 End Sub,例 打印1到20的整数。,格式: Do 循环体 Loop While条件表达式,格式:Do Until条件表达式循环体 Loop,打印1到20的整数。,Private Sub
5、Form_Click()Dim i As Integeri = 1Do Until i 20Print ii = i + 1Loop End Sub,Private Sub Form_Click()Dim i As Integeri = 1DoPrint ii = i + 1Loop Until i 20 End Sub,格式:Do 循环体 Loop Until条件表达式,打印1到20的整数。,例 DoLoop循环编程计算下式的值(两种方法当型和直到型)。,方法一、用当型循环实现,程序如下: Private Sub Form_Click() s = 0: i = 1 Do While i 10
6、0s = s + 1 / ii = i + 1 Loop Print “s=“; s End Sub,方法二、用直到型循环实现:,Private Sub Form_Click() s = 0: i = 1 Do s = s + 1 / i i = i + 1 Loop Until i 100 也可写为Loop While i = 100 Print “s=“; s End Sub,2. For Next循环,格式:For 循环变量 = 初值 To 终值 Step 步长Next 循环变量,For 循环变量 = 初值 To 终值 Step 步长Next 循环变量,For i = m To n St
7、ep xs = s * iPrint s Next i,m = 1: n = 10: s = 1: x = 2,说明: 格式中的参数说明:循环变量必须为数值型。循环的初值、终值和步长都是数值表达式,其值不一定是整数,可以是实数,VB自动取整。 增量参数可正可负。 如果增量为正,则初值必须小于等于终值 如果增量为负,则初值必须大于等于终值。 如果没有设置step,则增量默认为1。,m = 1: n = 10: s = 1 For i = m To n Step 2s = s * iPrint s Next i,在For语句和Next语句之间的语句序列称为循环体,可以是一个或多个语句。 Next是
8、循环终端语句,在Next后面的循环变量与For中的循环变量必须相同。 当循环是单层循环时,Next后面的循环变量可以不写。,m = 1: n = 10: s = 1 For i = m To n Step 2s = s * iPrint s Next i, For循环语句的执行过程 1)把初值赋给循环变量 2)检查循环变量的值是否超过终值 3)如果超过就不执行循环体,跳出循环,执行Next后面的语句 4)否则执行一次循环体,然后把循环变量增加步长,再赋给循环变量 重复上述过程。,m = 1: n = 10: s = 1 For i = m To n Step 2s = s * iPrint s
9、 Next i, 当初值等于终值时,不管步长是正数还是负数,都执行一次循环体。,m = 1: n = 10: s = 1 For i = m To n Step 2s = s * iPrint s Next i, 循环次数由初值、终值和步长决定,计算公式为: 循环次数=INT(终值 初值)/步长+1), For语句和Next语句必须成对出现,不能单独使用。 在循环体中可以使用循环变量,但一般不再对循环变量赋值。,For 循环变量 = 初值 To 终值 Step 步长Next 循环变量,例 3.18 求N的阶乘 N!=1*2*3*(N-1)*N,Private Sub Form_Click()D
10、im s As SingleDim n As Integers = 1n = Val(InputBox(“输入自然数n“)If n 34 ThenExit SubEnd IfFor i = 1 To ns = s * iPrint sNext iPrint “n=“; n, “s=“; s End Sub,3、循环的强制退出,Exit For Exit Do 常和If、Select Case配合使用,使循环中的程序不再继续进行,3-19 求从1001000之间所有3的倍数的数之和,当和大于3000时,停止计算并输出和。,Private Sub Command1_Click()Dim i As
11、IntegerDim sum As Integersum = 0i = 100Do While i 3000 ThenExit DoEnd IfEnd Ifi = i + 1LoopPrint i, sum End Sub,4、WhileWend循环,格式: While Wend,例 打印1到20的整数,功能:和Do While循环的功能完全相同,Private Sub Form_Click()Dim I As IntegerI = 1While I = 20Print II = I + 1Wend End Sub,允许将一个循环语句完整地放到另一个循环语句中,形成循环的嵌套或多层嵌套。 被包
12、含的循环称为内循环,包含循环的循环称为外循环。 如果嵌套层数较多,也可以从外到内依次称之为第一层循环,第二层循环,。 Visual Basic循环嵌套的层数没有限制,注意:外循环必须完全包含内循环,不得交叉。For i=1 To 9For j=1 to 9Next iNext j,5.循环的嵌套多重循环结构,(2) 循环语句的开始关键字和终端关键字必须成对出现 ForNext语句,内外层循环有相同终点时,允许共用一个关键字Next,各层中的循环控制变量不能省略,内层在前,外层在后,For i=1 To 9For j=1 to 9 Next j Next i,For i=1 To 9 For j
13、=1 to 9 Next j,i,可以写成,ForNext循环语句构成的嵌套来说,各层的循环变量名(成员名)不能相同。 For i=1 To 9For j=1 to 9Next jNext i (4)为了便于阅读和维护,编程时每层循环建议采用缩排方式书写。,3.21 百元买百鸡问题,Private Sub Form_click()ClsRem 百元买百鸡问题Print “公鸡“, “母鸡“, “小鸡“For x = 0 To 20For y = 0 To 33z = 100 - x - yIf 5 * x + 3 * y + z / 3 = 100 ThenPrint x, y, zEnd I
14、fNext y, x End Sub,100元钱买100只鸡 公鸡5元一只 母鸡3元一只 小鸡1元三只,循环结构程序设计 VB中提供了两种类型的循环语句:计数循环语句;条件循环语句。 要求掌握的循环结构:DoLoop For.Next DoLoop语句有四种语法格式: Do While Loop 语句 Do Loop While 语句 Do Until Loop 语句 Do Loop Until 语句,小 结,For 循环变量 = 初值 To 终值 Step 步长Next 循环变量,小 结,循环次数计算公式为: 循环次数=INT(终值 初值)/步长+1),习 题,3-23 用下面公式计算的近似
15、值,直到最后一项的绝对值小于10-6为止,Private Sub Form_Click() Dim s As Integer Dim n As Single, t As Single, pi As Single n = 1 pi = 0 s = 1 t = 1 Do While Abs(t) = 0.000001 pi = pi + t n = n + 2 s = -s t = s / n Loop pi = pi * 4 Print “pi=“; pi End Sub,5-2 编程求ex的近似值展开式。 要求最后一项的值小于等于0.000001为止。,Private Sub Form_Cli
16、ck() Dim x As Single, y As Single, f1 As Single Dim f2 As Single, k As Integer x = InputBox(“输入x的值“, “求exp(x)的值“) y = 1 f1 = x For k = 2 To 1000 y = y + f1 f2 = f1 * x / k If Abs(f2) 0.000001 Then Exit For Else f1 = f2 End If Next k Print “exp(“; x; “)=“; y End Sub,5-3 求一个数,它除3余2,除5余3,除7余2,求满足上面要求的最
17、小正整数,Private Sub Form_Click()Dim a As IntegerIf a Mod 3 = 2 And a Mod 5 = 3 And a Mod 7 = 2 ThenPrint aEnd IfEnd Sub,Exit For,For a = 2 To 1000Next a,5-4 求所有的3位数,它满足该数中某两位有相同数字,且该数是一个完全平方数,并求出所有这些数的和。,Private Sub Form_Click()Dim a As IntegerDim b As IntegerDim sum As IntegerFor a = 10 To 31b = a * asum = sum + bNext aPrint sum End Sub,Dim b3 As Integer, b2 As IntegerDim b1 As Integerb3 = b 100b2 = (b 10) Mod 10b1 = b Mod 10If b1 = b2 Or b1 = b3 Or b2 = b3 ThenPrint a, bEnd If,习题三 三、编程题 5-9,实验题,