第5章VB控制结构_第1页
第5章VB控制结构_第2页
第5章VB控制结构_第3页
第5章VB控制结构_第4页
第5章VB控制结构_第5页
已阅读5页,还剩26页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 VBVB控制结构控制结构Visual Basic程序设计教程 2014年4月12日教学目标教学目标 能熟练运用VB基本语句进行顺序、选择和循环结构的代码设计; 会使用三种控制结构解决实际问题。5.1 5.1 顺序顺序结构结构 在VB程序中,顺序结构语句主要包括变量声明语句、赋值语句、注释语句等。VB没有专门的输入输出语句,但输入输出功能可以通过文本框等控件和Print等方法来实现,另外用户还可以使用InputBox函数和Msgbox函数与用户交互来实现输入输出。图5-1 顺序结构流程图1.InputBox函数 InputBox函数可接受用户通过键盘输入的数据,并返回其输入的内容

2、。该函数的使用形式为: Var=InputBox(Prompt, Title, Default , Xpos , Ypos ) InputBox函数各参数的含义如下:Prompt:在窗口上显示的用于提示的文字信息,字符串类型。该参数不能缺省;Title:显示在标题栏上的文字信息,缺省时为所在工程名;Default:编辑框中的缺省值,缺省时为空;Xpos和Ypos:决定着对话框在屏幕中显示的位置,单位为twip。例如,要在屏幕上显示如图5-2的对话框,可使用InputBox语句: X = InputBox(请输入一个正数, 输入框, 100) 5.1 5.1 顺序顺序结构结构该函数会产生“确定”

3、和“取消”两个按钮(如图5-2所示)。单击“确定”,将返回输入数据,单击“取消”,则返回空字符串;返回值是字符串类型,当需要用该函数输入数值数据时,应使用Val函数将其转换成相应的数据;注意InputBox函数只能输入一个值,如需输入多个值,需多次运行该函数;InputBox函数中的参数必须按照顺序一一对应,当某些参数缺省时,必须用相应的逗号分隔,例如:X = (InputBox(请输入一个正数, , 100) 2.MsgBox函数和语句MsgBox函数形式为: Var = MsgBox(Prompt, Button, Title)其中:Prompt和Title的含义与InputBox函数中相

4、应的含义相同;Button是整型表达式,由“按钮类型和数目”+“图标类型”+“默认按钮”+“模式”四部分组成。各部分可选的值及其功能见表5-1、表5-2、表5-3;若程序中需要返回值,则使用函数,否则可作为语句使用。根据用户所选按钮,MsgBox函数返回17的整数值,其含义如表5-4所示。 MsgBox语句形式: MsgBox Prompt, Button, Title 5.1 5.1 顺序顺序结构结构 MsgBox函数与语句的主要区别在于:MsgBox函数只能是语句的一部分,不能独立存在,但它有返回值,对程序控制非常有用;而MsgBox可作为语句直接使用,此时没有返回值。例如要实现如图5-3

5、所示的对话框,MsgBox函数与语句的使用方法如下: Private Sub Command1_Click() X = MsgBox(注意:你输入的数据不正确, 51, 错误提醒)函数形式 MsgBox 注意:你输入的数据不正确, 51, 错误提醒语句形式 End Sub 5.1 5.1 顺序顺序结构结构内部常数内部常数按钮值按钮值描述描述vbOkOnly0显示Ok和OnlyvbOkCancel1显示Ok和CancelvbAbortRetryIgnore2显示Abort、Retry和IgnorevbYesNoCancel3显示Yes、No和CancelvbYesNo4显示Yes和NovbTry

6、Cancel5显示Try和Cancel按钮表5-1MsgBox按钮的对应值内部常数内部常数按钮值按钮值描述描述vbCritical16关键信息图标,红色Stop图标vbQuestion32询问信息图标?vbExclamation48警告信息图标!vbInformation64信息图标i表5-2MsgBox图标的对应值表5-3MsgBox缺省按钮和模式的对应值表5-4 MsgBox返回值内部常数内部常数按钮值按钮值描述描述vbDefaultButton10第一个按钮缺省vbDefaultButton2256第二个按钮缺省vbDefaultButton3512第三个按钮缺省vbDefaultBut

7、ton4768第四个按钮缺省vbApplicationModal0程序强制返回vbSystemModal4096系统强制返回内部常数内部常数vbOkvbOkvbCancelvbCancelvbAboutvbAboutvbRetryvbRetryvbIgnorevbIgnore vbYesvbYesvbNovbNo返回值1234567被按下的按钮Ok(确定)Cancel(取消)Abort(中止)Retry(重试)Ignore(忽略)Yes(是)No(否)5.2 5.2 选择结构选择结构1IfThen语句(单分支结构) 形式1: If Then 语句块 End If 形式2: If Then 5.

8、2.1 if5.2.1 if语句语句表达式一般是关系表达式、逻辑表达式,表达式值为True(真)或False(假);也可以是算数表达式,表达式值非零时为True(真),零为False(假)。当表达式的值为True时,执行语句块中的程序,否则跳过语句块,执行If结构后面的语句(流程图如5-4所示);语句块可以是一条语句也可以是多条语句;当采用形式2时,所有的语句均应写在同一行;语句间用冒号隔开。例如:已知两个数x和y,比较它们的大小并做相应处理,使得x大于y,可以采用如下的程序代码:If x y Then t = x: x = y: y = tEnd If也可以写成如下的单行形式: If x y

9、 Then t = x: x = y: y = t2. IfThenElse语句(双分支结构) 形式1: If Then Else End If 形式2: If Then Else 这种结构是典型的选择结构,当表达式为True时执行语句块1,为False时执行语句块2。流程图如图5-5所示。5.2.1 if5.2.1 if语句语句例如:输出x,y两个中值较大的一个值,可以采用如下的程序代码:If x y Then Print xElse Print yEnd If也可以写成如下的单行形式: If x y Then Print x Else Print y3. IfThenElseIf语句(多分

10、支结构)形式: If Then ElseIf Then Else End If该结构的流程图如图5-6所示。5.2.1 if5.2.1 if语句语句【例【例5-1】输入学生成绩,根据分数评定其等级。方法是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以为“不合格”,界面如图5-7所示。Private Sub Command1_Click() Dim score As Integer score = Val(Text1.Text) If score = 90 Then Text2.Text = 优秀 ElseIf score = 80 Then

11、 Text2.Text = 良好 ElseIf score = 70 Then Text2.Text = 中等 ElseIf score = 60 Then Text2.Text = 及格 Else Text2.Text = 不及格 End IfEnd SubPrivate Sub Command2_Click() Text1.Text = End SubPrivate Sub Command3_Click() EndEnd Sub格式:Select Case 测试表达式Case 表达式列表1语句块1Case 表达式列表2语句块2 Case Else语句块n+1End Select功能:根据“

12、测试表达式”的值,从多个语句块中选择一个符合条件的去执行。具体的执行方式为:先求测试表达式的值,然后逐个检查每个Case语句的测试项,如果测试表达式的值满足Case后面的某个测试项,则系统将执行该Case语句后面的语句块;若没有满足条件的测试项,则执行Case Else下的语句块。5.2.2 Select Case5.2.2 Select Case语句(情况语句)语句(情况语句)“测试表达式”应与“表达式列表1”、“表达式列表2”等测试项同类型,可为数值或字符串表达式;表达式列表一般有以下几种类型: 1)表达式 Case A +52)一组枚举表达式(用逗号分隔) Case 2, 4, 6, 8

