VB循环结构程序设计
[例3.10] 求平均成绩 例
Const N = 10 '学生人数 学生人数 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
3.3 循环语句
程序的另一种结构是循环结构 循环结构作用是重复执行一段程序 循环是有条件的、次数是有限的 循环是有条件的、 VB的循环语句:For…Next、Do While…Loop 的循环语句: 的循环语句 、 For Each…Next、While…Wend 、 应用最多的: 应用最多的:For…Next与Do While…Loop 与
先执行后判断
循环体
条件表达式 成立? 成立? No
返回目录
特点:条件表达式不成立执行循环体内容 特点:条件表达式不成立执行循环体内容 不成立执行
3.5 循环语句-Do…Loop循环 循环语句-Do…Loop循环
[例3.14]计算平均分(要求同例4.12) 例 计算平均分( 计算平均分 要求同例 )
返回目录
3.4 循环语句-For…Next循环 循环语句-For…Next循环
For…Next循环一般应用于循环次数已知的场合 循环一般应用于循环次数已知的场合
For <循环变量 = 初值 To 终值 [Step 步长 循环变量> 步长] 循环变量 语句块(循环体) 语句块(循环体) Step缺省为 1 缺省为 Next [循环变量 循环变量] 循环变量
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.7 其他语句-Exit与End 其他语句-Exit与
1. Exit语句 语句
Exit Do:跳出 :跳出Do…Loop循环 循环 Exit For:跳出For…Next循环 :跳出 循环
[例4.20] 判断一个正整数是否为素数 质数 例 判断一个正整数是否为素数(质数 质数)
N = InputBox("请输入一个正整数 "验证素数 请输入一个正整数", 验证素数 验证素数") 请输入一个正整数 For I = 2 To N - 1 素数:一个正整数N 素数:一个正整数 If N Mod I = 0 Then 除了能被1和自身所整 除了能被 和自身所整 Exit For 除外, 除外,不能被其它任 End If 何数所整除。 Next I If I = N Then MsgBox N & "是素数 , "验证素数 是素数", 验证素数 验证素数" 是素数 Else MsgBox N & "不是素数 , "验证素数 不是素数", 验证素数 验证素数" 不是素数 End If
本例的循环变量 I 控制人数
返回目录
3.5 循环语句-Do…Loop循环 循环语句-Do…Loop循环
1. 当型循环
Do While <条件表达式 条件表达式> 条件表达式 循环体 Loop
先判断后执行
No 条件表达式 成立? 成立? Yes 循环体 No
Do 循环体 Loop While <条件表达式 条件表达式> 条件表达式
思考: 思考:
例中当输出对话框出现时, 的值是多少? 例中当输出对话框出现时,I 的值是多少? 如果省略Step 2,程序的结果如何? 如果省略 ,程序的结果如何?
返回目录
For语句能不能改写成 语句能不能改写成For I=99 To 1 Step -2 ? 语句能不能改写成
3.4 循环语句-For…Next循环 循环语句-For…Next循环
返回目录
3.6 循环语句-多重循环 循环语句-
多重循环: 多重循环:循环次数在两重以上的循环结构 [例3.19] 计算将1角钱兑换成零钱有多少种方案 计算将 角钱兑换成零钱有多少种方案 例
Private Sub Form_Click() 1角钱以下的硬币有 分 、 2 角钱以下的硬币有1分 角钱以下的硬币有 分和5分种 Dim I, J, K, S As Integer 分和 分种 1角钱全换成 分需 个 角钱全换成1分需 角钱全换成 分需10个 S=0 '统计兑换 角钱的方案数 统计兑换1角钱的方案数 统计兑换 For I = 0 To 10 '1分钱个数 分钱个数 1角钱全换成 分需 个 角钱全换成2分需 角钱全换成 分需5个 For J = 0 To 10 Step 2 '2分钱个数 分钱个数 1角钱全换成 分需 个 角钱全换成5分需 角钱全换成 分需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
返回目录
3.6 循环语句-两重循环 循环语句-
两重循环: 两重循环:在一个循环的循环体中还包含另一个循环 [例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.6 循环语句-两重循环 循环语句-
1 1 1 1 [例3.17] 计算 e = 1 + + + + ... + 例 1! 2! 3! 10!
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 本循环计算F= 本循环计算 I! Next J e=e+1/F Next I Print "e="; e End Sub
返回目录
3.5 循环语句-Do…Loop循环 循环语句-Do…Loop循环
[例3.13] Sum=1+2+3+…+N 例 不超过10000的最大整数值和数据项数 的最大整数值和数据项数N 求Sum不超过 不超过 的最大整数值和数据项数
Private Sub Form_Click() Dim Sum, N As Integer '开始时项数为 开始时项数为0 N=0 开始时项数为 Sum = 0 '保存累加值的变量 保存累加值的变量Sum清零 保存累加值的变量 清零 Do While Sum <= 10000 的值超出10000时循环才 当Sum的值超出 的值超出 时循环才 N=N+1 终止。因此Sum值要减去多加的 终止。因此 值要减去多加的 Sum = Sum + N 一个N;而在循环过程中, 也 一个 ;而在循环过程中,N也 Loop 被多加了一个1,需要减去。 被多加了一个 ,需要减去。 Sum = Sum - N N=N-1 Print "Sum="; Sum, "N="; N End Sub
先执行后判断
循环体