版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章选择结构程序设计本章要点:条件语句单行结构条件语句If...Then...Else...块结构条件语句If...Then…EndIf多分支选择语句SelectCase...EndSelect多分支选择转移语句On…GoTo特点:根据条件是否成立,决定程序的执行分支酒店设计1引言顺序结构程序的执行次序是按语句的先后排列次序依次执行的,然而,计算机在处理实际问题时,往往需要根据条件是否成立,决定程序的执行方向,在不同的条件下,进行不同的处理。假如遇到这样一个问题:Y=|x|x≤0lnxx>0在输入变量x的值之后,需根据x的不同取值范围做不同的处理,使用顺序结构的程序无法解决这一问题的。本章将介绍解决此类问题的四种语句结构。25.1单行结构条件语句1.格式If
<条件>
Then[<语句组1>][Else
<语句组2>]2.功能如果<条件>成立,则执行<语句组1>否则执行<语句组2>T语句组1条件语句组2F33.说明(1)<条件>可以是:
关系表达式布尔表达式数值表达式:0为False;非0为True字符串表达式:"0"为False;非"0"为True(2)可以没有Else部分,这时必须有<语句组1>。T语句组1条件F例:IfX<>"aaa"ThenPrintX4(3)<语句组1>、<语句组2>:可以有多条语句,各语句之间用冒号隔开。例:IfN>0ThenA=A+B:B=B+AElseA=A-B:B=B-A(4)应作为一条语句书写。如果语句太长需要换行,必须在折行处使用续行符号。(5)无论条件是否成立,都具有共同出口例:IfX>=0ThenX=1+XElseX=5-X
Y=1-XPrint"Y=";Y
若X=2则打印Y=-2若X=-2则打印Y=-6共同出口(6)单行结构条件语句可以嵌套
IF...THEN...IF...THEN...ELSE...ELSE…5【例5-1】设界面如下图所示,用文本框输入x的值,单击“计算Y”按钮时,根据以下公式计算y的值。|x|x≤0lnxx>0y=Command1Text1Label36分析:本例需要输入x,根据x的值决定y的值,然后输出y的值,该计算过程可以用流程图表示:lnxyT|x|yx≤0F输入x的值输出y的值PrivateSubCommand1_Click()X=Val(Text1.Text)
IfX<=0ThenY=Abs(X)ElseY=Log(X)Label3.Caption=YEndSub代码如下:7思考:比较以下两段程序,是否都能够实现上例的功能。程序段1:X=Val(Text1.Text)Y=Abs(X)IfX>0ThenY=Log(X)Label3.Caption=Y程序段2:X=Val(Text1.Text)Y=Log(X)IfX<=0ThenY=Abs(X)Label3.Caption=Y8【例5-2】平面直角坐标系中,不同的象限内,点的坐标的符号有以下4种情况:任意输入一对坐标值,找出它所在的象限。如果X=0或Y=0则给出提示“该点不在任何象限内”。第一象限
X>0,Y>0第二象限X<0,Y>0第三象限X<0,Y<0第四象限X>0,Y<0XY9分析:设分别用文本框Text1和Text2输入X和Y值,如果该坐标点在坐标轴上,则给出提示并退出;如果该坐标点不在坐标轴上,再按X、Y的不同取值给出判断结果。具体过程用流程图表示如下:TTFX或Y为0X>0FY>0F输入X,Y的值输出:该点不在任何象限Y>0T输出:在第一象限输出:在第四象限输出:在第二象限输出:在第三象限FT10设运行时单击命令按钮Command1进行判断,并将结果直接打印在窗体上,Command1的Click事件过程如下:PrivateSubCommand1_Click()X=Val(Text1.Text):Y=Val(Text2.Text)
IfX=0OrY=0Then_Print"不在任何象限内":ExitSubIfX>0Then
IfY>0ThenPrint"INA"Else_Print"IND"
Else
IfY>0ThenPrint"INB"_ElsePrint"INC"EndSub115.2块结构条件语句1.格式If<条件1>
Then[<语句组1>]
[ElseIf<条件2>
Then[<语句组2>]]
……
[ElseIf<条件N>Then[<语句组N>]][Else[<其他语句组>]]EndIf122.功能T……TTF条件1语句组1语句组2条件2F条件n语句组nF语句组n+1133.说明1)整个块结构必须以If语句开头,EndIf语句结束2)除了第一行的If语句和最后一行的EndIf语句是必须的以外,ElseIf子句和Else子句都是可选的。3)两种常见的简化形式:形式一:If<条件>Then<语句组1>Else<语句组2>EndIf形式二:If<条件>Then<语句组>EndIf14【例5-3】将例5-2改成用块结构条件语句实现。PrivateSubCommand1_Click()X=Val(Text1.Text):Y=Val(Text2.Text)IfX=0OrY=0ThenPrint"该点不在任何象限内"
ElseIfX>0AndY>0ThenPrint"在第一象限"
ElseIfX<0AndY>0ThenPrint"在第二象限"
ElseIfX<0AndY<0ThenPrint"在第三象限"
ElsePrint"在第四象限"
EndIfEndSub15【例5-4】输入华氏温度F,利用公式C=5/9*(F-32)转换成摄氏温度C,根据转换结果C的不同值,按以下要求给出相应的提示。C>40时,打印"HOT"30<C≤40时,打印"WARM"20<C≤30时,打印"ROOMTEMPERATURE"10<C≤20时,打印"COOL"0<C≤10时,打印"COLD"C≤0时,打印"FREEZING"Text2Text116PrivateSubCommand1_Click()C=5/9*(Val(Text1.Text)-32)Text2.Text=Format(C,"0.00")IfC>40ThenLabel2.Caption="HOT"ElseIfC>30ThenLabel2.Caption="WARM"ElseIfC>20ThenLabel2.Caption="ROOMTEMPERATURE"ElseIfC>10ThenLabel2.Caption="COOL"ElseIfC>0ThenLabel2.Caption="COLD"ElseLabel2.Caption="FREEZING"EndIfEndSub174.注意1)ElseIf不能写成ElseIf,即中间不能有空格。2)在书写时,可以将If语句、ElseIf子句、Else子句、和EndIf语句左对齐,而各语句组向右缩进若干空格,以使程序结构更清楚。3)严格按格式要求书写,不可随意换行或将两行合并成一行。例如,对于条件结构:Ifx>=0Theny=1Elsey=2EndIf以下两种写法都是错误的:
写法一:Ifx>=0Theny=1Elsey=2EndIf写法二:Ifx=1Theny=10Elsey=20EndIf185.3多分支选择语句1.格式SelectCase<测试表达式>Case<表达式表1>[<语句组1>][Case<表达式表2>[<语句组2>]]…[CaseElse[<语句组n>]]EndSelect2.功能:根据测试表达式的值,按顺序匹配Case后的表达式,如果匹配成功,则执行该Case下的语句块,然后转到EndSelect语句之后继续执行。19语句组n+1T……TTF匹配表达式表1语句组1语句组2F语句组nF匹配表达式表2匹配表达式表n多分支选择语句的功能流程图:203.说明
1)<测试表达式>:数值或字符表达式2)Case后的<表达式表>可以为如下形式:①表达式1[,表达式2]...如:Case1,3,5②表达式1TO表达式2如:Case10TO30Case"A"TO"Z"③Is<关系运算符><表达式>如:CaseIs>=10CaseIs=0与Case0相同且三种形式可以混用,如:
CaseIs<-5,0,5To10021Y=ex+e-xx<01.25x=0lgxx>0【例5-5】按以下公式求分段函数y的值。Text1Text2Command1设运行时从文本框Text1输入x的值,单击命令按钮Command1计算Y的值,结果显示于文本框Text2中,界面如下:22命令按钮Command1的Click事件过程如下:PrivateSubCommand1_Click()X=Val(Text1.Text)'输入X的值
SelectCaseX'<测试表达式>为XCaseIs<0Y=Exp(X)+Exp(-X)Case0
'或CaseIs=0Y=1.25CaseIs>0Y=Log(X)/Log(10)EndSelectText2.Text=Format(Y,"0.000000")EndSub234.注意1)<测试表达式>的类型应与各Case后的表达式类型一致。2)不能在Case后的表达式中使用<测试表达式>中的变量。例如:SelectCaseXCaseX<0'在这里使用了变量X,是错误的
Y=Exp(X)+Exp(-X)CaseX=0'在这里使用了变量X,是错误的
Y=1.25CaseX>0'在这里使用了变量X,是错误的
Y=Log(X)/Log(10)EndSelect243)<测试表达式>只能是一个变量或一个表达式,而不能是变量表或表达式表。例如,检查变量X1、X2、X3之和是否小于零,
不能写成:SelectCaseX1,X2,X3'错误写法
CaseX1+X2+X3<0…EndSelect
而应该写成:SelectCaseX1+X2+X3
'正确写法
CaseIs<0…EndSelect254)不要在Case后直接使用布尔运算符来表示条件。例如,要表示条件0<X<100,不能写成:SelectCaseXCaseIs>0AndIs<100'使用了And,是错误的…EndSelect对于较复杂的条件,可以用块结构条件语句来实现,而有些条件完全可以转换成Case语句允许的几种形式之一。26【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:
距离<250km没有折扣250km≤距离<500km2%折扣500km≤距离<1000km5%折扣1000km≤距离<2000km8%折扣2000km≤距离<3000km10%折扣3000km≤距离15%折扣分析:设每公里每吨货物的基本运费为Price,货物重为Weight,运输距离为Distance,折扣为Discount,则总运费Freight的计算公式为:Freight=Price*Weight*Distance*(1-Discount)27设计界面如下图:Text1Text2Text3Text4Command128Command1的Click事件过程如下:PrivateSubCommand1_Click()Price=Val(Text1.Text)
Weight=Val(Text2.Text)Distance=Val(Text3.Text)
SelectCaseDistance
CaseIs<250Discount=0CaseIs<500Discount=0.02CaseIs<1000Discount=0.0529CaseIs<2000Discount=0.08CaseIs<3000Discount=0.1CaseElseDiscount=0.15EndSelectFreight=Price*Weight*Distance*(1-Discount)Text4.Text=FreightEndSub301.格式
On<表达式>GoTo{<标号表>|<行号表>}2.功能根据<表达式>的值,把控制权转移到<标号表>或<行号表>指定的语句中的一个去执行。具体过程是:先计算<表达式>的值,并将其四舍五入为一个整数,然后根据该整数值决定转移到第几个标号或行号所指定的语句去执行。如果<表达式>的值为1,则转到第一个标号或行号所指定的语句行去执行;如果<表达式>的值为2,则转到第二个标号或行号所指定的语句行去执行,以此类推。5.4多分支选择转移语句On…GoTo313.说明1)<表达式>的值应在0~255之间,当<表达式>的值小于0或大于255时会出错。2)<表达式>的值应该在1到标号或行号列表项目个数之间。当表达式的值为0或大于列表项目个数时,控制权会转移到On...GoTo之后的语句。3)可以在同一个列表中混合使用标号和行号。“标号”是一个以冒号结尾的标识符;“行号”是一个整型数。32【例5-7】用输入框输入1~5之间的学生成绩,将其转换为4个成绩等级:1、2分不及格3分及格4分良5分优设运行时单击Command1开始输入并转换。代码如下:PrivateSubCommand1_Click()X=Val(InputBox("请输入分数1~5"))33
OnXGoTo10,10,A1,A2,A3
MsgBox"输入有误"
GoToB1
10MsgBox"不及格"
GoToB1
A1:MsgBox"及格"
GoToB1
A2:MsgBox"良好"
GoToB1
A3:MsgBox"优秀"
B1:EndSub无条件GoTo语句:GoTo{<标号>|<行号>}功能:无条件地转到<标号>或<行号>指定的位置执行。34如果在条件成立或不成立的情况下要继续判断其他条件,则可以使用嵌套的条件语句来实现,也就是在语句组中再使用另一个条件语句。5.5条件语句的嵌套35块结构条件语句的嵌套示例:IfA=1Then
IfB=0ThenPrint"**0**"
ElseIfB=1ThenPrint"**1**"
EndIfElseIfA=2ThenPrint"**2**"EndIf36多分支选择语句的嵌套示例:SelectCaseACase1
SelectCaseBCase0
Print"**0**"Case1
Print"**1**"EndSelectCase2Print"**2**"EndSelect37多分支选择语句与块结构条件语句的互相嵌套示例:SelectCaseACase1
IfB=0ThenPrint"**0**"
ElseIfB=1ThenPrint"**1**"
EndIf
Case2Print"**2**"EndSelect38【例5-8】求一元二次方程ax2+bx+c=0的解。分析:1)如果a=0,则不是二次方程,此时如果b=0,则提示重新输入系数;如果b0,则:x=-c/b2)如果a0,且b2-4ac=0,则有两个相等的实根3)如果a0,且b2-4ac>0,则有两个不等的实根4)如果a0,且b2-4ac<0,则有两个共轭复根5.6应用举例39设计界面:Text1Text2Text3Command1运行界面:40PrivateSubCommand1_Click()A=Val(Text1.Text):B=Val(Text2.Text)C=Val(Text3.Text):ClsCurrentX=600:CurrentY=1100
IfA=0Then
IfB=0ThenMsgBox"系数为零,请重新输入"
Text1.SetFocusText1.SelStart=0Text1.SelLength=Len(Text1.Text)
ElseX=-C/BPrint"X=";Format(X,"0.000")
EndIfExitSub'EndIf41
Delta=B^2-4*A*CSelectCaseDelta
Case0Print"X1=X2=";Format(-B/(2*A),"0.000")
CaseIs>0X1=(-B+Sqr(Delta))/(2*A)X2=(-B-Sqr(Delta))/(2*A)Print"X1=";Format(X1,"0.000")CurrentX=600:CurrentY=1300Print"X2=";Format(X2,"0.000")
CaseIs<0A1=-B/(2*A)A2=Sqr(Abs(Delta))/(2*A)42Print"X1=";Format(A1,"0.000");"+";_Format(A2,"0.000");"i"CurrentX=600CurrentY=1300Print"X2=";Format(A1,"0.000");"-";_Format(A2,"0.000");"i"
EndSelectEndSub43【例5-9】设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!您已成功进入本系统”,否则,显示,“口令错!请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后结束程序的执行。Text1Label244分析:界面中用一个文本框Text1接受口令,Text1的属性设置如下:
PasswordChar:*
MaxLength:6要求运行时在用户输入完口令并按回车键时对口令进行判断,因此本例使用了文本框Text1的KeyUp事件过程,当焦点在文本框时,松开键盘任一键后产生KeyUp事件,同时返回按键代码KeyCode。回车键的KeyCode为13,所以程序首先判断如果用户在Text1中按下了回车键,表示口令输入完,再判断口令是否正确。Text1的KeyUp事件过程如下:45PrivateSubText1_KeyUp(KeyCodeAsInteger,_ShiftAsInteger)
StaticIAsInteger
'保存输入错误口令的次数
IfKeyCode=13Then
'如果按下的键为回车键
If
UCase(Text1.Text)="HELLO"Then
Label2.Caption="恭喜!,您已成功进入本系统"
ElseIfI=0OrI=1Then
I=I+1Label2.Caption="口令错!,请重新输入"
Text1.SelStart=0Text1.SelLength=Len(Text1.Text)
Else
MsgBox"对不起,您不能使用本系统":End
EndIf
EndIfEndSub46【例5-10】设计一个四则运算的自我练习应用程序,界面如下图所示。
Text1Text4Text3Text2Label4Label247要求:1)执行时,当在Text1中输入一种运算符后,在标签Label2中立即出现该运算符号。2)单击“出题”按钮可以产生两个[0,1000]之间的随机整数,这时由Text2、Label2和Text3组成一个表达式。3)可以通过单击“计算”按钮计算所生成的表达式的值。4)也可以由用户在文本框Text4中输入运算结果通过单击“判断”按钮可以判断输入的运算结果是否正确,然后在Label4上显示“正确”或“错误”。5)单击“退出”按钮结束运行。481)在Text1中输入加、减、乘、除符号后,在Label2中立即出现相应的运算符号。PrivateSubText1_Change()Label2.Caption=Text1.TextEndSub2)单击“出题”按钮Command1,生成两个[0,1000]之间的随机整数。PrivateSubCommand1_Click()RandomizeText2.Text=Int(Rnd*1001)Text3.Text=Int(Rnd*1001)
Text4.Text=""EndSub493)单击“计算”按钮Command2得出Text4的值。PrivateSubCommand2_Click()
IfLabel2.Caption="+"ThenText4.Text=Val(Text2.Text)+Val(Text3.Text)
ElseIfLabel2.Caption="-"Then
Text4.Text=Val(Text2.Text)-Val(Text3.Text)
ElseIfLabel2.Caption="*"ThenText4.Text=Val(Text2.Text)*Val(Text3.Text)
ElseIfLabel2.Caption="/"ThenText4.Text=Val(Text2.Text)/Val(Text3.Text)
ElseMsgBox"运算类型错,请重输",,"警告"
Text1.SetFocus:Text1.SelStart=0Text1.SelLength=Len(Text1.Text)EndIfEndSub504)Text4的内容也可以由用户输入,通过单击“判断”按钮Command3判断输入结果是否正确。PrivateSubCommand3_Click()
SelectCaseLabel2.CaptionCase
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度耕地质量提升工程耕地指标出让与执行合同3篇
- 二零二五年度公共设施虫鼠害防治与环境卫生管理合同4篇
- 个人劳务合同简单范本(2024版)
- 二零二五版智能语音助手软件采购及集成合同2篇
- 2025年新材料研发厂房抵押租赁合同3篇
- 2025版危险化学品仓储物流购销合同范本3篇
- 2025年节日庆典宣传品制作合同范本2篇
- 2025年度农业科技产品推广合同范本4篇
- 2025年度厨师食材采购与供应链管理合同范本4篇
- 2025版企业礼仪培训与文化传播战略合作伙伴合同3篇
- 2025年山东浪潮集团限公司招聘25人高频重点提升(共500题)附带答案详解
- 2024年财政部会计法律法规答题活动题目及答案一
- 2025年江西省港口集团招聘笔试参考题库含答案解析
- (2024年)中国传统文化介绍课件
- 液化气安全检查及整改方案
- 《冠心病》课件(完整版)
- 2024年云网安全应知应会考试题库
- 公园保洁服务投标方案
- 光伏电站项目合作开发合同协议书三方版
- 高中物理答题卡模板
- 芳香植物与芳香疗法讲解课件
评论
0/150
提交评论