13、 3)表达式1 To 表达式2 Case 60 To 1004)Is 关系运算符表达式 Case Is 0, 2, 4, 6, 8如将例5-1 使用Select Case.语句来实现的程序段如下:Select Case score Case 90 To 100 Text2.Text = 优秀 Case 80 To 89 Text2.Text = 良好 Case 70 To 79 Text2.Text = 中等 Case 60 To 69 Text2.Text = 及格 Case Else Text2.Text = 不及格End Select【例【例5-2】将输入文本框中的所有小写字母转换成大写

14、字母,并将一些特殊符号变成等价的字符串,如DLR表示$、AT表示、0/0表示、BPT表示#、AND表示&等。可以在KeyPress事件中修改文本框内容,使它能在用户输入这些字符时进行相应修改。Private Sub Text1_KeyPress(KeyAscii As Integer) Dim spesymbols As String Dim ch As String spesymbols = $#%& ch = Chr(KeyAscii) If InStr(spesymbols, ch) Then KeyAscii = 0 Else KeyAscii = Asc(UCase(

15、ch) Exit Sub End If Select Case ch Case $: Text1.Text = Text1.Text & DLR Case #: Text1.Text = Text1.Text & BPT Case %: Text1.Text = Text1.Text & 0/0 Case &: Text1.Text = Text1.Text & AND Case : Text1.Text = Text1.Text & AT End Select Text1.SelStart = Len(Text1.Text) End Sub5.

