第五章vb循环结构程序设计.ppt_第1页
第五章vb循环结构程序设计.ppt_第2页
第五章vb循环结构程序设计.ppt_第3页
第五章vb循环结构程序设计.ppt_第4页
第五章vb循环结构程序设计.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、1,三种基本结构:顺序 选择 循环,任何程序都可以用三种基本结构表示,优点:结构清晰,易读,较高的质量和效率,2,三种基本结构 顺序结构,结构化程序设计,传统流程图:,N-S流程图:,A执行完再执行B,3,选择结构,传统流程图:,N-S流程图:,4,循环结构 当型循环结构,传统流程图:,N-S流程图:,5,第5章,选择结构程序设计,本章要点: 条件语句 单行结构条件语句If.Then.Else 块结构条件语句If.Then.EndIf 多分支选择语句Select Case.End Select,特点: 根据条件是否成立,决定程序的执行分支,6,(2) 选择结构,传统流程图:,N-S流程图:,当

2、条件为真时执行A;否则,执行B,出口:后继语句,7,5.1 单行结构条件语句:适用于简单结构,1. 格式 If Then Else 2. 功能 如果成立,则执行 否则执行,即:表达式,NS图,流程图,8,If Then Else ,3. 说明 (1) : 关系表达式、布尔表达式(False, True) 数值表达式(0为False,非0为True) 字符串表达式(0为False,非0为True) (2) 、: 可以有多条语句,各语句之间用:隔开。 (3)可以没有Else部分(为非对称情形) ,这时必须有,9,例a: If N0 Then A=A+B:B=B+A Else A=A-B:B=B-A

3、 例b: If Xaaa Then Print X 省略语句组2,10,【例5-1】设界面如下图所示,用文本框输入x的值,单击“计算Y”按钮时,根据以下公式计算y的值。,Private Sub Command1_Click() X = Val(Text1.Text) If X = 0 Then Y = Abs(X) Else Y = Log(X) Label3.Caption = Y End Sub,共同出口,11,4. 注意 (1) 行If应作为一条语句书写.如果语句太长需要换行,必须在折行处使用续行符号。 (2) 无论条件是否成立,都具有共同出口,X = Val(Text1.Text) Y

4、 = Abs(X) If X 0 Then Y = Log(X) Label3.Caption = Y共同出口,X = Val(Text1.Text) Y = Log(X) If X = 0 ThenY = Abs(X) Label3.Caption = Y,例: 改写例5-1,比较:,会导致运行错误,12,【例5-2】平面直角坐标系中,不同的象限内,点的坐标的符号有以下4种情况:,在A ()象限 X0,Y0 B (): X0 C (): X0,Y0,任意输入一对坐标值,找出它所在的象限。写出各象限的VB的布尔表达式。画框图表示。,13,在A ()象限 X0,Y0 B () X0 C () X

5、0,Y0,X0,X0,Y0,Y0,14,一种写法:使用布尔表达式 Private Sub Command1_Click() X = Val(Text1.Text): Y = Val(Text2.Text) If X = 0 Or Y = 0 Then Print 不在任何象限内: _ Exit Sub End Sub,If X 0 And Y 0 Then Print IN A If X 0 And Y 0 Then Print IN B If X 0 And Y 0 Then Print IN C ,15,5.嵌套(单行结构条件语句) If语句的嵌套是指Then或Else后面的语句块中又包含

6、If语句 IF . THEN. IF . THEN .ELSE . ELSE IF . THEN .ELSE . 【例5-2】平面直角坐标系中,不同的象限内,点的坐标的符号有以下4种情况:,在A ()象限 X0,Y0 B () X0 C () X0,Y0,任意输入一对坐标值,找出它所在的象限。画框图表示。,16,在A ()象限 X0,Y0 B () X0 C () X0,Y0,X0,X0,Y0,Y0,17,If X 0 Then If Y 0 Then Print IN A Else _ x0 y 0 Then Print IN B _ x0 Else Print IN C x0 y0 End

