已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章选择结构程序设计 第4章选择结构程序设计 分支结构 选择结构是计算机科学用来描述自然界和社会生活中分支现象的重要手段 其特点是根据所给定的条件为真 即条件成立 与否 而决定从各实际可能的不同分支中执行某一分支的相应操作 并且任何情况下总有 无论分支多寡 必择其一 纵然分支众多 仅选其一 4 1选择结构程序设计的概念在VB中 实现选择结构的语句有 If Then Else If Then ElseIf SelectCase语句 这些语句又称为条件语句 条件语句的功能都是根据表达式的值有选择地执行一组语句 4 2条件表达式在条件语句中作为判断依据的表达式称为 条件表达式 条件表达式的取值为布尔值 真 True 或假 False 在VB中 True的值等于 1 False的值等于0 根据 条件 的简单或者复杂程度 条件表达式可以分为两类 关系表达式以及布尔表达式 4 2 1关系运算符与关系表达式关系表达式是指用关系运算符将两个表达式连接起来的式子 例如a b 0 关系运算符又称比较运算符 用来对两个表达式的值进行比较 比较的结果是一个布尔值 True或False 这个结果就是关系表达式的值 1 关系运算符VB提供的关系运算符有以下6种 见表4 1 表4 1关系运算符 2 关系表达式关系表达式的格式为 表达式1 关系运算符 表达式2 关系运算符 表达式3 关系表达式的运算次序为 先分别求出关系运算符两侧表达式的值 然后再把二者进行比较 二者的关系若与关系运算符指示的一样 则关系运算的结果为真True 否则为假False 4 2 2布尔运算符与布尔表达式对于较为复杂的条件 必须使用布尔表达式 布尔表达式是指用布尔运算符连接若干关系表达式或布尔值而成的式子 布尔表达式的值也是一个布尔值 VB提供的布尔运算符有 And Or Not Xor Eqv Imp等6种 其中常用的为前3种 见表4 2 表4 2布尔运算符说明 1 布尔运算符两侧若有数值数据出现 则将数值数据转换为二进制数 补码形式 进行按位运算 此时 1为真 0为假 2 布尔运算真值表见表4 3 表4 3布尔运算真值表abaAndbaOrbNotaTrueTrueTrueTrueFalseTrueFalseFalseTrueFalseFalseTrueFalseTrueTrueFalseFalseFalseFalseTrueNot由真变假 由假变真 And对两个布尔值进行比较 如果两个值均为真 则结果为真 否则为假 Or对两个布尔值进行比较 如果其中一个值为真 则结果为真 只有两个值都为假时 结果才为假 运算布尔表达式时 先运算关系表达式 再运算布尔表达式 逻辑运算的运算规则 按二进制进行的逻辑运算规则 Print12and8 81100and1000 1000Print12or16 281100and10000 11100Print12Xor7 111100Xor111 1011Print11Xor7 121011xor111 1100注 先把数字转换为二进制数 再进行运算 AXorB XorB A 4 2 3运算符的优先顺序在一个表达式中进行多种操作时 VB会按一定的顺序进行求值 称这个顺序为运算符的优先顺序 运算符的优先顺序见表4 4 表4 4运算符的优先顺序 例4 1 设变量x 4 y 1 a 7 5 b 6 2 求表达式x y a bAndNoty 1 3AndNoty b2 再作关系运算 TrueAndNotFalse3 作非运算 TrueAndTrue4 最后得 True 例4 2 判断某个年份是闰年的根据是年份数满足下述条件之一 条件1 能被4整除 但不能被100整除的年份都是闰年 条件2 能被100整除 又能被400整除的年份都是闰年 设变量y表示年份 写出判断y是否闰年的布尔表达式 解 判断y是否满足条件1的布尔表达式是yMod4 0AndyMod1000判断y是否满足条件2的布尔表达式是yMod100 0AndyMod400 0两者取 或 即得判断闰年的布尔表达式 yMod4 0AndyMod1000OryMod100 0AndyMod400 0 4 3单条件选择语句IF单条件选择结构是最常用的双分支选择结构 其特点是 所给定条件 条件表达式 的值如果为真 则执行a1块 如果为假则执行a2块 其一般形式如图4 1所示 图4 1单条件选择结构的流程图实现单条件选择结构的语句是If语句 在VB中有行If语句和块If语句两种 4 3 1单行结构条件语句IF THEN ELSE单行If语句的语法格式为If 条件 Then 语句序列1 Else 语句序列2 说明 1 条件 可以是关系表达式 布尔表达式或数值表达式 如果以数值表达式作条件 则非0值为真 0为假 2 如果没有Else子句 语句序列1 为必要参数 在 条件 为True时执行 例4 3 输入x 计算y的值 其中 流程图4 2所示 图4 2计算y值的流程图根据流程图 写出命令按钮Command1的单击 Click 事件代码为 图4 3计算函数的值PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text Ifx 0Theny 1 xElsey 1 2 xText2 Text yEndSub 例4 4 学校对学习成绩优良的学生进行奖励 获奖的条件如下 1 所考5门课的总分超过450分 2 每门课的成绩都在88分以上 3 前3门 主课 的成绩都在95分以上 其他两门 非主课 的成绩都在80分以上 输入某学生5门课的成绩s1 s2 s3 s4 s5 判断他是否能够获奖 分析 依题意列出3个条件表达式 1 s1 s2 s3 s4 s5 4502 s1 88ANDs2 88ANDs3 88ANDs4 88ANDs5 883 s1 95ANDs2 95ANDs3 95ANDs4 80ANDs5 80 图4 4判断能否获奖命令按钮Command1的单击 Click 事件代码为 PrivateSubCommand1 Click Dims1AsSingle s2AsSingle s3AsSingle s4AsSingle s5AsSingleDimpAsStrings1 Val InputBox 请输入第1门课的成绩 输入框 0 s2 Val InputBox 请输入第2门课的成绩 输入框 0 s3 Val InputBox 请输入第3门课的成绩 输入框 0 s4 Val InputBox 请输入第4门课的成绩 输入框 0 s5 Val InputBox 请输入第5门课的成绩 输入框 0 t1 s1 s2 s3 s4 s5 450 t2 s1 88Ands2 88Ands3 88Ands4 88Ands5 88 t3 s1 95Ands2 95Ands3 95Ands4 80Ands5 80 Ift1Ort2Ort3Thenp 可以获奖 Elsep 不能获奖 p Str s1 Str s2 Str s3 Str s4 Str s5 Chr 13 pLabel1 Caption 该生五门课的成绩分别是 Chr 13 pEndSub 例4 5 利用输入框函数输入3个不同的数 选出其中最大的数 命令按钮Command1的单击 Click 事件代码为 PrivateSubCommand1 Click DimaAsSingle bAsSingle cAsSinglea Val InputBox 请输入第1个数 输入框 0 b Val InputBox 请输入第2个数 输入框 0 c Val InputBox 请输入第3个数 输入框 0 p a b cp p 三个数中最大的数是 Ifa bAnda cThenp p aIfb aAndb cThenp p bIfc aAndc bThenp p cLabel1 Caption pEndSub 图4 5求3个数中最大数4 3 2使用IIF函数还可以使用IIf函数来实现一些比较简单的选择结构 IIf函数的语法结构为 IIf 条件表达式 真部分 假部分 语句y IIf 条件表达式 真部分 假部分 相当于 If 条件表达式 theny 真部分 Elsey 假部分 例4 6 例4 3中命令按钮Command1的单击 Click 事件代码可以改为 PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text y IIf x 0 1 x 1 2 x Text2 Text yEndSub 4 3 3块结构条件语句IF THEN ELSE ENDIFVB提供的块If语句 将一个选择结构用多个语句行来实现 其语法结构为 If 条件1 Then 语句序列1 Else 语句序列2 EndIf在块形式中 If语句必须是第1行语句 If块必须以一个EndIf语句结束 例4 7 将例4 3中命令按钮Command1的单击 Click 事件代码改为多行If语句 PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text Ifx 0Theny 1 xElsey 1 2 xEndIfText2 Text yEndSub 4 3 4IF语句的嵌套1 IF语句的嵌套如果在If语句中操作块a1块 语句序列1 或a2块 语句序列2 本身又是一个If语句 则称为If语句的嵌套 If语句的嵌套IfthenIfthenifthenifthenElseifthenElseElseifthenEndifElseElseifthenEndifElseEndifEndifEndif 例4 8 铁路托运行李 从甲地到乙地 规定每张客票托运费计算方法是行李重量不超过50kg时 0 25元 kg 超过50kg而不超过100kg时 其超过部分按0 35元 kg收费 超过100kg时 其超过部分按0 45元 kg收费 编写程序 输入行李重量 计算并输出托运的费用 分析 设行李重量为wkg 应付运费为x元 则运费公式为 命令按钮Command1的单击 Click 事件代码为 PrivateSubCommand1 Click DimwAsSingle xAsSinglew Val Text1 Text Ifw 50Thenx 0 25 wElseIfw 100Thenx 0 25 50 0 35 w 50 Elsex 0 25 50 0 35 50 0 45 w 100 图4 7计算托运费EndIfEndIfText2 Text xEndSub 图4 8计算优惠价 例4 9 某百货公司为了促销 采用购物打折扣的优惠办法 每位顾客一次购物1 在1000元以上者 按九五折优惠 2 在2000元以上者 按九折优惠 3 在3000元以上者 按八五折优惠 4 在5000元以上者 按八折优惠 输入购物款数 计算并输出优惠价 如图4 8所示 分析 设购物款数为x元 优惠价为y元 付款公式为 命令按钮Command1的单击 Click 事件代码为 PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text Ifx 1000Theny xElseIfx 2000Theny 0 95 xElseIfx 3000Theny 0 9 xElse Ifx 5000Theny 0 85 xElsey 0 08 xEndIfEndIfEndIfEndIfText2 Text yEndSub图4 8计算优惠价 2 IF语句的嵌套格式ELSEIF例4 8中出现的多层If语句嵌套 使程序冗长 不便阅读 为此VB提供了带ElseIf的块If语句来处理当条件为假时又内嵌块If语句的情形 以使程序简化易写 其语法结构为 If 条件1 Then 语句序列1 ElseIf 条件2 Then 语句序列2 Else 其他语句序列 EndIf 例4 10 在例4 9中使用带ElseIf的块If语句来计算出优惠价 只需将其中命令按钮Command1的单击 Click 事件代码改为 PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text Ifx 1000Theny xElseIfx 2000Theny 0 95 xElseIfx 3000Theny 0 9 x ElseIfx 5000Theny 0 85 xElsey 0 08 xEndIfText2 Text yEndSub 4 4多分支条件选择语句SELECTCASE多分支选择结构的特点是 从多个选择结构中 选择第1个条件为真的路线作为执行的路线 即所给定的选择条件1为真时 执行a1块 如果为假则继续检查下一个条件 如果条件都不为真 就执行其他操作块 如果没有其他操作块 则不作任何操作就结束选择 如图4 9所示 图4 9多条件多分支选择结构的流程图 4 4 1SELECTCASE结构与语法虽然使用嵌套的办法可以利用If语句实现多分支选择 但是最好还是使用VB提供的多分支选择结构 SelectCase语句 来实现多分支选择 根据单一表达式来执行多种可能的动作时 SelectCase更为简捷 它根据表达式的值 来决定执行几组语句中的一组 4 4 1SELECTCASE结构与语法SelectCase语句的语法格式为SelectCase 测试条件 Case 表达式表1 语句序列1 Case 表达式表2 语句序列2 CaseElse 其他语句序列 EndSelect 其中 为数值型或字符串表达式 每个是一个或几个值的列表 可以是表达式 枚举值表达式1To表达式2 Is关系运算表达式等几种形式 如果在一个列表中有多个值 就用逗号把值隔开 每个语句组中含有零个到多个语句 SelectCase语句执行过程 1 计算的值2 将的值与Case语句中的中的每一个值逐一比较 如果与其中一个相匹配 则执行相应的语句组 如果不止一个 则只执行第一个相匹配的语句组 如果没有相匹配的 则执行CaseElse子句 可选 最后执行EndSelect语句 SelectCase语句表达式的值有如下规定 1 可以是一个值 也可以是几个值的列表 2 如果列表中的值不连续 就用逗号把值隔开 如 Case1 3 7 10 3 如果列表中的值是连续的 可用TO表达式 如 Case1to5 表示1到5这5个数 4 列表中还可以包含Is关系表达式 如caseIs 79 表示大于79的值5 表达式值的类型必须与测试表达式的类型相同 If结构和selectcase结构相互间的转换小结 Case子句中的 表达式表 是一个或多个如表4 5所示形式表达式的列表 表4 5表达式的形式当使用多个表达式的列表时 表达式与表达式之间要用逗号 隔开 4 4 2SELECTCASE结构的应用 例4 11 在例4 9中使用SelectCase语句来计算优惠价 只需将其中命令按钮Command1的单击 Click 事件代码改为 PrivateSubCommand1 Click DimxAsSingle yAsSinglex Val Text1 Text SelectCasexCaseIs 1000y xCaseIs 2000y 0 95 xCaseIs 3000y 0 9 x CaseIs 5000y 0 85 xCaseElsey 0 08 xEndSelectText2 Text yEndSub 例4 12 某航空公司规定在旅游的旺季7 9月份 如果订票数超过20张 票价优惠15 20张以下 优惠5 在旅游的淡季1 5月份 10月份 11月份 如果订票数超过20张 票价优惠30 20张以下 优惠20 其他情况一律优惠10 设计程序 根据月份和订票张数决定票价的优惠率 图4 11计算优惠价 命令按钮Command1的单击 Click 事件代码为 PrivateSubCommand1 Click DimmAsInteger nAsInteger rAsIntegerm Val Text1 Text n Val Text2 Text SelectCasemCaseIs 5 10 11Ifn 20Thenr 20Elser 30Case7To9Ifn 20Thenr 5Elser 15CaseElser 10EndSelectLabel4 Caption 所订机票的优惠率为 Str r EndSub 为了使用更加方便 再增加如下代码 窗体的Load事件代码 PrivateSubForm Load Text1 Text Month Date Text1中的默认值为当前月份EndSub文本框Text1的GotFocus事件代码 PrivateSubText1 GotFocus Text1 SelStart 0Text1 SelLength Len Text1 Text EndSub 文本框Text1的按健 KeyPress 事件代码 PrivateSubText1 KeyPress KeyAsciiAsInteger IfKeyAscii 13Then 在Text1按 Enter 键 光标跳到Text2IfText1 Text 0AndText1 Text 13ThenText2 SetFocusEndIfEndIfEndSub 文本框Text2的GotFocus事件代码 PrivateSubText2 GotFocus Text2 SelStart 0Text2 SelLength Len Text2 Text EndSub文本框Text2的按健 KeyPress 事件代码 PrivateSubText2 KeyPress KeyAsciiAsInteger IfKeyAscii 13Then 在Text2按 Enter 键 光标跳到Command1IfText2 Text 0ThenCommand1 SetFocusEndIfEndSub 4 5使用计时器控件计时器 Timer 是VisualBasic提供的一个用于定时的特殊控件 当到达预定时间时 系统会自动触发其Timer事件 以便完成指定的操作 计时器控件在设计时显示为一个小时钟图标 而在运行时则不可见 常用来做一些后台处理 计时器的属性和事件都相当少 能响应的事件只有自身特有的一个Timer事件 其主要属性见表4 6 表4 6Timer控件的属性 例4 13 为一个应用系统设计流动字幕板 如图4 12所示 标题 欲穷千里目 更上一层楼 在窗体中自右至左地反复移动 图4 12电子标题板 命令按钮Command1的Click事件代码 PrivateSubCommand1 Click IfCommand1 Caption S暂停 ThenCommand1 Caption C继续 Timer1 Enabled FalseElseCommand1 Caption S暂停 Timer1 Enabled TrueEndIfEndSub 编写Timer1的Timer事件代码 PrivateSubTimer1 Timer IfLabel1 Left Label1 Width 0ThenLabel1 MoveLabel1 Left 20ElseLabel1 Left Form1 ScaleWidthEndIfEndSub 4 6提供简单选择的控件成组使用的选项按钮以及复选框可以为用户提供简单的 事先准备的选项 4 6 1选项按钮选项按钮 OptionButton 又称单选按钮 一般来说 选项按钮总是作为一个组 选项按钮组 的组成部分工作的 选项按钮组是一组相互排斥的选项按钮 选择一个选项按钮就会立即清除该组中的其他按钮 在选项按钮组中只能单击一个选项 即选项按钮组只允许用户从选择菜单中选择一个选项 1 使用选项按钮组在窗体中定义的若干选项按钮可以组成一个选项组 一般常用框架 Frame 控件来组织一个选项组 例4 14 设银行定期存款年利率为 1年期2 25 2年期2 70 3年期3 24 5年期3 60 不计复利 今有本金a元 5年以后使用 共有以下6种存法 存一次5年期 存一次3年期 一次2年期 存一次3年期 两次1年期 存两次2年期 一次1年期 存一次2年期 三次1年期 存五次1年期 图4 14计算利息 分别计算各种存法5年后到期时的本息合计 如图4 14所示 分析 设x1 x2 x3 x5分别表示1年 2年 3年 5年定期储蓄的利息 a表示本金 则定期的本息计算公式分别为 1 x1 a 1 2x2 a 1 3x3 a 1 5x5 a 编写命令按钮Command1的单击 Click 事件代码 PrivateSubCommand1 Click DimaAsSingle yAsSingleDimx1AsSingle x2AsSingleDimx3AsSingle x5AsSinglea Val Text1 Text x1 0 0225 x2 0 0270 x3 0 0324 x5 0 0360SelectCaseTrueCaseOption1 Valuey 1 5 x5 aCaseOption2 Valuey 1 3 x3 1 2 x2 a CaseOption3 Valuey 1 3 x3 1 x1 2 aCaseOption4 Valuey 1 2 x2 2 1 x1 aCaseOption5 Valuey 1 2 x2 1 x1 3 aCaseOption6 Valuey 1 x1 5 aEndSelectText2 Text yText1 SetFocusEndSub 编写文本框Text1的GotFocus事件代码 PrivateSubText1 GotFocus Text1 SelStart 0Text1 SelLength Len Text1 Text EndSub 2 使用图形选项按钮可以将选项按钮设计成图形按钮的形式 例4 15 用图形选项按钮组控制流动字幕中的字体 如图4 15所示 在例4 13中增加4个选项按钮Option1 Option4 并修改Option1 Option4的Style属性为 1 Graphical 图形方式 再依次修改其Caption属性 如图4 15所示 图4 15图形选项按钮组 编写选项按钮Option1 Option4的Click事件代码 PrivateSubOption1 Click Text1 FontName 宋体 EndSubPrivateSubOption2 Click Text1 FontName 隶书 EndSubPrivateSubOption3 Click Text1 FontName 黑体 EndSubPrivateSubOption4 Click Text1 FontName 楷体 GB2312 EndSub说明 可以为图形按钮添加图形文件 以创建真正的 图形按钮 4 6 2复选框选项按钮组属于多项中选择一项的选择 若需要选择多项的情况 可以采用多个复选框 CheckBox 控件 当复选框被选定时 复选框中出现一个 复选框的Caption属性可以指定出现在复选框旁边的文本 而Picture属性用来指定当复选框被设计成图形按钮时的图像 复选框的状态由其Value属性决定 0 假 1 真 2 暗 1 使用单个复选框单个的复选框是让用户在两个选项之间进行选择 如是或否 真或假 这有点儿像两个按钮的选项组 只是形式上要简单一些 操作更方便一些 例4 16 在上例中 增加复选框 控制选项按钮组的显示 如图4 16所示 图4 16利用复选框控制选项按钮组的显示 复选框控件Check1的Click事件代码 PrivateSubCheck1 Click Option1 Visible Check1 ValueOption2 Visible Check1 ValueOption3 Visible Check1 ValueOption4 Visible Check1 ValueEndSub 2 使用多个复选框一般情况下 复选框总是成组出现 用户可以从中选择一个或多个选项 例4 17 设计一个个人资料输入窗口 使用选项按钮组输入性别与民族 使用复选框输入个人爱好 如图4 17所示 图4 17使用多个复选框 编写命令按钮Command1的Click事件代码 PrivateSubCommand1 Click IfText1 Text Thena InputBox 您忘了输入姓名 注意 请在此输入姓名 Ifa Ora 请在此输入姓名 ThenExitSubText1 Text aEndIfp1 Text1 Text p2 IIf Option1 男 女 p3 IIf Option3 汉族 少数民族 p4 喜欢 IfCheck1 Value 1Thenp4 p4 Check1 Caption IfCheck2 Value 1Thenp4 p4 Check2 Caption IfCheck3 Value 1Thenp4 p4 Check3 Caption IfCheck4 Value 1Thenp4 p4 Check4 Caption aa p1 p2 p3 IIf p4 喜欢 无爱好 p4 Label4 Caption Left aa Len aa 1 Text1 SetFocusEndSub编写文本框Text1的Change事件代码 PrivateSubText1 Change Label4 Caption EndSub说明 框架Frame1不能少 否则4个选项按钮成为一组 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑垃圾分拣工安全操作规程
- 2026年康复师物理因子疼痛治疗专项试卷及答案
- 冷凝器安全操作规程
- PCB电测岗位专业试题及详细答案
- 血栓后综合征肢体水肿长期管理共识
- 自身免疫性肝病骨代谢监测方案共识
- 2025内镜清洗消毒知识考核试题(护理、洗消)及答案
- 农田喷灌系统安装调试方案
- NPDP产品开发专业认证模拟试题
- 高压旋喷桩止水帷幕施工方案
- 光伏电安全管理协议书
- 2025年bec初级真题答案解析
- 测绘地理信息安全保密管理制度
- 基本药物使用及采购情况统计分析
- 2025人教版高一化学全册知识点归纳总结(复习资料)
- 智能制造生产管理课件
- 北京市丰台区2024-2025学年八年级上学期期末考试生物试卷
- 口腔科器械的包装课件
- 场地平整土方施工合同范本
- JJF1033-2023计量标准考核规范
- 前置胎盘手术配合
评论
0/150
提交评论