16、3 5.3 循环结构循环结构5.3.1 DoLoop5.3.1 DoLoop循环语句循环语句 当当型型循循环环Do While 语句块语句块 Exit Do 语句块语句块LoopDo 语句块语句块 Exit Do 语句块语句块Loop While 【例【例5-3】用欧几里得算法求解两个数的最大公约数,程序界面如图5-9所示Private Sub Command1_Click () Dim n As Long, m As Long, r As Long n = Int(Val(Text1.Text) m = Int(Val(Text2.Text) If (m 1 or n 1) Then Tex

17、t3.Text = 请输入合法数据 Else Do r = m Mod n m = n n = r Loop While (r 0) Text3.Text = CStr(m) End IfEnd Sub Private Sub Command2_Click() Text1.Text = Text2.Text = Text3.Text = End Sub Private Sub Command3_Click() EndEnd Sub5.3.1 DoLoop5.3.1 DoLoop循环语句循环语句 直直到到型型循循环环Do Until 语句块语句块 Exit Do 语句块语句块LoopDo 语句块

18、语句块 Exit Do 语句块语句块Loop Until 对于例5-3采用直到型循环可改写为:Do r = m Mod n m = n n = r Loop Until r =0 格式: While Wend 说明:该语句的功能与Do While .Loop实现的循环完全类似,当条件为“真”时,执行循环体,直到条件为“假”为止。5.3.2 WhileWend5.3.2 WhileWend循环结构循环结构For 循环变量 初值 To 终值 Step 步长 语句块Exit For 语句块Next 循环变量其中:循环变量必须为数值型变量,不能是布尔类型变量或数组元素;步长是每次循环变量的增量,步长0

19、时,终值应大于等于初值,否则循环不执行;步长为1时,可省略;步长0时,终值应小于等于初值,否则循环不执行;当步长=0时,若循环体内没有改变循环变量的语句,则死循环;初值、终值及步长必须为数值表达式;5.3.3. For Next5.3.3. For Next循环语句循环语句For.Next循环结构的执行过程如下:首先计算初值、终值和步长;将初值赋给循环变量;进行判别:判断循环变量的值是否超过终值,如果未超过,执行循环体内的语句;否则,退出整个循环体,执行Next语句下面的语句。执行循环体后,循环变量增加一个步长,而后返回步骤(3);若循环体内没有改变循环变量的值,则可根据初值、终值及步长推算出

20、循环次数:(1)Int终值 初值步长【例题【例题5-4】求n的阶乘,要求在文本框中输入数据,随后在窗体中显示该数的阶乘值。如图5-12所示。Private Sub Command1_Click() Dim N As Integer, i As Integer, Result As Long Result = 1 累乘前Result的初始值为1 N = CInt(Text1.Text) If N Sqr(i) Then Print Str(i); End If Next iEnd Sub5.4 5.4 综合应用综合应用【例【例5-6】求解一元二次方程的】求解一元二次方程的ax2+bx+c=0的根

21、。的根。在求解构成中需要考虑以下几种情况:在求解构成中需要考虑以下几种情况:a=0,表达式不是一元二次方程,解为,表达式不是一元二次方程,解为-b/c;b2-4ac=0,有两个相同的实数根;,有两个相同的实数根;b2-4ac0,有两个不同的实数根;,有两个不同的实数根;b2-4ac 0 Then Label4.Caption = 该方程有两个不同的实数根,解分别为: & vbCrLf X1 = (-b + Sqr(p) / (2 * a) X2 = (-b - Sqr(p) / (2 * a) Label4.Caption = Label4.Caption & Str(X1)

22、& 和 & Str(X2) ElseIf p 0 Then Label4.Caption = 该方程有两个不同的复数根 End If End IfEnd Sub 参考代码【例【例5-7】求解Fibonacci数列的前20项。Private Sub Command1_Click() Dim i As IntegerDim f1 As Long, f2 As Long Text1.Text = f1 = 1 f2 = 1 For i = 1 To 10 Text1.Text = Text1.Text & Str(f1) & Str(f2) If (i Mod 2 =

23、 0) Then Text1.Text = Text1.Text & Chr(13) & Chr(10) End If f1 = f1 + f2 f2 = f1 + f2 Next iEnd Sub【例【例5-8】 编写程序,求出1000以内所有的“完数”。如果一个正整数恰好等于它的因子之和,这个数就为“完数”。如,6的因子为1、2、3,而6=1+2+3,因此6是完数。要求按格式6=1+2+3格式输出每个完数。Private Sub Command1_Click() Dim i As Integer, j As Integer Dim sum As Integer, s As String Text1.Text = For i = 1 To 1000 sum = 0 s = i & = For j = 1 To i - 1 If i Mod j = 0 Then sum = sum + j s = s & j & + End If Next If i = sum Then Text1.Text = Text1.Text & Left(s, Len(s) - 1) & vbCrLf End If NextEnd Sub【例【例5-9】 用级数法求cos(x)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论