第五章 选择结构与循环结构程序设计
本章主要内容
5.1 选择机构程序设计
5.2 For循环结构程序设计
5.3 While循环结构程序设计
5.4 Do循环结构程序设计
5.5 多重循环
5.6 程序举例
5.1 选择结构程序设计
?单行结构条件语句
格式,If <条件 > Then <语句 1>[Else<语句 2>]
功能,若条件成立或为非 0值, 则执行, 语句 1”, 否则
执行语句 2。
其中:, 条件, 通常是关系表达式或逻辑表达式 。
, 语句 1” 和, 语句 2” 可以是简单句或复合句 。
Else子句为可选项 。
例 5- 1 输入三个数,输出其中最大值。
Private Sub Command1_Click()
Dim a!,b!,c!,max!
a = InputBox("请输入第一个数 ")
b = InputBox("请输入第二个数 ")
c = InputBox("请输入第三个数 ")
max = a
If b > max Then max = b
If c > max Then max = c
Print a; ","; b; ","; c; "中最大值是,"; max
End Sub
例 5- 2 编程求符号函数 sign(x)的值。 P102
?块结构条件语句
格式,If condition1 Then
<statementblock-1>
[ElseIf condition2 Then
<statementblock-2>]
,.,
[Else
<statementblock-n>]
End If
功能,若“条件 1”成立,执行“语句块 1”;否则若
“条件 2”成立,执行“语句块 2”; …… 若上述条件均
不成立,执行“语句块 n” 。
例 5- 3 输入系数 a,b和 c,求二次方程 ax2+bx+c=0的
实根。 编程如下,
例 5- 4 给出 a,b,c的值,问它们能否构成三角形的
3边。如能构成三角形,计算此三角形的面积。
Private Sub Command1_Click()
Dim a!,b!,c!,d!,x1!,x2!,x
a = Val(InputBox("请输入系数 a:")),b = Val(InputBox("请输入系数 b:"))
c = Val(InputBox("请输入系数 c:")),d = b * b - 4 * a * c
If d > 0 Then
x1 = (-b + Sqr(d)) / (2 * a),x2 = (-b - Sqr(d)) / (2 * a)
Print "x1="; x1,"x2="; x2
Else
If d = 0 Then
x = -b / (2 * a),Print "x="; x
Else
Print "此方程无实根 "
End If
End If
End Sub
Private Sub Command2_Click()
End
End Sub
Goto语句
格式,GoTo <标号 >
功能,把控制转移到“标号”所在的程序行,并从该
行开始往下执行。
说明,1、标号实一个标识符或整型数;
2、程序必须给 GoTo语句提供唯一的转向入口,
入口处格式为,<标号 >:<语句 >
3,不能用 GoTo语句转向另一个过程。
例 5- 5,设计一个程序,从键盘上输入学生的分数,
统计其中及格的人数以及总平均分。 P106
?情况语句
Select Case <testexpression>
Case <expressionlist1>
[<statementblock-1>]
[Case <expressionlist2>
<statementblock-2>]
……
[Case Else
<statementblock-n>]
End Select
功能,根据“测试表达式”的值,从多个语句块中选择符
合条件的一个语句块执行。
说明,
1、“测试表达式”的值与“表达式表列”的值均不匹
配的时候,执行 case else 子句。
2、测试表达式可以是数值表达式或字符串表达式。
3,Case子句可以是一行或多行语句。
4、“表达式表列”中的表达式必须与测试表达式的类
型一致。
5、“表达式表列”称为域值,可以是下列形式之一,
1) <表达式 1>[,<表达式 2>]……
当“测试表达式”的值与其中之一相同,就执行该 Case子
句中的语句块。
2) <表达式 1> To <表达式 2>
当“测试表达式”的值落在表达式 1和表达式 2之间(含自
身),则执行该 Case子句中的语句块。表达式 1<表达式 2。
3) Is <关系表达式 >
当“测试表达式”的值满足“关系表达式”指定条件时,执
行该 Case子句中的语句块。
例 5- 6 从键盘上输入学生成绩,然后在文件框中显示其等级
(按 5级计分值输出不及格、及格、中等、良好、优秀)。
Private Sub Command1_Click()
Dim score As Integer,strx As String
start,score = InputBox(,请输入学生成绩” )
Select Case score
Case 0 To 59,strx$ =, 不及格”
Case 60 To 69,strx$ =, 及格”
Case 70 To 79,strx$ =, 中等”
Case 80 To 89,strx$ =, 良好”
Case 90 To 100,strx$ =, 优秀”
Case Else
MsgBox, 请输入 0~ 100范围内的整数”,“错误提示”
GoTo start
End Select
Text1.Text = score
Text2.Text = strx$
End Sub
例 5- 7 商店售货,按购买货物的款数多少分别给予不
同优惠折扣如下,编程计算购物款数。
Private Sub Command1_Click()
Dim m!,d!
m = InputBox("请输应付款,")
Select Case m
Case Is < 250,d = 0
Case Is < 500,d = 0.05
Case Is < 1000,d = 0.075
Case Is < 2000,d = 0.1
Case Else,d = 0.15
End Select
Text1.Text = Str$(m)
Text2.Text = Str$(d)
Text3.Text = Str$(m * (1 - d))
End Sub
Private Sub Command2_Click()
End
End Sub
?IIf函数
格式, Iif(条件,True部分,False部分 )
功能,当条件为真时,返回 true部分的值为函数值,
而当条件为假时,返回 False部分的值为函数值。
说明,
1、条件是逻辑表达式或关系表达式。
2,True部分和 False部分是表达式。
3,True部分和 False部分的返回值必须与结果
变量类型一致。
5.2 For循环结构程序设计
格式,
For <循环变量 > = <初值 > To <终值 > [Step <步长 >]
[<循环体 >]
[Exit For]
Next [<循环变量 > ]
功能,
For循环按确定的次数执行循环体,该次数由循环变量的
初值、终值和步长确定的。
说明,
1、循环变量:数值变量。
2、初值、终值、步长:数值表达式,值若为实数,则
自动取整。步长在不同情况下可为正、负,若省略则为 1。
3、循环体:需重复执行的语句,可以是一句或多句。
4,Exit For,用于退出循环。
5,Next,循环终端语句。其后的循环变量与 For语句
中的“循环变量”必须相同。
6、循环次数= Int(终值-初值 )/步长 + 1
循环可以嵌套,三种形式见 P113~ 114
例 5- 8 求自然数 n的阶乘。
Private Sub Form_Click()
Dim n%,i%,k%
n = InputBox("请输入 n值 ")
k = 1
For i = 1 To n
k = k * i
Next i
Print n; "!="; k
End Sub
例 5- 9 输入一个班的学生成绩,统计其中及格的学生人数,
并计算出全班的平均分数。
Private Sub Command1_Click()
Dim score%,i%,passn%,sum%,n%
sum = 0,passn = 0,n = 0
For i = 1 To 50
score = InputBox("请输入学生成绩 ")
If score < 0 Then,Exit For
Else
If score >= 60 Then passn = passn + 1
n = n + 1,sum = sum + score
End If
Next i
Text1.Text = Str$(n),Text2.Text = Str$(passn)
Text3.Text = Str$(sum / n)
End Sub
Private Sub Command2_Click()
End
End Sub
5.3 While循环结构程序设计
格式,While 条件
[循环体 ]
Wend
功能,当给定条件为 True时, 执行循环体 。
说明,1,先对, 条件, 进行测试, 才决定是否执行循环 。
2,循环体中应含有对, 条件, 的修改操作, 使循环体
能正常结束 。 否则, 会构成死循环 。
3,循环可嵌套, 不许交叉 。 每个 Wend和最近的
While相匹配 。
例 5- 10 小红今年 12岁,她父亲比她大 30岁,编程计算出她
父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?
Private Sub Form_Click()
Dim age As Integer
age = 12
While age * 2 <> age + 30
age = age + 1
Wend
Print, 经过” ; age - 12;, 年,小红父女的年龄分别
是:” ;_ age + 30; "和 "; age
End Sub
5,4 Do循环结构程序设计
格式 1,
Do [While|Until<条件 >]
[<循环体 >]
[Exit Do]
Loop
格式 2,
Do
[<循环体 >]
[Exit Do]
Loop [While|Until<条件 >]
功能,
当循环“条件”为真( While条件)或直到指定的
循环结束“条件”为真之前( Until条件)重复执行循环
体。
说明,
1、注意 While/Until的区别。
2、格式 1中,先判断条件,再决定是否执行循环体;
格式 2中,先执行循环体,再判断条件决定是重复循环
还是终止循环。
例 5- 11 编写程序,对任意输入的正整数 n(n>=3)判断
其是否为素数。
Private Sub Form_Click()
Dim n%,i%,k%
n = InputBox("请输入一个正整数( >=3)")
i = 2,k = Int(n / 2) 'k=int(sqr(n))
Do While i <= k
If n Mod i = 0 Then
Exit Do
Else
i = i + 1
End If
Loop
If i > k Then Print n; "是素数 " Else Print n; "不是素数 "
End Sub
例 5- 12 输入两个正整数,求它们的最大公约数
Private Sub Form_Click()
Dim m%,n%,r%,t%
m = InputBox("请输入第一个整数 ")
n = InputBox("请输入第二个整数 ")
If m < n Then t = m,m = n,n = t
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
Print "最大公约数是,"; m
End Sub
5.5 多重循环
多重循环,
在一个循环结构的循环体内含有另一个循环结构,
称为循环嵌套,又称为多重循环。
见书 P120的例 5- 13,5- 14
§ 5.6 程序举例
1、编写 9× 9乘法表
2,P125 例 5- 19
3,1!+ 2!+ 3!+ …… + 20!
本章主要内容
5.1 选择机构程序设计
5.2 For循环结构程序设计
5.3 While循环结构程序设计
5.4 Do循环结构程序设计
5.5 多重循环
5.6 程序举例
5.1 选择结构程序设计
?单行结构条件语句
格式,If <条件 > Then <语句 1>[Else<语句 2>]
功能,若条件成立或为非 0值, 则执行, 语句 1”, 否则
执行语句 2。
其中:, 条件, 通常是关系表达式或逻辑表达式 。
, 语句 1” 和, 语句 2” 可以是简单句或复合句 。
Else子句为可选项 。
例 5- 1 输入三个数,输出其中最大值。
Private Sub Command1_Click()
Dim a!,b!,c!,max!
a = InputBox("请输入第一个数 ")
b = InputBox("请输入第二个数 ")
c = InputBox("请输入第三个数 ")
max = a
If b > max Then max = b
If c > max Then max = c
Print a; ","; b; ","; c; "中最大值是,"; max
End Sub
例 5- 2 编程求符号函数 sign(x)的值。 P102
?块结构条件语句
格式,If condition1 Then
<statementblock-1>
[ElseIf condition2 Then
<statementblock-2>]
,.,
[Else
<statementblock-n>]
End If
功能,若“条件 1”成立,执行“语句块 1”;否则若
“条件 2”成立,执行“语句块 2”; …… 若上述条件均
不成立,执行“语句块 n” 。
例 5- 3 输入系数 a,b和 c,求二次方程 ax2+bx+c=0的
实根。 编程如下,
例 5- 4 给出 a,b,c的值,问它们能否构成三角形的
3边。如能构成三角形,计算此三角形的面积。
Private Sub Command1_Click()
Dim a!,b!,c!,d!,x1!,x2!,x
a = Val(InputBox("请输入系数 a:")),b = Val(InputBox("请输入系数 b:"))
c = Val(InputBox("请输入系数 c:")),d = b * b - 4 * a * c
If d > 0 Then
x1 = (-b + Sqr(d)) / (2 * a),x2 = (-b - Sqr(d)) / (2 * a)
Print "x1="; x1,"x2="; x2
Else
If d = 0 Then
x = -b / (2 * a),Print "x="; x
Else
Print "此方程无实根 "
End If
End If
End Sub
Private Sub Command2_Click()
End
End Sub
Goto语句
格式,GoTo <标号 >
功能,把控制转移到“标号”所在的程序行,并从该
行开始往下执行。
说明,1、标号实一个标识符或整型数;
2、程序必须给 GoTo语句提供唯一的转向入口,
入口处格式为,<标号 >:<语句 >
3,不能用 GoTo语句转向另一个过程。
例 5- 5,设计一个程序,从键盘上输入学生的分数,
统计其中及格的人数以及总平均分。 P106
?情况语句
Select Case <testexpression>
Case <expressionlist1>
[<statementblock-1>]
[Case <expressionlist2>
<statementblock-2>]
……
[Case Else
<statementblock-n>]
End Select
功能,根据“测试表达式”的值,从多个语句块中选择符
合条件的一个语句块执行。
说明,
1、“测试表达式”的值与“表达式表列”的值均不匹
配的时候,执行 case else 子句。
2、测试表达式可以是数值表达式或字符串表达式。
3,Case子句可以是一行或多行语句。
4、“表达式表列”中的表达式必须与测试表达式的类
型一致。
5、“表达式表列”称为域值,可以是下列形式之一,
1) <表达式 1>[,<表达式 2>]……
当“测试表达式”的值与其中之一相同,就执行该 Case子
句中的语句块。
2) <表达式 1> To <表达式 2>
当“测试表达式”的值落在表达式 1和表达式 2之间(含自
身),则执行该 Case子句中的语句块。表达式 1<表达式 2。
3) Is <关系表达式 >
当“测试表达式”的值满足“关系表达式”指定条件时,执
行该 Case子句中的语句块。
例 5- 6 从键盘上输入学生成绩,然后在文件框中显示其等级
(按 5级计分值输出不及格、及格、中等、良好、优秀)。
Private Sub Command1_Click()
Dim score As Integer,strx As String
start,score = InputBox(,请输入学生成绩” )
Select Case score
Case 0 To 59,strx$ =, 不及格”
Case 60 To 69,strx$ =, 及格”
Case 70 To 79,strx$ =, 中等”
Case 80 To 89,strx$ =, 良好”
Case 90 To 100,strx$ =, 优秀”
Case Else
MsgBox, 请输入 0~ 100范围内的整数”,“错误提示”
GoTo start
End Select
Text1.Text = score
Text2.Text = strx$
End Sub
例 5- 7 商店售货,按购买货物的款数多少分别给予不
同优惠折扣如下,编程计算购物款数。
Private Sub Command1_Click()
Dim m!,d!
m = InputBox("请输应付款,")
Select Case m
Case Is < 250,d = 0
Case Is < 500,d = 0.05
Case Is < 1000,d = 0.075
Case Is < 2000,d = 0.1
Case Else,d = 0.15
End Select
Text1.Text = Str$(m)
Text2.Text = Str$(d)
Text3.Text = Str$(m * (1 - d))
End Sub
Private Sub Command2_Click()
End
End Sub
?IIf函数
格式, Iif(条件,True部分,False部分 )
功能,当条件为真时,返回 true部分的值为函数值,
而当条件为假时,返回 False部分的值为函数值。
说明,
1、条件是逻辑表达式或关系表达式。
2,True部分和 False部分是表达式。
3,True部分和 False部分的返回值必须与结果
变量类型一致。
5.2 For循环结构程序设计
格式,
For <循环变量 > = <初值 > To <终值 > [Step <步长 >]
[<循环体 >]
[Exit For]
Next [<循环变量 > ]
功能,
For循环按确定的次数执行循环体,该次数由循环变量的
初值、终值和步长确定的。
说明,
1、循环变量:数值变量。
2、初值、终值、步长:数值表达式,值若为实数,则
自动取整。步长在不同情况下可为正、负,若省略则为 1。
3、循环体:需重复执行的语句,可以是一句或多句。
4,Exit For,用于退出循环。
5,Next,循环终端语句。其后的循环变量与 For语句
中的“循环变量”必须相同。
6、循环次数= Int(终值-初值 )/步长 + 1
循环可以嵌套,三种形式见 P113~ 114
例 5- 8 求自然数 n的阶乘。
Private Sub Form_Click()
Dim n%,i%,k%
n = InputBox("请输入 n值 ")
k = 1
For i = 1 To n
k = k * i
Next i
Print n; "!="; k
End Sub
例 5- 9 输入一个班的学生成绩,统计其中及格的学生人数,
并计算出全班的平均分数。
Private Sub Command1_Click()
Dim score%,i%,passn%,sum%,n%
sum = 0,passn = 0,n = 0
For i = 1 To 50
score = InputBox("请输入学生成绩 ")
If score < 0 Then,Exit For
Else
If score >= 60 Then passn = passn + 1
n = n + 1,sum = sum + score
End If
Next i
Text1.Text = Str$(n),Text2.Text = Str$(passn)
Text3.Text = Str$(sum / n)
End Sub
Private Sub Command2_Click()
End
End Sub
5.3 While循环结构程序设计
格式,While 条件
[循环体 ]
Wend
功能,当给定条件为 True时, 执行循环体 。
说明,1,先对, 条件, 进行测试, 才决定是否执行循环 。
2,循环体中应含有对, 条件, 的修改操作, 使循环体
能正常结束 。 否则, 会构成死循环 。
3,循环可嵌套, 不许交叉 。 每个 Wend和最近的
While相匹配 。
例 5- 10 小红今年 12岁,她父亲比她大 30岁,编程计算出她
父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?
Private Sub Form_Click()
Dim age As Integer
age = 12
While age * 2 <> age + 30
age = age + 1
Wend
Print, 经过” ; age - 12;, 年,小红父女的年龄分别
是:” ;_ age + 30; "和 "; age
End Sub
5,4 Do循环结构程序设计
格式 1,
Do [While|Until<条件 >]
[<循环体 >]
[Exit Do]
Loop
格式 2,
Do
[<循环体 >]
[Exit Do]
Loop [While|Until<条件 >]
功能,
当循环“条件”为真( While条件)或直到指定的
循环结束“条件”为真之前( Until条件)重复执行循环
体。
说明,
1、注意 While/Until的区别。
2、格式 1中,先判断条件,再决定是否执行循环体;
格式 2中,先执行循环体,再判断条件决定是重复循环
还是终止循环。
例 5- 11 编写程序,对任意输入的正整数 n(n>=3)判断
其是否为素数。
Private Sub Form_Click()
Dim n%,i%,k%
n = InputBox("请输入一个正整数( >=3)")
i = 2,k = Int(n / 2) 'k=int(sqr(n))
Do While i <= k
If n Mod i = 0 Then
Exit Do
Else
i = i + 1
End If
Loop
If i > k Then Print n; "是素数 " Else Print n; "不是素数 "
End Sub
例 5- 12 输入两个正整数,求它们的最大公约数
Private Sub Form_Click()
Dim m%,n%,r%,t%
m = InputBox("请输入第一个整数 ")
n = InputBox("请输入第二个整数 ")
If m < n Then t = m,m = n,n = t
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
Print "最大公约数是,"; m
End Sub
5.5 多重循环
多重循环,
在一个循环结构的循环体内含有另一个循环结构,
称为循环嵌套,又称为多重循环。
见书 P120的例 5- 13,5- 14
§ 5.6 程序举例
1、编写 9× 9乘法表
2,P125 例 5- 19
3,1!+ 2!+ 3!+ …… + 20!