7、 Sub,Then嵌套,Else嵌套,行if语句嵌套,Private Sub Command1_Click() X = Val(Text1.Text): Y = Val(Text2.Text) If X = 0 Or Y = 0 Then Print 不在任何象限内: _ Exit Sub,18,格式1: If Then Else End If,5.2 块结构条件语句 If.ThenElse End If,格式2: (非对称) If Then End If,适用于较复杂的结构,19,闰年:若年份y能被4整除但不能被100整除 或年份y能被400整除,则为闰年,课堂练习1:判断用户从输入框输入的

8、年份是否 为闰年,Private Sub Command1_Click y = InputBox (“请输入年份”) End sub,y Mod 4=0 And y Mod 1000 Or y Mod 400=0,If y Mod 4=0 And y Mod 1000 Or y Mod 400=0 Then Print y Y,X = Val(Text1.Text) Select Case X Case X 0 Y = Log(X) / Log(10) End Select Print Y=; Y,【例5-5】求函数Y的值,问题?,Case 不是常量表达式!,32,说明: Case语句可以用I

9、f语句代替。 区别: Select Case语句只对单表达式求值并根据求 值结果执行不同的语句块; 块结构的条件语句可以对不同的表达式求值 并判断;,注意:如果同一域值的范围在多个Case子句中出现,则只执行符合要求的第一个Case子句语句块,这时Case子句的顺序对执行结果有影响。编程时,一般使各个Case子句 “互斥”,即只有一个子句满足要求。见【例5-5】,33,例:将例 5. 4 使用select case.语句来实现的程序段如下: Select Case mark Case 90 to 100 Print 优秀 Case 80 to 89 Print 良好 Case 70 to 79

10、 Print 中等 Case 60 to 69 Print 及格 Case Else Print 不及格 End Select,各个Case子句 “互斥”,只有一个子句满足要求,34,例:使用select case.语句的另一种方案,Dim mark As Integer未考虑mark非整数和四舍五入的情形 Select Case int( mark /10) Case 9 To 10 Print 优秀 Case 8 Print 良好 Case 7 Print 中等 Case 6 Print 及格 Case Else Print 不及格 End Select,或:考虑mark非整数和四舍五入的

11、情形 Dim mark As Singe Select Case int( (mark+0.5 )/10) . 可保证 89.5 = mark 90 时 输出 优秀,35, Select Case mark Case Is 100 cls MsgBox “输入的分数超出范围0,100! 请重新输入!” Case Is = 90 ,Case Else Fom1.ForeColor = vbRed Print 不及格 End Select Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub,输入错误

12、判断:数据的安全检查机制!提高程序的健壮性!,在文本框接收数据,36,例: 输入百分制成绩mark,显示对应的五级制成绩,问题:哪些能实现,哪些不能实现?,问题?,Case中不能出现变量及有关运算符,推荐,37,如果在条件成立或不成立的情况下要继续判断其他条件,则可以使用嵌套的条件语句来实现,也就是在语句组中再使用另一个条件语句。,5.4 条件语句的嵌套,块结构条件语句的嵌套示例: If A = 1 Then If B = 0 Then Print *0* ElseIf B = 1 Then Print *1* End If ElseIf A = 2 Then Print *2* End If

13、,If A = 1 Then If B = 0 Then Print *0* ElseIf B = 1 Then Print *1* End If Else If A = 2 Then Print *2* End If End If,等价,38,多分支选择语句的嵌套示例: Select Case A Case 1 Select Case B Case 0 Print *0* Case 1 Print *1* End Select Case 2 Print *2* End Select,39,多分支选择语句与块结构条件语句的互相嵌套示例: Select Case A Case 1 If B =

14、0 Then Print *0* ElseIf B = 1 Then Print *1* End If Case 2 Print *2* End Select,40,选择结构的嵌套 下面是两种正确的嵌套形式(1) IF Then . IF Then Else . End If . Else . IF Then . Else . End If . End IF,(2) IF Then . Select Case Case IF Then Else . End If Case. . End Select . End IF,If语句的嵌套注意事项:书写锯齿型; IF与End IF 配对; Else

