420 likes | 646 Views
第 4 章 控制结构. 4.1 顺序控制结构. 4.2 选择结构. 4.3 循环结构. 4.4 其他辅助控制语句. 4.1 顺序控制结构. 一、赋值语句 形式: 变量名=表达式 对象 . 属性=表达式(或属性值) 作用: 将表达式的值赋值给变量名。 一般用于给变量赋值或对控件设定属性值。 例: x=0.1 Text1.Text = " 欢迎使用 Visual Basic 6.0 " 当表达式的类型与变量的类型不一致时,强制转换成左边的精度,如
E N D
第4章 控制结构 4.1 顺序控制结构 4.2 选择结构 4.3 循环结构 4.4 其他辅助控制语句
4.1 顺序控制结构 一、赋值语句 形式:变量名=表达式 对象.属性=表达式(或属性值) 作用: 将表达式的值赋值给变量名。 一般用于给变量赋值或对控件设定属性值。 例: x=0.1 Text1.Text = "欢迎使用Visual Basic 6.0 " 当表达式的类型与变量的类型不一致时,强制转换成左边的精度,如 a% = 10 / 3 iA中的结果为3 注意:虽然赋值号与关系运算符等于号都用“=”表示,VB系统会根据所处的位置自动判断是何种意义的符号。
二、与用户交互函数和过程 1. InputBox函数 InputBox()函数可以产生一个对话框,这个对话框作为输入数据的界面,等待用户输入数据,当用户单击“确定“按钮或回车时,函数返回输入的值,类型为字符型。函数格式如下: 变量 = InputBox(提示[,标题][,缺省][,x 坐标位置][,y坐标位置])
2. MsgBox函数和MsgBox过程 函数形式:变量[%] = MsgBox(提示[,按钮][,标题]) 按钮值如下: 函数返回所选按钮整数值:
若不需要返回值,则可以使用MsgBox过程形式: MsgBox〈信息内容〉[,〈对话框类型〉[,标题〉]]
学习要点: If…Then结构 If…Then…Else结构 多分支If结构:If…Then…ElseIf Select Case结构 4.2 选择结构
1. If…Then语句(单分支结构) If <表达式> Then 语句块 End If 或If <表达式> Then <语句> If结构 注:如果表达式的值为真(True),执行Then后的语句块内容;否则不执行语句块内容。 说明:表达式可以是:关系表达式、逻辑表达式、算术表达式。若为算术表达式,值为0则为False,非0则为True。
例:已知两个数x和y,比较它们的大小, 使得x大于y. If x<y Then t=x ‘将变量x中的值暂时存放于变量t中 x=y ‘用变量y中的值替代变量x中的值 y=t ‘再将原变量x中的值替代变量y中的值 End If 或 If x<y Then t=x: x=y: y=t
2. If…Then…Else语句(双分支结构) If <表达式> Then <语句块1> Else <语句块2> End If If <表达式> Then <语句1> Else <语句2>
例:编写一个程序,实现当用户输入的用户名和口令都正确时显示"欢迎登录"的消息对话框,当用户名或口令有错误时显示消息对话框报告错误。例:编写一个程序,实现当用户输入的用户名和口令都正确时显示"欢迎登录"的消息对话框,当用户名或口令有错误时显示消息对话框报告错误。 If…Then…Else结构示例 • 界面设计:
T F 用户名和口 令正确吗? 显示"欢迎" 消息框 显示"错误" 消息框 If…Then…Else结构示例 • 编写代码: Private Sub Command1_Click() Dim user As String Dim psw As String user = Text1.Text psw = Text2.Text End Sub If user ="SYL" And psw = "123456" Then MsgBox "欢迎您登录本系统!" Else MsgBox “您的用户名或口令有误,请重新输入!” End If
例: 编写一医生工作站的登录检验程序,运行界面如图。对登录名(医生工号)和密码的规定如下: (1)医生工号不超过6位数字,密码为6位字符,密码输入时显示为“*”。本题假设密码为“cljuan”。 (2)当医生工号输入非数字字符,密码不正确时,显示相关信息。 (3)若单击“重试”按钮,则清除原来输入的内容,焦点定位在原输入文本框,等待用户输入。若单击取消按钮,程序停止运行。
Private Sub Command1_Click() Dim i As Integer IF Not Text2 = "cljuan" Then i= MsgBox("密码错误", 5 +64+ 0 + VBSystemModel, "登录密码") IF i = 2 Then End Else Text2 = "" ‘用户单击“取消”按钮返回按钮值 ‘用户单击”重试”按钮文本框置空,等待用户重新输入 Text2.SetFocus ‘将焦点设置在文本框2上,方便用户输入 End IF End Sub
Private Sub Text1_LostFocus() ‘焦点离开文本框1时触发LostFocus事件 IF Not IsNumeric(Text1) Then ‘利用IsNumeric()函数判断文本框中输入的是否为数字字符 MsgBox "医生工号必须是数字字符" Text1 = "" Text1.SetFocus End IF End Sub
3. If…Then…ElseIf语句(多分支结构) 形式: If <表达式1> Then <语句块1> ElseIf <表达式2>Then <语句块2> … [Else 语句块 n+1 ] End If
例:编写一个程序,根据用户输入的某个学生的成绩评出优、良好、中等、及格和不及个五个等级。判断标准如下:例:编写一个程序,根据用户输入的某个学生的成绩评出优、良好、中等、及格和不及个五个等级。判断标准如下: 多分支If结构示例 不及格score<60 及格 60≤score<70 中等 70≤score<80 良好 80≤score<90 优 score≥90 等级
分析: • 本题要解决的问题是根据输入学生的成绩来判断该学生的成绩等级。有一个输入量(学生的成绩)和一个输出量(判断结果),所以用一个文本框来接受用户输入,一个文本框来进行输出。再添加一个"判断"按钮,和一个"退出"按钮。 • 界面设计:
编写代码: Private Sub Command1_Click() Dim score As Single Dim s As String score = Val(Text1.Text) End Sub T If score < 60 Then s = "不及格" ElseIf score < 70 Then s = "及格" ElseIf score < 80 Then s = "中等" ElseIf score < 90 Then s = "良好" Else s = "优" End If Text2.Text = s
4.If语句的嵌套 If语句的嵌套是指If或Else后面的语句块中又包含If语句。 形式如下: If <表达式1> Then If <表达式11> Then … End If … End If If 语句的嵌套注意事项:书写锯齿型; If 与End If 配对。
例4-6在文本框中输入1-1000之间的数字,如果输入非数值,或数值超出范围,给予提示,并重新输入。运行效果及程序代码如下:例4-6在文本框中输入1-1000之间的数字,如果输入非数值,或数值超出范围,给予提示,并重新输入。运行效果及程序代码如下: Private Sub Form_Load() Text1.Text = "" Text2.Text = "" End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then '回车键的ASCII码值为13 If IsNumeric(Text1.Text) Then '判断是否是数值 x = Val(Text1.Text) If x < 0 Or x > 1000 Then Text1.Text = "" Text1.SetFocus '焦点回到文本框 Text2.Text = "数值超出范围,再输入!" '文本框中显示提示信息 Else Text2.Text = "输入正确!" End If Else Text1.SetFocus Text2.Text = "请输入数字!" End If End If End Sub
5. Select Case语句(情况语句) Select Case 变量或表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 … [Case Else 语句块n+1] End Select 数值型或字符串表达式 <表达式列表>:与<变量或表达式>同类型的下面四种形式之一: 表达式 例: "A" 一组枚举表达式(用逗号分隔) 2,4,6,8 表达式1 To 表达式2 60 To 100 Is 关系运算符表达式 Is < 60
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值。
4.3 循环结构 学习要点: • 掌握For循环控制结构 • 掌握DO循环结构 • 循环的嵌套 • 常用算法
>0 初值<终值 =1 时,可省略 <0 初值>终值 =0 死循环 步长 循环次数 1. For循环语句 (一般用于循环次数已知),形式如下: For 循环变量=初值 to 终值 [Step 步长] 语句块 [Exit For] 语句块 Next 循环变量 循环体
例4-8求100以内所有数的和。 程序块如下: Sum =0 ‘sum 为累加和变量,设初值为0 For i= 1 To 100 Sum=Sum+i Next i 又如:求10的阶乘。 T=1 ‘T为连乘积的变量,设初值为1 For i=1 To 10 T=T*i Next i
例: 计算1~100的奇数和,程序段如下: Dim i %, s% s=0 For i = 1 To 100 step 2 s = s + i Next i
2. Do…Loop循环语句(用于控制循环次数未知) 形式1: Do { While|Until }<条件> 语句块 [Exit Do 语句块] Loop 形式2: Do 语句块 [Exit Do 语句块] Loop { While|Until} <条件>
例:我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。例:我国有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
(1)内外循环变量同名错误: For i=1 To 10 For i =1 To 20 …. Next i Next i (2)内外循环交叉 For i = 1 To 10 For j=1 To 10 … Next i Next j 3.循环的嵌套在一个循环体内又包含了一个完整的循环结构称为循环的嵌套。循环的嵌套对For循环语句和Do…Loop语句均适用。对于循环的嵌套,需要注意以下事项: 内循环变量与外循环变量不能同名。 外循环必须完全包含内循环,不能交叉。以下程序段是错误的:
4.4 其他辅助控制语句 1. Go To 语句 形式: Go To {标号|行号} 作用:无条件地转移到标号或行号指定的那行语句. 标号是一个字符序列,行号是一个数字序列. 2.Exit语句 多种形式: Exit For、Exit Do、Exit Sub、Exit Function等。 作用:退出某种控制结构的执行。 3. End语句 多种形式: End、 End If、 End Select、 End With、 End Type、 End Sub、 End Function、 作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。
4.With 语句 形式如下: With 对象 语句块 End With 作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。 With Label1 .Height = 2000 .Width = 2000 .FontSize=22 .Caption = "MyLabel" End With Label1.Height = 2000 Label1.Width = 2000 Label1.FontSize=22 Label1.Caption = "MyLabel" 等价
常用算法 例:求100以内的素数素数也成质数,就是大于2且只能被1和本身整除的整数。我们从素数的定义来求解:从i=2,3,4,…,m-1依次判断m能否被i整除,只要有一个能整除m就不是素数,否则m为素数。运行结果如图
Private Sub Command1_Click() • Dim i As Integer, m As Integer, Flag As Boolean, n As Integer • Print "100以内的素数有" • For m = 3 To 100 • Flag = True • For i = 2 To m - 1 • IF (m Mod i) = 0 Then Flag = False • Next i • IF Flag = True Then • n = n + 1 • Print Spc(3 - Len(Str(m))); m; • IF n Mod 10 = 0 Then Print • End IF • Next m • End Sub
例:利用随机函数产生20个50~100范围内的随机数,显示最大值和最小值。运行界面如图:例:利用随机函数产生20个50~100范围内的随机数,显示最大值和最小值。运行界面如图: 在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。
Private Sub Command1_Click() Dim maxa As Integer, mina As Integer, x As Integer, i% Form1.Cls ‘每单击一次清除原来内容 maxa = 50 ‘假设较小的数为最大 mina = 100 ‘假设较大的数为最小 Randomize For i = 1 To 20 x = Int(Rnd * 51 + 50) Print x; IF i Mod 10 = 0 Then Print IF x > maxa Then maxa = x IF x < mina Then mina = x Next i Print Print "最大值为"; maxa Print "最小值为"; mina End Sub
例:使用循环语句在窗体上输出第2章中例2-2中的图形。程序运行界面如图例:使用循环语句在窗体上输出第2章中例2-2中的图形。程序运行界面如图
程序代码如下: Private Sub Command1_Click() Dim n As Integer Cls n = Val(Text1.Text) If n > 0 Then For i = 1 To n Print Tab(2 * i); String(n + 1 - i, "★"); spc(1); String(i, "★") Next i End If End Sub
例:使用循环语句在窗体上输出如下图形。程序运行界面如图例:使用循环语句在窗体上输出如下图形。程序运行界面如图
Private Sub Command1_Click() Dim n As Integer Cls n = Val(Text1.Text) For i = 1 To n Print Tab(15 - i); String(2 * i - 1, Chr(48 + i)) Next I End Sub
例:使用循环语句在窗体上输出n(文本框输入)个随机大写字母,每行显示5个。程序运行界面如图例:使用循环语句在窗体上输出n(文本框输入)个随机大写字母,每行显示5个。程序运行界面如图
Private Sub Command3_Click() Dim n%, i%, m%, x As String Cls n = Val(Text1.Text) For i = 1 To n x = Chr(Int(Rnd * 26 + 65)) Print x; Spc(2); m = m + 1 If m Mod 5 = 0 Then Print Next i End Sub