第 3章 控制语句与程序调试
学习目标:
? 掌握 If 条件语句和 Select Case选择语句
? 掌握 For… Next和 Do… Loop循环语句
? 掌握两重循环, 了解多重循环
? 了解 Exit,End和 Goto语句
? 掌握程序的简单调试方法
第 3章 控制语句与程序调试
教学内容:
3.1 选择结构与相关语句
3.2 循环语句
3.3 其它语句
3.4 程序调试
3.1 选择结构
? 选择结构:当设定条件成立时执行
某些语句, 条件不成立时则跳过这
些语句或执行其它的语句 。
? 选择结构中要使用选择语句, 有两
路分支和多路分支两种情况, 对应
的选择语句有 If 语句 (两路出口 )和
Select Case语句 (多路出口 )。
返回目录
3.1 选择结构 - If条件语句
1,If <表达式 > Then <语句 >
其中, <表达式 >是一个条件表达式或逻辑表达式
例如, If Data>=90 Then Print“优秀,
[例 3.1]输入一个数, 如果是 3的
倍数则通过消息框输出 。
Private Sub Form_Click()
Dim Data As Integer
Data = InputBox("请输入一个值,")
If Data Mod 3 = 0 Then MsgBox Data
End Sub
返回目录
Data是 3的倍数
Data>=90?
输出“优秀”
Yes No
Data>=90?
输出“优秀”
Yes No
输出“合格”
输出“计算完毕”
3.1 选择结构 - If条件语句
2,If <表达式 > Then <语句 1> Else <语句 2>
例如, Dim Data As Integer
Data = InputBox(“请输入成绩,")
If Data >= 90 Then Print“优秀, Else Print“合格,
Print "计算完毕 "
上例的 If 语句可以改写为:
If Data < 90 Then Print "合格 " Else Print "优秀 "
返回目录
3.1 选择结构- If条件语句
3,块状 If语句
返回目录
If <条件表达式 >Then
<语句块 >
End If
[例 3.2]
If <条件表达式 >Then
<语句块 1>
Else
<语句块 2>
End If
A = InputBox(“A值, ), B = InputBox("B值 ")
Print A,B
If A < B Then
T = A, A = B, B = T
End If
Print A,B
3.1 选择结构- If条件语句
4,If语句嵌套
If语句嵌套使用可形成多分支的条件语句结构
If <条件表达式 1> Then
<语句 1>
ElseIf <条件表达式 2> Then
<语句 2>
Else
<语句 3>
End If
返回目录
说明:
? ElseIf之间不要加空格 。
? Else和位于其上方的最近的 If配对
3.1 选择结构- If条件语句
[例 3.3]
Weight = InputBox("输入西瓜重量,","计算西瓜款 ")
If Weight < 4 Then
Price = 1
ElseIf Weight <= 7 Then
Price = 1.3
Else
Price = 1.1
End If
Money = Price * Weight
MsgBox“西瓜重, & Weight &“公斤, 单价, & _
Price & "元, 应收瓜款 " & Money & _
"元 ",,"计算西瓜款 "
返回目录
4公斤以下,1.00元 /公斤
4至 7公斤,1.3元 /公斤
超过 7公斤,1.1元 /公斤
If Weight < 4 Then Price = 1
If Weight >= 4 And Price <= 7 Then Price = 1.3
If Weight > 7 Then Price = 1.1
3.1 选择结构- If条件语句
[例 3.4]
Char = InputBox("输入一个字符 ","测试字符值 ")
If Char >= "0" And Char <= "9" Then
MsgBox "输入的字符是数字 "
ElseIf Char >= "A" And Char <= "Z" Then
MsgBox "输入的字符是大写字母 "
ElseIf Char >= "a" And Char <= "z" Then
MsgBox "输入的字符是小写字母 "
Else
MsgBox "输入的字符是其它符号 "
End If
返回目录
判断输入的是
大写字母、小
写字母、数字
还是其它符号
3.1 选择结构- If条件语句
[例 3.5] Private Sub Command1_Click() '单击,正确无误”按钮
If Len(TxtCode.Text) < 8 Then
LblWarn.Caption= "考核证号必须输入, 长度为 8位 "
TxtCode.SetFocus
ElseIf Len(TxtName.Text) = 0 Then
LblWarn.Caption= "考生姓名必须输入 "
TxtName.SetFocus
ElseIf Len(TxtSeat.Text) = 0 Then
LblWarn.Caption= "座位号必须输入 "
TxtSeat.SetFocus
Else
LblWarn.Caption= ""
Debug.Print TxtCode.Text
Debug.Print TxtName.Text
Debug.Print TxtSeat.Text
End If
End Sub
返回目录
3.1 选择结构- Select Case选择语句
? 语法格式:
Select Case <测试表达式 >
Case <表达式 1>
<语句 1>
Case <表达式 2>
<语句 2>
………
[Case Else
<语句 n+1>]
End Select
? 功能:根据测试表达式的值,决定程序的流向。
返回目录
<测试表达式 >值的类型是数
值型、字符串型、日期型等,
一旦与某个 Case后的 <表达式 >
值相等,则执行这个 Case中的 <
语句 >,完成后执行 End Select
后的语句。
如果所有的 Case后的 <表达
式 >都不与 <测试表达式 >项匹配,
则执行 Case Else后的 <语句 >。
3.1 选择结构- Select Case选择语句
[例 3.6] 学生成绩分等
Data = InputBox("请输入一个成绩 ","成绩分等 ")
Select Case Int(Data / 10)
Case 10
MsgBox "满分 ",,"成绩分等 "
Case 9
MsgBox "优秀 ",,"成绩分等 "
Case 8
MsgBox "良好 ",,"成绩分等 "
Case 7
MsgBox "一般 ",,"成绩分等 "
Case 6
MsgBox "合格 ",,"成绩分等 "
Case Else
MsgBox "不合格 ",,"成绩分等 "
End Select
返回目录
单
击
窗
体
确
定
3.1 选择结构- Select Case选择语句
[例 3.7] 测试输入的字符
Char = InputBox("请输入一个字符 ","测试 ")
Select Case Char
Case "0" To "9"
MsgBox "字符是数字 ",,"测试 "
Case "a" To "z"
MsgBox "字符是小写字母 ",,"测试 "
Case "A" To "Z"
MsgBox "字符是大写字母 ",,"测试 "
Case Else
MsgBox "字符是其它符号 ",,"测试 "
End Select
关于 Select Case语句的一些说明见教材
返回目录
确
定
单
击
窗
体
3.2 循环语句
? 程序的另一种结构是循环结构
? 循环结构作用是重复执行一段程序
? 循环是有条件的、次数是有限的
? VB的循环语句,For…Next, Do While…Loop
For Each…Next, While…Wend
? 应用最多的,For…Next 与 Do While…Loop
返回目录
3.2 循环语句 - For…Next 循环
? For…Next 循环一般应用于循环次数已知的场合
For <循环变量 > = 初值 To 终值 [Step 步长 ]
语句块 ( 循环体 )
Next [循环变量 ]
? 工作原理
返回目录
循环变量 =初值
循环变量超出范围?
循环体
循环变量增加一个步长
No
Yes
Step缺省为 1
3.2 循环语句 - For…Next 循环
[例 3.8] 求 1+3+5+7+…+99
Private Sub Form_Click()
Dim Sum As Integer,I As Integer
Sum = 0 '保存累加和, 先清零
For I = 1 To 99 Step 2
Sum = Sum + I
Next I
MsgBox "1+3+5+… +99=" & Sum,,"求和 "
End Sub
返回目录
本例的特点是数据
项之间相差 2,
即 Step的值为 2
思考:
?例中当输出对话框出现时, I的值是多少?
?如果省略 Step 2,程序的结果如何?
?For语句能不能改写成 ForI=99 To 1 Step -2?
3.2 循环语句 - For…Next 循环
[例 3.9] 求平均成绩
Const N = 40 '学生人数
Private Sub Form_Click()
Dim Sum As Integer,I As Integer
Dim Data As Integer,Average As Single
Sum = 0 '存放累加值的变量清零
For I = 1 To N '循环 40次, 步长值为 1省略
Data = InputBox("输入第 " & I & "位同学的成绩 ","求平均分 ")
Sum = Sum + Data
Next I
Average = Sum / N
MsgBox "全班 " & N & "名学生的平均分为 " & Average,,"求平均分 "
End Sub
返回目录
确
定
本例的循环变量 I 控制人数
3.2 循环语句 - For…Next 循环
[例 3.11] 求斐波那契级数的前 20项
Private Sub Form_Click()
Dim A,B,I,T As Integer
A = 1, B = 1 '生成级数第一, 二项
Print A; B;
For I = 3 To 20
T = A + B '产生级数新的一项
A = B '让 B成为下一组的 A
B = T '原来 A+B的值成为下一组的 B
Print B;
If I Mod 6 = 0 Then Print
Next I
End Sub
返回目录
斐波那契级数:
?第一、二项为 1
?第三项开始,每一项
的值是前两项值之和
每 6个数一行
3.2 循环语句 - Do…Loop 循环
1,当型循环
返回目录
Do While <条件表达式 >
循环体
Loop
Do
循环体
Loop While <条件表达式 >
条件表达式
成立?
循环体
No
Yes 条件表达式
成立?
循环体
No
Yes
先判断后执行 先执行后判断
特点:条件表达式 成立执行 循环体内容
3.2 循环语句 - Do…Loop 循环
[例 3.12] 计算平均分
Private Sub Form_Click()
Dim Data As Integer,Sum As Integer,N As Integer
Dim Average As Single
Sum = 0, N = 0
Data = InputBox("输入第 "& N + 1 & "个同学的成绩 ","求平均分 ")
Do While Data <> -1 ' -1表示结束输入
Sum = Sum + Data
N = N + 1
Data = InputBox("输入第 " & N + 1 & "个同学的成绩 ","求平均分 ")
Loop
Average = Sum / N
MsgBox N & "位同学的平均分为 " & Average,,"求平均分 "
End Sub
返回目录
3.2 循环语句 - Do…Loop 循环
[例 3.13] Sum=1+2+3+…+N
求 Sum不超过 10000的最大整数值和数据项数 N
Private Sub Form_Click()
Dim Sum,N As Integer
N = 0 '开始时项数为 0
Sum = 0 '保存累加值的变量 Sum清零
Do While Sum <= 10000
N = N + 1
Sum = Sum + N
Loop
Sum = Sum - N
N = N - 1
Print "Sum="; Sum,"N="; N
End Sub
返回目录
当 Sum的值超出 10000时循环才
终止。因此 Sum值要减去多加的
一个 N;而在循环过程中,N也
被多加了一个 1,需要减去。
3.2 循环语句 - Do…Loop 循环
2,直到型循环
返回目录
Do Until <条件表达式 >
循环体
Loop
Do
循环体
Loop Until <条件表达式 >
特点:条件表达式 不成立执行 循环体内容
先判断后执行
条件表达式
成立?
循环体
No
Yes
先执行后判断
条件表达式
成立?
循环体
No
Yes
3.2 循环语句 - Do…Loop 循环
[例 3.14]计算平均分 (要求同 例 3.12)
Private Sub Form_Click()
Dim Data As Integer,Sum As Integer,N As Integer
Sum = 0, N = 0
Data = InputBox("输入成绩 ","计算总分 ")
Do Until Data = -1
Sum = Sum + Data
N = N + 1
Data = InputBox("输入数据 ","计算总分 ")
Loop
Print "全班平均分为,";Sum / N
End Sub
返回目录
Do While Data <> -1
Sum = Sum + Data
N = N + 1
Data = InputBox("输入数据 ","计算总分 ")
Loop
3.2 循环语句 - 两重循环
两重循环,在一个循环的循环体中还包含另一个循环
[例 3.15] 在窗体上显示一个几何图形
Private Sub Form_Click()
Dim I,J As Integer 'I,J为循环变量
For I = 1 To 8 ' I 控制行数 (8行 )
Print Tab(10 - I); '定每行 *的起始位
For J = 1 To I ' J 控制每行输出 I个 *
Print "*";
Next J
Print '换行
Next I
End Sub
返回目录
注意:两重循环不能形成交叉
3.2 循环语句 - 两重循环
[例 3.16] 输出乘法口诀表
Private Sub Form_Click()
Dim I As Integer,J As Integer,M As Integer
For I = 1 To 9
For J = 1 To I
M = I * J
Print J & "*" & I & "=" & M & " ";
Next J
Print '打印换行
Next I
End Sub
返回目录
3.2 循环语句 - 两重循环
[例 3.17] 计算
Private Sub Form_Click()
Dim I As Integer,J As Integer
Dim F As Long '阶乘值用长整型保存
Dim e As Double
For I = 0 To 10
F = 1 '每个阶乘值先置 1以便累乘
For J = 1 To I
F = F * J
Next J
e = e + 1 / F
Next I
Print "e="; e
End Sub
返回目录
!10
1...
!3
1
!2
1
!1
11 ??????e
本循环计算 F= I!
3.2 循环语句 - 多重循环
多重循环,循环次数在两重以上的循环结构
[例 3.19] 计算 将 1角钱兑换成零钱有多少种方案
Private Sub Form_Click()
Dim I,J,K,S As Integer
S = 0 '统计兑换 1角钱的方案数
For I = 0 To 10 '1分钱个数
For J = 0 To 10 Step 2 '2分钱个数
For K = 0 To 10 Step 5 '5分钱个数
If I + J + K = 10 Then S = S + 1
Next K
Next J
Next I
MsgBox "1角钱兑换成零钱的方案有 " & S & "种 ",,"兑换零钱 "
End Sub
返回目录
1角钱以下的硬币有 1分, 2
分和 5分种
1角钱全换成 1分需 10个
1角钱全换成 2分需 5个
1角钱全换成 5分需 2个
3.3 其他语句 - Exit与 End
1,Exit语句
?Exit Do:跳出 Do… Loop循环
?Exit For:跳出 For… Next循环
[例 3.20] 判断一个正整数是否为素数 (质数 )
N = InputBox("请输入一个正整数 ","验证素数 ")
For I = 2 To N - 1
If N Mod I = 0 Then
Exit For
End If
Next I
If I = N Then
MsgBox N & "是素数 ",,"验证素数 "
Else
MsgBox N & "不是素数 ",,"验证素数 "
End If
返回目录
素数,一个正整数 N
除了能被 1和自身所整
除外,不能被其它任
何数所整除 。
3.3 其他语句 - Exit与 End
2,End语句
? End:终止程序的运行
? End Sub:终止一个过程;
? End Function:终止函数过程
? End If:终止条件语句
? End Type:终止类型声明
? End Select:终止情况语句
? End Property:终止属性过程
? End With:终止 With语句
返回目录
例如:
Private Sub Command1_Click()
End
End Sub
3.3 其他语句 - Goto
? 功能:无条件转向
? 格式,Goto <label> label称为语句标号 (数字或标识符 )
[例 3.22] 求若干个同学的成绩总分
Private Sub Form_Click()
Dim Data,Sum As Integer
Sum = 0
loop1:
Data = InputBox("输入成绩 ")
If Data = -1 Then
GoTo loop2
Else
Sum = Sum + Data
GoTo loop1
End If
loop2:
Print "总分 ="; Sum
End Sub
返回目录
Goto语句不符合结
构化程序设计的要求,
所以不提倡使用。
3.4 程序调试 - 程序的错误类型
语法错误 运行错误
返回目录
中文逗号 n未赋过值
逻辑错误:算法不正确。 显然系统不会报告这类出错信息 。
3.4 程序调试 - 简单调试
方法:在程序中适当插入 Print语句跟踪变量值的变化
返回目录
应该是 6与 24
3.4 程序调试 - 使用调试工具
1,断点调试
断点,程序执行到该此自动暂停
单击“继续”按钮, 程序可继续执行。
返回目录
设置断点:在代码窗口中
单击该语句左侧的阴影边框。
暂停时,将鼠标指针移动
到程序中的各个变量上略作
停留,系统将以浮动标签的
方式显示该变量的值。
3.4 程序调试 - 使用调试工具
2,逐语句执行
启动逐语句执行:, 调试 → 逐语句, 或 按 F8
终止 逐语句执行,, 调试 → 跳出,
3,使用立即窗口
程序运行处于暂停状态时,
在立即窗口中输入:
Print <变量名 > 或? <变量名 >
4,逐过程
启动逐过程执行:, 调试 → 逐过程, 或 按 Shift+F8
终止 逐过程执行,, 调试 → 跳出,
返回目录
学习目标:
? 掌握 If 条件语句和 Select Case选择语句
? 掌握 For… Next和 Do… Loop循环语句
? 掌握两重循环, 了解多重循环
? 了解 Exit,End和 Goto语句
? 掌握程序的简单调试方法
第 3章 控制语句与程序调试
教学内容:
3.1 选择结构与相关语句
3.2 循环语句
3.3 其它语句
3.4 程序调试
3.1 选择结构
? 选择结构:当设定条件成立时执行
某些语句, 条件不成立时则跳过这
些语句或执行其它的语句 。
? 选择结构中要使用选择语句, 有两
路分支和多路分支两种情况, 对应
的选择语句有 If 语句 (两路出口 )和
Select Case语句 (多路出口 )。
返回目录
3.1 选择结构 - If条件语句
1,If <表达式 > Then <语句 >
其中, <表达式 >是一个条件表达式或逻辑表达式
例如, If Data>=90 Then Print“优秀,
[例 3.1]输入一个数, 如果是 3的
倍数则通过消息框输出 。
Private Sub Form_Click()
Dim Data As Integer
Data = InputBox("请输入一个值,")
If Data Mod 3 = 0 Then MsgBox Data
End Sub
返回目录
Data是 3的倍数
Data>=90?
输出“优秀”
Yes No
Data>=90?
输出“优秀”
Yes No
输出“合格”
输出“计算完毕”
3.1 选择结构 - If条件语句
2,If <表达式 > Then <语句 1> Else <语句 2>
例如, Dim Data As Integer
Data = InputBox(“请输入成绩,")
If Data >= 90 Then Print“优秀, Else Print“合格,
Print "计算完毕 "
上例的 If 语句可以改写为:
If Data < 90 Then Print "合格 " Else Print "优秀 "
返回目录
3.1 选择结构- If条件语句
3,块状 If语句
返回目录
If <条件表达式 >Then
<语句块 >
End If
[例 3.2]
If <条件表达式 >Then
<语句块 1>
Else
<语句块 2>
End If
A = InputBox(“A值, ), B = InputBox("B值 ")
Print A,B
If A < B Then
T = A, A = B, B = T
End If
Print A,B
3.1 选择结构- If条件语句
4,If语句嵌套
If语句嵌套使用可形成多分支的条件语句结构
If <条件表达式 1> Then
<语句 1>
ElseIf <条件表达式 2> Then
<语句 2>
Else
<语句 3>
End If
返回目录
说明:
? ElseIf之间不要加空格 。
? Else和位于其上方的最近的 If配对
3.1 选择结构- If条件语句
[例 3.3]
Weight = InputBox("输入西瓜重量,","计算西瓜款 ")
If Weight < 4 Then
Price = 1
ElseIf Weight <= 7 Then
Price = 1.3
Else
Price = 1.1
End If
Money = Price * Weight
MsgBox“西瓜重, & Weight &“公斤, 单价, & _
Price & "元, 应收瓜款 " & Money & _
"元 ",,"计算西瓜款 "
返回目录
4公斤以下,1.00元 /公斤
4至 7公斤,1.3元 /公斤
超过 7公斤,1.1元 /公斤
If Weight < 4 Then Price = 1
If Weight >= 4 And Price <= 7 Then Price = 1.3
If Weight > 7 Then Price = 1.1
3.1 选择结构- If条件语句
[例 3.4]
Char = InputBox("输入一个字符 ","测试字符值 ")
If Char >= "0" And Char <= "9" Then
MsgBox "输入的字符是数字 "
ElseIf Char >= "A" And Char <= "Z" Then
MsgBox "输入的字符是大写字母 "
ElseIf Char >= "a" And Char <= "z" Then
MsgBox "输入的字符是小写字母 "
Else
MsgBox "输入的字符是其它符号 "
End If
返回目录
判断输入的是
大写字母、小
写字母、数字
还是其它符号
3.1 选择结构- If条件语句
[例 3.5] Private Sub Command1_Click() '单击,正确无误”按钮
If Len(TxtCode.Text) < 8 Then
LblWarn.Caption= "考核证号必须输入, 长度为 8位 "
TxtCode.SetFocus
ElseIf Len(TxtName.Text) = 0 Then
LblWarn.Caption= "考生姓名必须输入 "
TxtName.SetFocus
ElseIf Len(TxtSeat.Text) = 0 Then
LblWarn.Caption= "座位号必须输入 "
TxtSeat.SetFocus
Else
LblWarn.Caption= ""
Debug.Print TxtCode.Text
Debug.Print TxtName.Text
Debug.Print TxtSeat.Text
End If
End Sub
返回目录
3.1 选择结构- Select Case选择语句
? 语法格式:
Select Case <测试表达式 >
Case <表达式 1>
<语句 1>
Case <表达式 2>
<语句 2>
………
[Case Else
<语句 n+1>]
End Select
? 功能:根据测试表达式的值,决定程序的流向。
返回目录
<测试表达式 >值的类型是数
值型、字符串型、日期型等,
一旦与某个 Case后的 <表达式 >
值相等,则执行这个 Case中的 <
语句 >,完成后执行 End Select
后的语句。
如果所有的 Case后的 <表达
式 >都不与 <测试表达式 >项匹配,
则执行 Case Else后的 <语句 >。
3.1 选择结构- Select Case选择语句
[例 3.6] 学生成绩分等
Data = InputBox("请输入一个成绩 ","成绩分等 ")
Select Case Int(Data / 10)
Case 10
MsgBox "满分 ",,"成绩分等 "
Case 9
MsgBox "优秀 ",,"成绩分等 "
Case 8
MsgBox "良好 ",,"成绩分等 "
Case 7
MsgBox "一般 ",,"成绩分等 "
Case 6
MsgBox "合格 ",,"成绩分等 "
Case Else
MsgBox "不合格 ",,"成绩分等 "
End Select
返回目录
单
击
窗
体
确
定
3.1 选择结构- Select Case选择语句
[例 3.7] 测试输入的字符
Char = InputBox("请输入一个字符 ","测试 ")
Select Case Char
Case "0" To "9"
MsgBox "字符是数字 ",,"测试 "
Case "a" To "z"
MsgBox "字符是小写字母 ",,"测试 "
Case "A" To "Z"
MsgBox "字符是大写字母 ",,"测试 "
Case Else
MsgBox "字符是其它符号 ",,"测试 "
End Select
关于 Select Case语句的一些说明见教材
返回目录
确
定
单
击
窗
体
3.2 循环语句
? 程序的另一种结构是循环结构
? 循环结构作用是重复执行一段程序
? 循环是有条件的、次数是有限的
? VB的循环语句,For…Next, Do While…Loop
For Each…Next, While…Wend
? 应用最多的,For…Next 与 Do While…Loop
返回目录
3.2 循环语句 - For…Next 循环
? For…Next 循环一般应用于循环次数已知的场合
For <循环变量 > = 初值 To 终值 [Step 步长 ]
语句块 ( 循环体 )
Next [循环变量 ]
? 工作原理
返回目录
循环变量 =初值
循环变量超出范围?
循环体
循环变量增加一个步长
No
Yes
Step缺省为 1
3.2 循环语句 - For…Next 循环
[例 3.8] 求 1+3+5+7+…+99
Private Sub Form_Click()
Dim Sum As Integer,I As Integer
Sum = 0 '保存累加和, 先清零
For I = 1 To 99 Step 2
Sum = Sum + I
Next I
MsgBox "1+3+5+… +99=" & Sum,,"求和 "
End Sub
返回目录
本例的特点是数据
项之间相差 2,
即 Step的值为 2
思考:
?例中当输出对话框出现时, I的值是多少?
?如果省略 Step 2,程序的结果如何?
?For语句能不能改写成 ForI=99 To 1 Step -2?
3.2 循环语句 - For…Next 循环
[例 3.9] 求平均成绩
Const N = 40 '学生人数
Private Sub Form_Click()
Dim Sum As Integer,I As Integer
Dim Data As Integer,Average As Single
Sum = 0 '存放累加值的变量清零
For I = 1 To N '循环 40次, 步长值为 1省略
Data = InputBox("输入第 " & I & "位同学的成绩 ","求平均分 ")
Sum = Sum + Data
Next I
Average = Sum / N
MsgBox "全班 " & N & "名学生的平均分为 " & Average,,"求平均分 "
End Sub
返回目录
确
定
本例的循环变量 I 控制人数
3.2 循环语句 - For…Next 循环
[例 3.11] 求斐波那契级数的前 20项
Private Sub Form_Click()
Dim A,B,I,T As Integer
A = 1, B = 1 '生成级数第一, 二项
Print A; B;
For I = 3 To 20
T = A + B '产生级数新的一项
A = B '让 B成为下一组的 A
B = T '原来 A+B的值成为下一组的 B
Print B;
If I Mod 6 = 0 Then Print
Next I
End Sub
返回目录
斐波那契级数:
?第一、二项为 1
?第三项开始,每一项
的值是前两项值之和
每 6个数一行
3.2 循环语句 - Do…Loop 循环
1,当型循环
返回目录
Do While <条件表达式 >
循环体
Loop
Do
循环体
Loop While <条件表达式 >
条件表达式
成立?
循环体
No
Yes 条件表达式
成立?
循环体
No
Yes
先判断后执行 先执行后判断
特点:条件表达式 成立执行 循环体内容
3.2 循环语句 - Do…Loop 循环
[例 3.12] 计算平均分
Private Sub Form_Click()
Dim Data As Integer,Sum As Integer,N As Integer
Dim Average As Single
Sum = 0, N = 0
Data = InputBox("输入第 "& N + 1 & "个同学的成绩 ","求平均分 ")
Do While Data <> -1 ' -1表示结束输入
Sum = Sum + Data
N = N + 1
Data = InputBox("输入第 " & N + 1 & "个同学的成绩 ","求平均分 ")
Loop
Average = Sum / N
MsgBox N & "位同学的平均分为 " & Average,,"求平均分 "
End Sub
返回目录
3.2 循环语句 - Do…Loop 循环
[例 3.13] Sum=1+2+3+…+N
求 Sum不超过 10000的最大整数值和数据项数 N
Private Sub Form_Click()
Dim Sum,N As Integer
N = 0 '开始时项数为 0
Sum = 0 '保存累加值的变量 Sum清零
Do While Sum <= 10000
N = N + 1
Sum = Sum + N
Loop
Sum = Sum - N
N = N - 1
Print "Sum="; Sum,"N="; N
End Sub
返回目录
当 Sum的值超出 10000时循环才
终止。因此 Sum值要减去多加的
一个 N;而在循环过程中,N也
被多加了一个 1,需要减去。
3.2 循环语句 - Do…Loop 循环
2,直到型循环
返回目录
Do Until <条件表达式 >
循环体
Loop
Do
循环体
Loop Until <条件表达式 >
特点:条件表达式 不成立执行 循环体内容
先判断后执行
条件表达式
成立?
循环体
No
Yes
先执行后判断
条件表达式
成立?
循环体
No
Yes
3.2 循环语句 - Do…Loop 循环
[例 3.14]计算平均分 (要求同 例 3.12)
Private Sub Form_Click()
Dim Data As Integer,Sum As Integer,N As Integer
Sum = 0, N = 0
Data = InputBox("输入成绩 ","计算总分 ")
Do Until Data = -1
Sum = Sum + Data
N = N + 1
Data = InputBox("输入数据 ","计算总分 ")
Loop
Print "全班平均分为,";Sum / N
End Sub
返回目录
Do While Data <> -1
Sum = Sum + Data
N = N + 1
Data = InputBox("输入数据 ","计算总分 ")
Loop
3.2 循环语句 - 两重循环
两重循环,在一个循环的循环体中还包含另一个循环
[例 3.15] 在窗体上显示一个几何图形
Private Sub Form_Click()
Dim I,J As Integer 'I,J为循环变量
For I = 1 To 8 ' I 控制行数 (8行 )
Print Tab(10 - I); '定每行 *的起始位
For J = 1 To I ' J 控制每行输出 I个 *
Print "*";
Next J
Print '换行
Next I
End Sub
返回目录
注意:两重循环不能形成交叉
3.2 循环语句 - 两重循环
[例 3.16] 输出乘法口诀表
Private Sub Form_Click()
Dim I As Integer,J As Integer,M As Integer
For I = 1 To 9
For J = 1 To I
M = I * J
Print J & "*" & I & "=" & M & " ";
Next J
Print '打印换行
Next I
End Sub
返回目录
3.2 循环语句 - 两重循环
[例 3.17] 计算
Private Sub Form_Click()
Dim I As Integer,J As Integer
Dim F As Long '阶乘值用长整型保存
Dim e As Double
For I = 0 To 10
F = 1 '每个阶乘值先置 1以便累乘
For J = 1 To I
F = F * J
Next J
e = e + 1 / F
Next I
Print "e="; e
End Sub
返回目录
!10
1...
!3
1
!2
1
!1
11 ??????e
本循环计算 F= I!
3.2 循环语句 - 多重循环
多重循环,循环次数在两重以上的循环结构
[例 3.19] 计算 将 1角钱兑换成零钱有多少种方案
Private Sub Form_Click()
Dim I,J,K,S As Integer
S = 0 '统计兑换 1角钱的方案数
For I = 0 To 10 '1分钱个数
For J = 0 To 10 Step 2 '2分钱个数
For K = 0 To 10 Step 5 '5分钱个数
If I + J + K = 10 Then S = S + 1
Next K
Next J
Next I
MsgBox "1角钱兑换成零钱的方案有 " & S & "种 ",,"兑换零钱 "
End Sub
返回目录
1角钱以下的硬币有 1分, 2
分和 5分种
1角钱全换成 1分需 10个
1角钱全换成 2分需 5个
1角钱全换成 5分需 2个
3.3 其他语句 - Exit与 End
1,Exit语句
?Exit Do:跳出 Do… Loop循环
?Exit For:跳出 For… Next循环
[例 3.20] 判断一个正整数是否为素数 (质数 )
N = InputBox("请输入一个正整数 ","验证素数 ")
For I = 2 To N - 1
If N Mod I = 0 Then
Exit For
End If
Next I
If I = N Then
MsgBox N & "是素数 ",,"验证素数 "
Else
MsgBox N & "不是素数 ",,"验证素数 "
End If
返回目录
素数,一个正整数 N
除了能被 1和自身所整
除外,不能被其它任
何数所整除 。
3.3 其他语句 - Exit与 End
2,End语句
? End:终止程序的运行
? End Sub:终止一个过程;
? End Function:终止函数过程
? End If:终止条件语句
? End Type:终止类型声明
? End Select:终止情况语句
? End Property:终止属性过程
? End With:终止 With语句
返回目录
例如:
Private Sub Command1_Click()
End
End Sub
3.3 其他语句 - Goto
? 功能:无条件转向
? 格式,Goto <label> label称为语句标号 (数字或标识符 )
[例 3.22] 求若干个同学的成绩总分
Private Sub Form_Click()
Dim Data,Sum As Integer
Sum = 0
loop1:
Data = InputBox("输入成绩 ")
If Data = -1 Then
GoTo loop2
Else
Sum = Sum + Data
GoTo loop1
End If
loop2:
Print "总分 ="; Sum
End Sub
返回目录
Goto语句不符合结
构化程序设计的要求,
所以不提倡使用。
3.4 程序调试 - 程序的错误类型
语法错误 运行错误
返回目录
中文逗号 n未赋过值
逻辑错误:算法不正确。 显然系统不会报告这类出错信息 。
3.4 程序调试 - 简单调试
方法:在程序中适当插入 Print语句跟踪变量值的变化
返回目录
应该是 6与 24
3.4 程序调试 - 使用调试工具
1,断点调试
断点,程序执行到该此自动暂停
单击“继续”按钮, 程序可继续执行。
返回目录
设置断点:在代码窗口中
单击该语句左侧的阴影边框。
暂停时,将鼠标指针移动
到程序中的各个变量上略作
停留,系统将以浮动标签的
方式显示该变量的值。
3.4 程序调试 - 使用调试工具
2,逐语句执行
启动逐语句执行:, 调试 → 逐语句, 或 按 F8
终止 逐语句执行,, 调试 → 跳出,
3,使用立即窗口
程序运行处于暂停状态时,
在立即窗口中输入:
Print <变量名 > 或? <变量名 >
4,逐过程
启动逐过程执行:, 调试 → 逐过程, 或 按 Shift+F8
终止 逐过程执行,, 调试 → 跳出,
返回目录