15、与IF 配对。,41,注意:只要在一个分支内嵌套,不出现交叉,满足结构规则,其嵌套的形式将有很多种,嵌套层次也可以很多。对于多层IF嵌套结构中,要特别注意IF与Else的配对关系,一个Else必须与IF配对; If 与End If配对,配对的原则: IF . THEN .ELSE .END IF 在写含有多层嵌套的程序时,建议使用缩进对齐方式,这样容易阅读和维护。,42,【例5-8】变量strC中存放了一个字符,判断该字符类型。 用块结构条件语句实现: If Ucase(strC) =A And Ucase (strC) =0 And strC =9 Then Print strC + 是数字

16、字符 Else Print strC + 其他字符 End If,Select Case strC Case a To z,A To Z Print strC + 是字母字符 Case 0 To 9 Print strC + 是数字字符 Case Else Print strC + 其他字符 End Select,用Select Case语句实现:,5.6 应用举例,43,变量的作用域(变量的有效范围): 局部变量 在过程内用Dim语句、Static语句声明的变量,或不声明直接引用的变量 作用范围:仅在声明的过程中起作用.,变量的作用域与生存期,变量: 局部变量;卡 模块级变量; ¥ 全局变量

17、; $,44,全局变量 在模块的通用声明段用Public语句声明的变量 作用范围:应用程序的所有过程,模块级变量 在窗体模块或通用模块的通用声明段用Dim语句、Private语句声明的变量 作用范围:仅在该模块的所有过程中起作用。,变量: 局部变量; 模块级变量; 全局变量;,$,¥,卡,模块运行时初始化变量,45,Private Sub Command1_Click() Dim X As Integer 局部变量 Static y As Integer 局部变量 x = 2 y = 1 + y Print x,y End Sub,例:,第一次单击Command1 2 1 第二次单击Comma

18、nd1 2 2 第三次单击Command1 2 3,变量的生存期(变量的作用时间): 动态变量:在所在的模块(过程)运行时被初始化 静态变量:在应用程序执行期间保留不变,46,变量的生存期(变量的作用时间): 动态变量:在所在的模块(过程)运行时被初始化 静态变量:在应用程序执行期间保留不变,例:,Private Sub form_Click() Dim z As Integer 局部变量 Static y As Integer 局部变量 x = 2 y = 1 + y Print x,y End Sub,第一次单击Command1 2 1 第二次单击Command1 2 2 第三次单击Com

19、mand1 2 3,47,5.6 应用举例,【例5-6】设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!,您已成功进入本系统”,否则,显示,“口令错!,请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后退出整个应用程序。,48,事件:当用户在文本框内输入的口令正确后.(Enter),Text1_KeyUp(KeyCode As Integer, ),If KeyCode = 13 Then,当口令正确时,显示“” 否则“口令错!重新输入” 新事件过程,输入完口令并,If UCase(Text1.Text)

20、 = “ Then ElseIf ,操作:,统计输入次数:定义整型静态变量I,Static I As Integer 保存输入错误口令的次数,【例5-6】(57) 分析,49,Private Sub Text1_KeyUp(KeyCode As Integer, _ Shift As Integer) Static I As Integer 保存输入错误口令的次数 If KeyCode = 13 Then 如果按下的键为回车键 If UCase(Text1.Text) = HELLO Then Label2.Caption = 恭喜!,您已成功进入本系统 ElseIf I = 0 Or I =

21、 1 Then 第1,2次出错还可重新输入 I=I + 1 Label2.Caption = 口令错!,请重新输入 Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) Else MsgBox 对不起,您不能使用本系统: End End If End If End Sub,50,【例5-7】求一元二次方程ax2+bx+c=0的解 。 (1) 如果a=0,且b=0,则方程无解,提示重新输入系数; 但如果b 0(a=0),则 x=-c/b ( 2) 如果a 0,b2-4ac=0 ,则有两个相等的实根 b2-4ac0,则有两个不等的实根 b2-4a

