1
Visual BasicVisual Basic
程序设计程序设计 (6.0(6.0版版))
安徽工程大学安徽工程大学 电气工程学院电气工程学院
徐晓光徐晓光
2
第3章 VB语言的基本控制结构
3.1 算法与结构P57
3.2 顺序结构P60
3.3 分支结构P67
3.4 循环结构P76
3.5 应用程序举例P82
3
3.1 算法与结构
• 一、算法
• 1、算法的概念:是对特定问题求解步骤的
一种描述。
• 2、算法的特征:有穷性、确定性、可行性、
有输0-n个入、有1个以上输出。
• 3、算法的描述:自然语言、符号、流程图、
N-S图、PAD图、程序语言等。
4
• 二、程序控制结构
• 1、顺序结构
• 2、选择结构
• 3、循环结构
5
3.2 顺序结构
一. 赋值语句
形式: [LET]变量名=表达式
作用: 将表达式的值赋值给变量名.
一般用于给变量赋值或对控件设定属性值.
例: sRate!=0.1
Text1.Text = "欢迎使用Visual Basic 6.0”
注意:P60
1、当表达式的类型与变量的类型不一致时,强制转换成
左边的精度。如: iA% = 10 / 3 iA中的结果为3
2、虽然赋值号与关系运算符等于号都用“=”表示,VB系
统会根据所处的位置自动判断是何种意义的符号。
3、赋值号左边只能是变量,不能是常量或表达式。
4、不能在一句赋值语句中,同时给多个变量赋值。
6
二、 人机交互函数和过程
VB与用户之间的直接交互是通过InputBox()函数、MsgBox()函数和
MsgBox过程进行的。
1.InputBox函数:P70
InputBox(提示[,标题][,缺省][,x 坐标位置][,y坐标位置])
其中:提示提示信息,标题对话框标题,缺省输入区缺省值
函数返回字符类型.
例要在屏幕上显示图示的对话框:
7
相应的语句如下:
Dim strName As String * 40
strName= InputBox( “请输入你的姓名” + vbCrLf + “然后单击确定” , “输入框” )
也可以使用如下语句:
Dim strName As String * 40, strS1 As String * 40
strS1 = “请输入你的姓名” + Chr(13) + Chr(10) + “然后单击确定”
strName= InputBox(strS1, “输入框”,, 100,100)
当键盘输入“王晓明”后,变量strName获得键盘输入的值.
8
2. MsgBox函数和MsgBox过程(P71)
函数形式:变量[%] = MsgBox(提示[,按钮][,标题])
过程形式: MsgBox提示[,按钮][,标题]
按钮值如下: 函数返回所选按钮整数值:
9
例3.2 编一帐号和密码检验程序。
要求:
帐号不超过6位数字,有错,清除原内容再输入.
密码输入时在屏幕上以 “*”代替; 若密码错,显示有关信息,
选择“重试”按钮,清除原内容再输入,选择“取消”按钮,停止
运行。
分析:
帐号6位,MaxLength为6 , LostFocus判断数字IsNumeric函数
密码PassWordChar为“*”,MsgBox函数设置密码错对话框.
10
3.3 选择结构
1. If…Then语句(单分支结构)
If <表达式> Then
语句块
End If
或 If <表达式> Then <语句>
例:已知两个数x和y,比较它们的大小,
使得x大于y.
If x
Then
<语句块1>
Else
<语句块2>
End If
(2)If <表达式> Then <语句1> Else <语句2>
计算分段函数
表达式
F
图 1-3-9 双分支结构
语句块 1
T
语句块 2
y x x x
x x x x
=
+ + ¹
- + =
ì
í
ï
îï
sin
cos
2
3
1 0
3 0
单分支结构实现: [if x=0 then ] y=cos(x)-x^3+3*x
If x<>0 Then y=sin(x)+sqr (x*x+1)
双分支结构实现: If x<>0 Then
y=sin(x)+sqr (x*x+1)
Else
y=cos(x)-x^3+3*x
End If
12
3. If…Then…ElseIf语句(多分支结构)
形式:
If <表达式1> Then
<语句块1>
ElseIf <表达式2>Then
<语句块2>
…
[Else
语句块 n+1 ]
End If
表达式 1
表达式 2
表达式n
T
F
T
F
图 1-3-10 多分支结构
语句块 n 语句块n+1 语句块 2 语句块 1
F
⋯
T
13
例3.3 已知变量strC中存放了一个字符,判断该字符是字母字
符、数字字符还是其他字符。
用多分支结构实现:
If Ucase(strC) >="A" And Ucase (strC) <="Z" Then
Print strC + "是字母字符"
ElseIf strC >="0" And strC <="9" Then
Print strC + "是数字字符"
Else
Print strC + "其他字符"
End If
不管有几个分支,依次判断,当某条件满足,执行相应的语句,
其余分支不再执行;若条件都不满足,且有Else子句,则执行该
语句块,否则什么也不执行。.
ElseIf不能写成 Else If。
14
例3.3a 根据边长判断三角形类型
15
例3.4 已知百分制成绩mark,显示对应的五级制成绩
哪些正确,哪些错误?
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
一
If mark >= 90 Then
Print "优"
ElseIf mark >= 80 Then
Print "良"
ElseIf mark >= 70 Then
Print "中"
ElseIf mark >= 60 Then
Print "及格"
Else
Print "不及格"
End If
方法二
If mark < 60 Then
Print "不及格"
ElseIf mark < 70 Then
Print "及格"
ElseIf mark < 80 Then
Print "中"
ElseIf mark < 90 Then
Print "良"
Else
Print "优"
End If
方法三
If mark >= 60 Then
Print "及格"
ElseIf mark >= 70 Then
Print "中"
ElseIf mark >= 80 Then
Print "良"
ElseIf mark >= 90 Then
Print "优"
Else
Print "不及格"
End If
正确:方法一、二 错误:方法三
16
4.If语句的嵌套
If语句的嵌套是指If或Else后面的语句块中又包含If语句。
形式如下:
If <表达式1> Then
If <表达式11> Then
…
End If
…
End If
17
T
x >y
T
z 为最小数
T
使得 x >y
F
F
F
x >y>z
x < y
x 与 y 交换
y < z
y 与 z 交换
x< y
x 与 y 交换
例3.5
已知x,y,z三个数,使得x>y>z
用一个IF语句和一个嵌套的IF语句实现
If x:与<变量或表达式>的类型必须相同,可以是下面
四种形式之一:
1)表达式 例: "A"
2)一组枚举表达式(用逗号分隔) 2,4,6,8
3)表达式1 To 表达式2 60 To 100
4) Is 关系运算符表达式 Is < 60
5. Select Case语句(情况语句)
形式:
Select Case 变量或表达式
Case 表达式列表1
语句块1
Case 表达式列表2
语句块2
…
[Case Else
语句块n+1]
End Select
变量:只能含有一个
表达式:数值型或字符串
19
例3.6 变量strC中存放了一个字符,判断该字符类型。
在例4.2中用多分支结构实现:
If Ucase(strC) >="A" And Ucase (strC) <="Z" Then
Print strC + "是字母字符"
ElseIf strC >="0" And strC <="9" Then
Print strC + "是数字字符"
Else
Print strC + "其他字符"
End If
用Select Case语句实现:
Select Case strC
Case "a" To "z","A" To "Z"
Print strC + "是字母字符"
Case "0" To "9"
Print strC + "是数字字符"
Case Else
Print strC + "其他字符"
End Select
20
例3.7 已知坐标点(x,y),判断其落在哪个象限。
哪个能实现,哪个不能实现?
方法一
If x > 0 And y >0 Then
Print "在第一象限"
ElseIfx < 0 And y > 0 Then
Print "在第二象限"
ElseIfx < 0 And y < 0 Then
Print "在第三象限"
ElseIfx > 0 And y <0 Then
Print "在第四象限"
End If
方法二
Select Case x,y
Case x > 0 And y > 0
Print "在第一象限"
Case x < 0 And y > 0
Print "在第二象限"
Case x < 0 And y < 0
Print "在第三象限"
Case x > 0 And y <0
Print "在第四象限"
End Select
方法二代码错误:
1. Select Case 后不能出现多个变量;
2. Case后不能出现变量及有关运算符。
比较:Select Case结构清
晰,但使用受到限制,
因此,凡是对多个变量
的条件判断只能用If的多
分支结构来实现。
21
例3.8由计算机来当一年级的算术老师,要求给出一系列的1~10的
操作数和运算符,学生输入该题的答案,计算机根据学生的答案判
断正确与否,当结束时给出成绩。
分析:产生1~10操作数,可通过Int(10 * Rnd + 1) 实现
设置的控件名
Label1
Text1
Picture1
Command1
22
6.条件函数
(1)IIf函数形式是:
IIf(表达式,当表达式为True时的值,当表达式为False时的值)
例如,求x,y中大的数,放入Tmax变量中,语句如下:
Tmax=IIf(x > y,x,y)
(2)Choose函数形式是:
Choose(数字类型变量,值为1的返回值,值为2的返回值……)
例如,Nop是1-4的值,转换成+ 、-、×、÷运算符的语句如下:
Op=Choose(Nop,"+","-","×","÷")
当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字符
串“-”,依次类推;当Nop是1-4的非整数,系统自动取Nop的整数办
法在判断;若Nop不在1-4之间,函数返回Null值。
(3) Switch函数形式是:
Switch(条件表达式1,条件表达式1为True时的值
[,条件表达式2,条件表达式2为True时的值……])
23
本节常见错误
1.在选择结构中缺少配对的结束语句
对多行式的If块语句中,应有配对的 End If语句结束。
2. 多边选择ElseIf关键字的书写和条件表达式的表示
ElseIf不要写成Else If;
多个条件表达式次序问题,见例3.3
3. Select Case语句的使用
Select Case 后不能出现多个变量;Case子句后不
能出现变量见例3.6
24
1. For循环语句 (一般用于循环次数已知)
形式
For 循环变量=初值 to 终值 [Step 步长]
语句块
[Exit For]
语句块
Next 循环变量
循环变量< =终值
语句块
Exit For
语句块
循环变量加步长
T
F
循环变量得初值
循环体
例4.8 计算1~100的奇数和,程序段如下:
Dim i %, s% 等价于: Dim i %, s%
s=0 s=0 : i = 1
For i = 1 To 100 step 2 re: If i <= 100 Then
s = s + i s = s + i
Next i i = i +2
GoTo re
End If
3.5.4 循环结构
25
>0 初值<终值 =1 时,可省略
<0 初值>终值
=0 死循环
循环次数 )1( += -
步长
初值终值Int
要注意:
v 出了循环,循环控制变量值的问题。
例程序段:
For i=2 To 13 Step 3 循环执行次数
Print i , 输出 i的值分别为:
Next i 2 5 8 11
Print : Print “I=“, i 出了循环输出为: I=14
v 在循环体内对循环控制变量可多次引用;但最好不要对其
赋值,否则影响原来的循环控制规律。
4)1( 3 213 =+= -Int
步长
26
例3.9 改变循环控制变量对循环的影响。
Private Sub Command1_Click()
j = 0
For i = 1 To 20 Step 2
i = i + 3
j = j + 1
Print "第"; j; "次循环i="; i
Next i
Print "退出循环后i="; i
End Sub
正常情况:i=1,3,5,7,9,11,13,15,17,19
现在:i=4,9,14,19
例3.10 输出可打印的ASCII码字符与它的编码值。
27
形式1:
Do { While|Until }<条件>
语句块
[Exit Do
语句块]
Loop
形式2:
Do
语句块
[Exit Do
语句块]
Loop { While|Until} <条件>
T
F
Exit Do
语句块
语句块
表达式列表 1
图 1-3-16 Do ⋯Loop While
表达式列表 1 F
T
Exit Do
语句块
语句块
图 1-3-15 Do While⋯Loop
2. Do…Loop循环语句(用于控制循环次数未知)
28
例3.11 我国有13亿人口,按人口年增长0.8%计算,多少年
后我国人口超过26亿。
分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n
直接利用标准对数函数求得;也可利用循环求得,程序如下:
Private Sub Command1_Click()
x = 13
n = 0
Do While x < 26
x = x * 1.008
n = n + 1
Loop
Print n, x
End Sub
29
例3.12用辗转相除法求两自然数m,n的最大公约数和最小公倍数。
分析:求最大公约数的算法思想:
(1)对于已知两数m,n,使得m>n;
(2) m除以n得余数r;
(3)若r=0,则n为最大公约数结束;否则执行(4);
(4)mçn,nçr,再重复执行(2)。
例求 m=14 ,n=6的最大公约数.
If m < n Then t = m: m = n: n = t
r=m mod n
Do While (r <> 0)
m=n
n=r
r= m mod n
Loop
Print "最大公约数=", n
m n r
14 6 2
6 2 0
辗转相减法
§ m=m-n m>n
§ n=n-m n>m
§ m、n为公约数 m=n
Do While m <> n m n
If m > n Then 14 6
m = m – n 8 6
Else 2 6
n = n – m 2 4
End If 2 2
Loop
30
3、While …Wend循环: (类似于Do While…Loop)
格式为:While <表达式>
<语句序列>
Wend
执行过程:先计算表达式的值,如果表达式的值为True,则执
行循环体,遇到Wend语句后,返回到While语句并再对条件进
行测试,如为True,则继续执行循环体,如为False,则退出
循环体。
举例:
31
4.循环的嵌套
一个循环体内又包含了一个完整的循环结构称为循环的嵌套.
例4.13打印九九乘法表.
For i = 1 To 9
For j = 1 To 9
se = i & “×" & j & "=" & i * j
Picture1.Print Tab((j - 1) * 9 + 1); se;
Next j
Picture1.Print
Next i
思考:打印上三角或下三角程序如何改动?
上三角 For j=i To 9
下三角 For j=1 To i
32
For ii =1 To 10
For jj=1 To 20
…
Next ii
Next jj
For ii =1 To 10
For ii=1 To 20
…
Next ii
Next ii
For ii =1 To 10
For jj=1 To 20
…
Next jj
Next ii
For ii =1 To 10
…
Next ii
For ii =1 To 10
…
Next ii
对于循环的嵌套,要注意以下事项:
§内循环变量与外循环变量不能同名;
§外循环必须完全包含内循环,不能交叉;
§不能从循环体外转向循环体内,反之则可以。
正确 错误
33
本节常见错误
1. 不循环或死循环的问题
主要是循环条件、循环初值、循环终值、循环步长的设置有问题。
2. 循环结构中缺少配对的结束语句
For 少配对的Next
3. 循环嵌套时,内外循环交叉
4. 累加、连乘时,存放累加、连乘结果的变量赋初值问题
(1)一重循环
在一重循环中,存放累加、连乘结果的变量初值设置应在循环语
句前。
(2)多重循环:这要视具体问题分别对待。如:1!+2!+3!+…+n!
5.大数相乘产生“溢出”问题
34
3.5.5 其他辅助控制语句
1. GoTo语句
形式: GoTo {标号|行号}
作用:无条件地转移到标号或行号指定的那行语句.
标号是一个字符序列,行号是一个数字序列.
2.开关语句: On-GoTo语句
3.Exit语句
多种形式: Exit For、Exit Do、Exit Sub、Exit Function等。
作用:退出某种控制结构的执行。
4. End语句
多种形式: End、 End If、 End Select、 End With、 End Type、
End Sub、 End Function等。
作用:End结束一个程序的运行;其余表示某个结构的结束,与
对应的结构语句配对出现。
35
6.With 语句
形式如下: With 对象
语句块
End With
作用:对某个对象执行一系列的操作,而不用重复指出对象
的名称。
Label1.Height = 2000
Label1.Width = 2000
Label1.FontSize=22
Label1.Caption = "MyLabel"
等价
With Label1
.Height = 2000
.Width = 2000
.FontSize=22
.Caption = "MyLabel"
End With
36