Presentation is loading. Please wait.

Presentation is loading. Please wait.

选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。

Similar presentations


Presentation on theme: "选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。"— Presentation transcript:

1 选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。
在一个过程中,程序通常是按照由上而下的顺序来执行各个语句的,直到整个过程结束。引入选择结构和循环结构,可以改变程序执行的流程。

2 本章主要内容 选择程序结构用于判断给定的条件,根据判断的结果来控制程序的流程 条件表达式 关系表达式 / 逻辑表达式
条件表达式 关系表达式 / 逻辑表达式 条件语句 If...Then / If...Then...Else 条件语句的嵌套 多分支语句 select case 选择性控件 单选按钮 / 复选框 列表框/组合框 计时器控件 程序举例

3 关系运算符 符号: <小于 >大于 >=大于或等于 <=小于或等于 =等于 < > 不等于
符号: <小于  >大于  >=大于或等于       <=小于或等于  =等于   < > 不等于   适用的类型和结果类型:  关系运算符适用于数值型、字符型、日期型和逻辑型 数据,结果只能为逻辑型(真值True和假值False)  运算符两侧必须是同类型的量或表达式 若不是,系统会自动进行强制类型转换 “5”> >(1>0) 若判断的结论是成立,则结果为逻辑真值(True), 否则为逻辑假值(False) True的值等于-1,False的值等于0

4 关系运算符 运算符 名 称 示 例 说 明 < 小于 “3”<4 值为:True,强制转换为数值型 <= 小于或等于
名 称 示 例 说 明 < 小于 “3”<4 值为:True,强制转换为数值型 <= 小于或等于 3<=4 值为:True > 大于 0>(1>0) >= 大于或等于 “aa”>=“ab” 值为:False = 等于 1=True 值为:False,强制转换为数值型 <> 不等于 1<>1

5 关系表达式 运算次序:先分别求出运算符两侧表达式的值, 然后再将二者进行比较 其中:数值型数据按照数值大小比较
关系表达式的格式: <表达式1> <关系运算符> <表达式2> [<关系运算符> <表达式3>…] 运算次序:先分别求出运算符两侧表达式的值,       然后再将二者进行比较 其中:数值型数据按照数值大小比较 2+3> >= <>2^3    字符型数据按照字符的ASCII码值大小比较 “1”>“2” “a”<“b” “A”> “a”    日期型数据按照前后顺序比较 #01/01/2003#> # 12/31/2002#   

6 关系表达式练习 ①False ②False ③True ④ True ① ?2/3>3/4 ② ?“a”> “b” ⑤True
数值型数据按照数值大小比较 字符型数据按照字符的ASCII码值大小比较 日期型数据按照前后顺序比较    ①False ②False ③True ④ True ⑤True ⑥ False ⑦True ⑧False ⑨False ① ?2/3>3/4 ② ?“a”> “b” ③ ?3<=5 ④?True=-1 ⑤ ?#01/12/91#<=#02/01/91# ? “abc”<= “abb” ? “ab”<= “我们” ?“123”>“99” ?“你们”>“我们”

7 布尔运算符 只适用于逻辑型数据,运算结果是逻辑值 非运算的规则是:直接求反即可 与运算的规则是:只有二者全为真时结果为真,否则为假
符号: NOT  (逻辑非) AND  (逻辑与) 即:并且,要同时成立 OR   (逻辑或) 即:或者,只要有一个成立 适用的类型和结果类型: 只适用于逻辑型数据,运算结果是逻辑值 规则: 非运算的规则是:直接求反即可 与运算的规则是:只有二者全为真时结果为真,否则为假 或运算的规则是:只有二者全为假时结果为假,否则为真 逻辑值A 逻辑值B NOT A A AND B A OR B T F

8 布尔表达式练习 ?“a”>“b” AND 1>2 False ?“a”>“b” OR 1<2 True
?NOT 2*5<>11 ?2^3>3 AND 5>10 表示一个数是偶数 x Mod 2=0 或 int(x/2)=x/2 表示一个数X能被3或5或7整除  x Mod 3=0 OR x Mod 5=0 OR x Mod 7=0 表示身高不在1.65米以上或不是女生  身高<1.65 OR 性别<>“女”  NOT(身高>=1.65 AND 性别=“女”)