22、c0 ,则有两个共轭复根,51,Private Sub Command1_Click() A = Val(Text1.Text): B = Val(Text2.Text) C = Val(Text3.Text): Cls CurrentX = 600: CurrentY = 1100 If A = 0 Then If B = 0 Then MsgBox 系数为零,请重新输入 Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) Else b 0, a=0为一次方程 X = -C / B Print X=; For

23、mat(X, 0.000) End If Exit Sub A=0处理完后,退出本过程 End If,52,Delta = B 2 - 4 * A * C Select Case Delta Case 0 b2-4ac=0,则有两个相等的实根 Print X1=X2=; Format(-B / (2 * A), 0.000) Case Is 0 b2-4ac0,则有两个不等的实根 X1 = (-B + Sqr(Delta) / (2 * A) X2 = (-B - Sqr(Delta) / (2 * A) Print X1=; Format(X1, 0.000) CurrentX = 600:

24、 CurrentY = 1300 Print X2=; Format(X2, 0.000) Case Is 0 b2-4ac0 ,则有两个共轭复根 A1 = -B / (2 * A) A2 = Sqr(Abs(Delta) / (2 * A),53,Print X1=; Format(A1, 0.000); +; _ Format(A2, 0.000); i“ CurrentX = 600 CurrentY = 1300 Print X2=; Format(A1, 0.000); -; _ Format(A2, 0.000); i End Select End Sub,54,【例5-9】设计一

25、个四则运算的自我练习应用程序,界面如下图所示。(略),Label3,55,要求: (1) 执行时,当在Text1中输入一种运算符后,在标签Label2中立即出现该运算符号。 (2) 单击“出题”按钮可以产生两个0,1000之间的随机整数,这时由Text2、Label2和Text3组成一个表达式。 (3) 可以通过单击“计算”按钮计算所生成的表达式的值。 (4) 也可以由用户在文本框Text4中输入运算结果通过单击“判断”按钮可以判断输入的运算结果是否正确,然后在Label4上显示“正确”或“错误”。 (5) 单击“退出”按钮结束运行。,56,(1) 在Text1中输入加、减、乘、除符号后,在L

26、abel2中立即出现相应的运算符号。 Private Sub Text1_Change() Label2.Caption = Text1.Text End Sub (2) 单击“出题”按钮Command1,生成两个0,1000之间的随机整数。 Private Sub Command1_Click() Randomize Text2.Text = Int(Rnd * 1001) Text3.Text = Int(Rnd * 1001) Text4.Text= End Sub,57,(3) 单击“计算”按钮Command2得出Text4的值。 Private Sub Command2_Click(

27、) If Label2.Caption = + Then Text4.Text = Val(Text2.Text) + Val(Text3.Text) ElseIf Label2.Caption = - Then Text4.Text = Val(Text2.Text) - Val(Text3.Text) ElseIf Label2.Caption = * Then Text4.Text = Val(Text2.Text) * Val(Text3.Text) ElseIf Label2.Caption = / Then Text4.Text = Val(Text2.Text) / Val(Te

28、xt3.Text) Else a = MsgBox(运算类型错,请重输, , 警告) Text1.SetFocus: Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End If End Sub,58,(4) Text4的内容也可以由用户输入,通过单击“判断”按钮Command3判断输入结果是否正确。 Private Sub Command3_Click() Select Case Label2.Caption Case + If Text4.Text=Val(Text3.Text)+Val(Text2.Text) Then Label

29、4.Caption = 正确 Else Label4.Caption = 错误 End If,59,Case -“ If Text4.Text=Val(Text2.Text)-Val(Text3.Text) Then Label4.Caption = 正确 Else Label4.Caption = 错误 End If Case * If Text4.Text=Val(Text2.Text)*Val(Text3.Text) Then Label4.Caption = 正确 Else Label4.Caption = 错误 End If,60,Case / If Text4.Text=Val(Text2.Text)/Val(Text3.Text) Then Label4.Caption = 正确 Else Label4.Caption = 错误 End If Case Else

温馨提示

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

评论

0/150

提交评论