结构化程序设计的基本控制语句有三种,顺序结构,选择结构,循环结构。 这三种还可以派生出多分支结构,根据给定的条件从多个分支路径中选择执行其中的一个。
选择控制语句
简单了解一下 选择控制语句的定义
用途: 对给定的条件进行,分析,判断,根据结果悬着不同的操作。
选择语句通过条件语句来实现,条件语句也叫做if语句,他有两种格式,单行结构和块结构。
## 单行结构
if 条件 then
[Else else]
if 条件为真 则执行 then部分内容 if 条件为假 则执行 Else 部分内容
Else可以省略
嵌套语句就是 在then 部分 和 Else 部分 再加 上 条件语句。
例子:
嵌套规则: 每一个Else 与 未曾被配对的if-Then 配对
块结构选择
if 条件 1 THen
Elif 条件2 Then
Else
End if
注意:
语句块不可以和 then 放在同一行,否则会被认为是单行结构条件语句。
嵌套的时候,记住“包住”
例子 7.1
··
Dim n As Single
Dim n2 As Single
Dim n1 As Single
Dim total As Single
Dim score As Single
Private Sub Command1_Click()
msg$ = "请输入分数(-1 结束)"
msgtitle$ = "请输入数据"
start:
score = InputBox(msg$, msgtitle$)
If score < 0 Or score > 100 Then
GoTo Finish
Else
total = total + score
n = n + 1
If score < 60 Then
n1 = n1 + 1
Else
n2 = n2 + 1
End If
End If
GoTo start
Finish:
End Sub
Private Sub Command2_Click()
Text1.Text = Str$(n2)
Text2.Text = Str$(n1)
Text3.Text = Str$(total / n)
End Sub
Private Sub Command3_Click()
n = 0: n1 = 0: total = 0
End
End Sub
Private Sub Form_Load()
End Sub
IIF函数
执行简单的条件判断,
IIF(条件,True部分,False部分)
多条件分支
格式
Select Case 测试表达式
Case 表达式1
语句块
Case 表达式2
语句块
Case 表达式
语句块
Case Else
语句块
end Select
关键词 TO 用来指定: 一个范围,必须把较小的值写到前面,较大的值写到后面
Sub Form_Click()
msg = "Enter Data"
var = InputBox(msg)
Select Case var
Case 1
Text1.Text = "1"
Case 2
Text2.Text = "2"
Case 3
Text1.Text = "3"
Case 4
Text1.Text = "4"
Case 5
Text1.Text = "5"
Case Else
Text1.Text = "Good Bye"
End Select
End Sub
说明: 先对“测试表达式”求值,然后再与Case 子句中的“表达式表列”相匹配,
表达式表列 有三种形式
- To
- Is
- Case 2,4,6,8
- 混用
Case Is < 5
Case Is > 10 And Is < 20 erro Is 只能是最简单的条件
Case Is>Lowerbound,5,6,7,12,Is<uperbound
Case Is<"HAN","MAN","TO","Tao"
Sub Form_Click()
msg$ = "Enter Data"
var = InputBox(msg$)
if var = 1 Then
Print "One"
Elif var = 2 Then
Pirnt "Two"
Elif var = 3 Then
Pirnt "Three"
Else
Print "Must be integer from 1 to 3"
End if
End Sub
改成多分支控制语句
Sub Form _Click()
msg$ = "Enter Data"
var = InputBox(msg$)
Select Case var
Case 1
Print "One"
Case 2
Print "Two"
Case 3
Print "Three"
Case Else
Print "Must be integer form 1 to 3"
End Select
End Sub
说明
同一个值域范围中,只执行复合条件中的Case的第一个
Case子句不可矛盾,
Private Sub Form_Click()
Dim Msg, UserInput
Msg = "Please enter a letter or number form 0 through 9."
UserInput = InputBox(Msg)
If Not IsNumeric(UserInput) Then
If Len(UserInput) <> 0 Then
Select Case Asc(UserInput)
Case 65 To 90
Msg = "daxie zhimu"
Msg = Msg & Chr(Asc(UserInput)) & "'."
Case 97 To 122
Msg = "小写之母"
Msg = Msg & Chr(Asc(UserInput)) & "'."
Case Else
Msg = "You did not enter a letter or a number"
End Select
End If
Else
Select Case CDbl(UserInput)
Case 1, 3, 5, 7, 9
Msg = UserInput & " is an odd number"
Case 0, 2, 4, 6, 8
Msg = UserInput & " is an even number"
Case Else
Msg = "You entered a number outside"
Msg = Msg & "the requested range"
End Select
End If
MsgBox Msg
End Sub
IsNumeric 函数 判断是不是数值
For循环
先看例子
to = 0
Fo I = 2 to 10 step 2
t = t+1
Next I
说明规则
一目了然
1. I 是循环变量 必须 和 Next(循环终端语句) 后面的 变量相同
2. 2 to 10 初始值 to 终值
3. step后面是步长,可以是正数 负数 不能为0 不写 默认为1
注意, 为负数的时候,初值要大于终值,否则程序不会执行
过程
-
把初始值赋给I
-
把i和终值进行比较,诺I>终值, 调到5 ,否则执行 循环体
-
执行循环体,I 增加一个步长
-
返回2执行
-
执行Next 后面的 语句
-
嵌套
不可以骑跨。
循环变量唯一
for j = ....
for i = ...
for a =...
Next a
Next i
Next j
right
for j = ....
for i = ...
for a =...
Next
Next
Next
right
for j = ....
for i = ...
for a =...
Next a,i,j
right
循环变量 如果在循环体中被引用,我们把循环变量称作操作变量
不被引用的循环变量叫做形式变量
循环变量引用较多的时候,会影响程序 的清晰性
Sub Form_Click()
Dim N As Integer
N = InputBox("Enter X")
k = 1
For i = 1 To N
k = k * i
Next i
Print N;"!=";k
End Sub
;连接变量
这里的i为操作变量
省略 step
Dim N As Integer
N = InputBox("Enter N:")
k = 1:m =1
For i = 1 To N
k = k * m: m = m+1
Next i
Pirnt N;"!=";k
正常结束,循环变量到达终值,但是有些时候,需要退出循环
For i = 1 to 100
For j = 1 to 100
Print i + j
if i*j>5000 Then Exit For
Next j,i
显然 Exit For 用于退出循环
当循环控制
先看例子
while b>0
c = c + a
b = b - 1
Wend
当循环可以指定以个循环终止的条件,For循环只能指定次数的重复,
当循环适用与,根据数据的某个条件是否出现来控制循环
## 说明 1. while循环先对,条件进行判断 ,只有条件为真的时才执行循环,条件从一开始就不成立,那么一次都不执行
2. 如果while循环总是成立,就不停的执行循环
3. 循环可以嵌套, wend 与最近的while匹配
Dim n As Integer
n = InputBox("请输入一个数(>=3)")
s = 0
For m = 2 To n/2
if n Mod m = 0 Then
s = 1
Exit For
Next m
if s = 0 Then
Print n;"是一个素数"
Else
Print n;"不是素数"
End if
Do循环
先看例子
Private Sub Commandn_Click()
I = 0
Print "*******LOOP start***********"
Do
Print "Value o f I is ";I
I = I + 1
Loop While I < 10
Print "*************Loop OVer**************"
Print "Value of I at the end of loop is ",I
End Sub
Do…Loop while
Do…Loop Until
Do while …loop
Do Until …loop
Do …loop
Exit Do t跳出循环
多重循环