9 布尔表达式练习 ?-3<-2<-1 False a=3:b=4:c=5 ?a=b=c 表示一个数x是能被3整除的奇数
 x Mod 3=0 and x Mod 2< >0 x Mod 2=1 and x Mod 2< >0 表示一个数x∈[2,5] x>=2 and x<=5 表示一个数x不在[2,5]区间内  x<2 or x>5

10 运算符的优先顺序 算术运算符 字符串运算符:& 关系运算符:=、<>、<、>、<=、>= 布尔运算符:Not And Or
优 先 级 依 次 降 低

11 运算符的优先顺序练习 设变量x=4,y=-1,a=7.5,b=-6.2,求表达式 x+y>a+b And Not y<b的值
True y表示年号,用一个表达式表示该年是否是闰年 (y Mod 4=0 AND y Mod 100<>0 ) OR (y Mod 400=0 AND y Mod 100=0 ) (y Mod 4=0 AND y Mod 100<>0 ) OR y Mod 400=0

12 判断闰年的科学依据 地球公转一周的时间为:365天5小时48分56秒 每经过4年,剩余的时间为:5小时48分56秒×4=23小时15分44秒
则每4年都要多加24小时- 23小时15分44秒=44分16秒 每经过100年,就会多加44分16秒×25=18小时26分40秒 比较接近一天,所以每到100年,就将这多加的近似一天的时间减去, 即停止追加一天 而实际上又少加了24小时- 18小时26分40秒=5小时33分20秒 每经过400年,就会少加4 × 5小时33分20秒≈24小时 所以每过400年,就应该再补加一天 故:每4年闰年出现一次;每400年,闰年再出现一次    其它的整100年,闰年停止出现一次

13 选择控制结构 选择控制结构又称分支结构 它体现了程序运行过程中的自我判断能力
程序可以根据当前执行的某个条件,进行比较、判断,并依据判断的结果(成立与否)来决定下一步做什么,不做什么(在两条或多条程序路径中选择一条来执行,即只执行程序中的一部分语句) 可见,在此结构的程序运行过程中,有些语句会执行一次,有些语句在此次程序运行过程中没有机会执行。即:“无论分支多寡,必选其一;纵然分支众多,仅选其一” VB中的选择语句有:   双分支语句   多分支语句(Select Case) 单行(IF-THEN-ELSE) 块结构(IF-THEN-ELSE-END IF)

14 问题:如果不是正数,应该显示“不是正数”
选择结构(IF-THEN) 语句格式: IF <条件> THEN <语句序列> 执行过程: 判断给定的条件 如果成立(其值为True),执行所给语句序列,然后执行下一条语句 否则(其值为False),跳过所给语句序列,直接执行下一条语句 示例: 输入一个数,如果是正数,就输出 x=Val(Text1.text) If x>0 Then Label1.Caption=x 条件 N Y 语句序列 下一语句 问题:如果不是正数,应该显示“不是正数”

15 选择结构(IF-THEN-ELSE) 语句格式:
执行过程: 判断给定的条件 如果成立(其值为True),执行所给语句序列1,然后执行下一条语句 否则(其值为False),执行所给语句序列2,然后执行下一条语句 条件 Y N 命令序列1 命令序列2 下一语句

16 (IF-THEN-ELSE)举例 例一:输入一个数,如果是正数,就输出;否则显示非正数 例二:根据用户输入的一个成绩,判断是否及格
Dim x As Single x=Val(Text1.text) If x>0 Then Label1.Caption=x Else Label1.Caption= “非正数" 例二:根据用户输入的一个成绩,判断是否及格 Dim x As Single X=Val(InputBox("请输入一个成绩:","输入",0)) IF X>=60 THEN Label1.Caption=“及格” Else Label1.Caption=“不及格” 使用IIF函数,也可以实现相应的判断 格式:IIF(条件,条件为真时的值,条件为假时的值)  

17 IIF函数的使用 Label1.Caption=IIf(x>0,x,“非正数”)
Dim x As Single x=Val(Text1.text) If x>0 Then Label1.Caption=x Else Label1.Caption= “非正数” Label1.Caption=IIf(x>0,x,“非正数”) X=Val(InputBox("请输入一个成绩:","输入",0)) IF X>=60 THEN Label1.Caption=“及格” Else Label1.Caption=“不及格” Label1.Caption=IIf(x>=60,“及格”,“不及格”)

18 块结构(IF-THEN-ELSE-END IF)
语句格式: IF <条件> THEN  [<语句列1>] [ELSE <语句列2>] END IF 条件 Y N 命令序列1 命令序列2 执行过程: 判断给定的条件 如果成立(其值为True),执行所给y语句序列1,然后执行下一条语句 否则(其值为False),执行所给语句序列2,然后执行下一条语句 下一语句

19 (IF-THEN-ELSE-END IF)举例
示例:根据用户输入的一个成绩,判断是否及格 Dim x As Single x=Val(InputBox("请输入一个成绩:", "输入", 0)) If x >= 60 Then Label1.Caption = "及格" Else Label1.Caption = "不及格" End If

20 (IF-THEN-ELSE-END IF)举例
示例:输入ABC的值,判断能否构成三角形,如果能,计算三角形的面积 Dim a As Single, b As Single, c As Single a=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text) s=(a + b + c) / 2 If a+b>c And c>0 And a+c>b And b>0 And b+c>a And a>0 Then area = Sqr(s * (s - a) * (s - b) * (s - c)) Label1.Caption="能构成三角形,"&"三角形面积为:"&Str(area) Else Label1.Caption="不能构成三角形" End If

21 IF语句的嵌套 语句格式: 说明: IF <条件1> THEN [<语句列1>] ELSE
 [<语句列1>] ELSE IF <条件2> THEN   [<语句列2>] [<语句列3>] END IF Y N Y N 条件2 语句列1 语句列2 语句列3 说明: 如果在If语句的语句列1或语句列2中又有一个完整的If语句,则称为If语句的嵌套 下一语句

22 嵌套IF举例 用户输入一个数,如果是正数,打印是个正数; 如果是0,打印是个零;如果是负数,打印是负数 Dim x As Single
x = Val(Text1.Text) If x > 0 Then Label1.Caption = "正数" Else If x = 0 Then Label1.Caption = “零” Label1.Caption = "负数" End If Y X>0 N X=0 N Y 是个正数 是零 是个负数 下一语句

23 嵌套IF举例 用户输入一元二次方程的系数,用户判断解的情况
a=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text) d=b^2-4*a*c If d > 0 Then Label1.Caption = “不同实根 " Else If d = 0 Then Label1.Caption = “相同实根 " Label1.Caption = "没有实数解" End If Y △>0 N △=0 N Y 有两个不相同的实根 有两个相同的实根 没有实数解 下一语句

24 Dim x As Single x = Val(Text1.Text) If x > 100 Then Label1.Caption = "输入有误!" Else If x >= 90 Then Label1.Caption = "优秀!" If x >= 80 Then Label1.Caption = "良好!" If x >= 70 Then Label1.Caption = "一般!" If x >= 60 Then Label1.Caption = "及格!" If x >= 0 Then Label1.Caption = "不及格!" End If 嵌套IF举例 用户输入一个成绩, 若在90到100之间,打印优秀;若在80到89之间,打印良好;若在70到79之间,打印一般;若在60到69之间,打印及格;若在60以下,打印不及格; 其它情况,打印输入有误

25 IF语句的嵌套格式ELSEIF 语句格式: 说明: IF <条件1> THEN [<语句列1>]
 [<语句列1>] ELSEIF <条件2> THEN <语句列2>] …… [ELSE [其他语句列]] END IF 条件1 条件n 语句列1 语句列n 其他语句列 下一语句 Y N 说明:

26 嵌套ELSEIF举例 用户输入一个数,如果是正数,打印是个正数; 如果是0,打印是个零;如果是负数,打印是负数
Dim x As Single x = Val(Text1.Text) If x > 0 Then Label1.Caption = "正数" Else If x = 0 Then Label1.Caption = "零" Label1.Caption = "负数" End If Dim x As Single x = Val(Text1.Text) If x > 0 Then Label1.Caption = "正数" ElseIf x = 0 Then Label1.Caption = "零" Else Label1.Caption = "负数" End If

27 嵌套ELSEIF举例 Dim x As Single x = Val(Text1.Text) If x > 100 Then
Label1.Caption = "输入有误!" ElseIf x >= 90 Then Label1.Caption = "优秀!" ElseIf x >= 80 Then Label1.Caption = "良好!" ElseIf x >= 70 Then Label1.Caption = "一般!" ElseIf x >= 60 Then Label1.Caption = "及格!" ElseIf x >= 0 Then Label1.Caption = "不及格!" Else End If 用户输入一个成绩, 若在90到100之间,打印优秀;若在80到89之间,打印良好;若在70到79之间,打印一般;若在60到69之间,打印及格;若在60以下,打印不及格;其它情况,打印输入有误

28 多分支语句  当判断条件较多时,如果采用IF语句来设计程序,会出现各方面的麻烦;而多分支语句可以利用格式中的多个条件来判断与执行,效率较高 条件1 条件n 语句列1 语句列n 其他语句列 下一语句 Y N 语句格式: SELECT CASE <测试条件> [CASE <表达式1>   [<语句列1>]] [CASE <表达式2>   [<语句列2>]] [CASE ElSE [<其他语句列>]] END SELECT 说明:  P83

29 多分支语句举例 Dim x As Single Dim x As Single x = Val(Text1.Text)
用户输入一个数,如果是正数,打印是个正数;如果是0,打印是个零;如果是负数,打印是负数 Dim x As Single x = Val(Text1.Text) Select Case x Case Is > 0 Label1.Caption = "正数" Case Is = ’Case 0 Label1.Caption = "零" Case Is < 0 Label1.Caption = "负数" End Select Dim x As Single x = Val(Text1.Text) If x > 0 Then Label1.Caption = "正数" Else If x = 0 Then Label1.Caption = "零" Label1.Caption = "负数" End If

30 多分支语句举例 Select Case x Case Is < 0 Label1.Caption = "输入有误"
Case Else Label1.Caption = "不及格" End Select 多分支语句举例 用户输入一个成绩, 若在90到100之间,打印优秀;若在80到89之间,打印良好;若在70到79之间,打印一般;若在60到69之间,打印及格;若在60以下,打印不及格;其它情况,打印输入有误

31 多分支语句举例 Dim d As Integer y = Val(Text1.Text): m = Val(Text2.Text)
Select Case m Case 1, 3, 5, 7, 8, 10, 12 d = 31 Case 4, 6, 9, 11 d = 30 Case 2 If y Mod 4 = 0 And y Mod 100 <> 0 Or y Mod 400 = 0 Then d = 29 Else d = 28 End If End Select P=Str(y) & "年" & Str(m) & "月有" & Str(d) & "天!" Label1.Caption =p 用户输入一个年份和月份, 由程序输入该年该月有多少天!

32 滚动条 有些控件不能自动支持滚动的功能,VB提供的滚动条有水平滚动条(HScrollBar)和垂直滚动条(VScrollBar)两种
常用属性有(均为整型数): Value 滚动条的当前值,即滑块的位置 LargeChange 单击滚动条的前后部位时,Value的改变量 SmallChange 单击滚动条的两端箭头时,Value的改变量 Max Value的最大值 Min Value的最小值 常用事件: Scroll 当拖动滚动条滑块时触发的事件 Change 当滚动条滑块位置改变时触发的事件

33 滚动条程序示例 Private Sub HScroll1_Scroll( ) Text1.FontSize = HScroll1.Value
End Sub 若改为滚动条的Change事件,效果会有什么变化?

34 使用计时器控件 计时器(Timer)控件可以在程序运行中以规定的时间间隔产生一个事件。这对不需要与用户交互的代码的执行非常有用。
计时器在设计时显示为一个小时钟图标,而在运行时则看不到,常用来做一些后台处理。 如果需要显示时间,则应当使用标签或文本框

35 计时器控件的常用属性 Interval属性是决定Timer控件的计时事件调用间隔的毫秒数 格式:[对象.]Interval [=毫秒数]
Enabled属性(True/False)决定Interval的设置是否有效 只要Timer控件的Enabled属性被设置为True,而且Interval属性>0,则以Interval属性指定的时间间隔发生一次Timer事件

36 设计一个闪烁字幕 每隔0.5秒闪烁一次,程序运行前,Timer的Enabled和Interval属性的值应为多少?
Private Sub Form_Load() FontName = "幼圆" FontBold = True FontSize = 100 End Sub Private Sub Timer1_Timer() Form1.ForeColor = RGB(Int(Rnd * 256), Int(Rnd * 256), Int(Rnd * 256)) Form1.CurrentX = Form1.Width / ’输出的水平坐标 Form1.CurrentY = Form1.Height / ’输出的垂直坐标 Print "闪烁字幕"

37 设计一个计时器 每隔一秒钟,文本框中的数字增一,单击“暂停”按钮就停止 Private Sub Command1_Click()
Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False Private Sub Timer1_Timer() Text1.Text = Text1.Text + 1 程序运行前,Timer的Enabled和Interval属性的值应为多少?

38 框架控件Frame 框架控件是一个左上方有标题文字的方框。它是一个容器控件。可以对窗体上的控件进行视觉上的分组。
在框架内可以直接绘制控件,也可以将已有控件粘贴到框架内 框架可以提供总体的激活和屏蔽 常用属性有: Name 框架的名称 Caption 框架上显示的标题文字 Visual 运行后是否可见 Enabled 框架和框架内的所有控件是否屏蔽

39 提供简单选择的控件 选项按钮(Option Button)又称单选按钮,选项按钮总是作为一个组的组成部分工作的。
选项按钮组是一组互排斥的选项按钮;选择一个选项按钮会立即清除该组中的其它按钮;每次只能选一个选项而且必须选择一个选项(问题:在窗体上的是一组?在一个框架内的是一组?) 常用属性: Caption属性: 单选按钮旁边的标题文字 value属性:表示该按钮是否被选中。选中为True,否则为False Alignment属性:单选按钮标题 的对齐方式 Style属性:表示控件的外观(标准格式或图形方式) 可以将选项按钮设计成图形按钮的形式,将Style改为1-Graphical(图形方式),再依次修改其Caption属性 单选按钮使用最多的是click事件

40 单选按钮程序示例 Private Sub Option1_Click() Text1.FontName = "宋体" End Sub
Text1.FontName = "楷体_GB2312"

41 提供简单选择的控件 复选框(CheckBox)控件:根据需要进行多项选择 可以只选一个,也可全选,还可全不选
当某一个复选框被选中时,复选框中出现一个“√” 常用属性: Caption属性:复选框旁边的标题文字 value属性:表示该按钮是否被选中。 0-默认设置,未选中状态 1-选中状态 2-禁止状态,不可用 Alignment属性:复选框旁边的标题文字的对齐方式 Style属性:表示控件的外观(标准格式或图形方式) 复选框按钮使用最多的是click事件,在事件中需要对其Value属性值做判断,从而根据用户的选中状态决定程序如何执行

42 复选按钮程序示例 Private Sub Check3_Click() Private Sub Check1_Click()
If Check3.Value = 1 Then Text1.FontSize = 25 Else Text1.FontSize = 9 End If End Sub Private Sub Check4_Click() If Check4.Value = 1 Then Text1.ForeColor = RGB(255, 0, 0) Text1.ForeColor = RGB(0, 0, 0) Private Sub Check1_Click() If Check1.Value = 1 Then '判复选框1是否选中 Text1.FontName = "楷体_GB2312" Else Text1.FontName = "宋体" End If End Sub Private Sub Check2_Click() If Check2.Value = 1 Then '判复选框2是否选中 Text1.FontItalic = True Text1.FontItalic = False


Download ppt "选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。"

Similar presentations


Ads by Google