《Visual Basic.NET程序设计教程》第5章 选择结构程序设计_第1页
《Visual Basic.NET程序设计教程》第5章 选择结构程序设计_第2页
《Visual Basic.NET程序设计教程》第5章 选择结构程序设计_第3页
《Visual Basic.NET程序设计教程》第5章 选择结构程序设计_第4页
《Visual Basic.NET程序设计教程》第5章 选择结构程序设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第5章选择结构程序设计本章要点:单行结构条件语句If...Then...Else...多行结构条件语句If...Then...EndIf多分支选择语句SelectCase...EndSelect条件函数条件语句的嵌套选择结构程序应用举例1

在输入变量x的值之后,需根据x的不同取值范围做不同的处理,使用顺序结构的程序无法解决这一问题。本章将介绍解决此类问题的语句结构。引言

顺序结构程序是按语句的先后排列次序依次执行的,然而,计算机在处理实际问题时,往往需要根据条件是否成立,决定程序的执行方向,在不同的条件下,进行不同的处理。假如遇到这样一个问题:Y=|x|x≤0lnxx>025.1单行结构条件语句1.格式

If条件Then[语句组1][Else[语句组2]]2.功能

如果“条件”成立(True),则执行“语句组1”;

否则执行“语句组2”T语句组1条件语句组2F例:Ifx<=0Theny=Abs(x)Elsey=Log(x)33.说明1)“条件”是计算结果为True或False、或可以隐式转换为Boolean数据类型的表达式。2)可以没有Else部分,表示当条件不成立时不执行任何操作,这时必须有“语句组1”。例如:

Ifx<0Theny=-x3)“语句组1”和“语句组2”分别可以包含多条语句,但各语句之间要用冒号隔开。例如:

IfN>0Then

A=A+B:B=B+A

Else

A=A-B:B=B–A4【例5-1】使用单行结构条件语句,根据以下公式计算Y的值。|x|x≤0lnxx>0y=界面设计:TextBox1Label3Button15lnxyT|x|yx≤0?F输入x的值输出y的值流程图:6ImportsSystem.MathPublicClassForm1PrivateSubButton1_Click(…)HandlesButton1.ClickDimx,yAsSinglex=Val(TextBox1.Text)

Ifx<=0Theny=Abs(x)Elsey=Log(x)Label3.Text=yEndSubEndClass代码设计:7注意:1)单行结构条件语句应作为一条语句书写。如果语句太长需要换行,必须在折行处使用续行符号。例如:IfN>0ThenA=A+B:B=B+AElse_A=A-B:B=B-A82)多条单行结构条件语句不要用冒号合并成一行。a=1:b=-2Ifa>0Andb>0Theny=a+bIfa>0Andb<0Theny=a-b例:比较以下两个程序段执行后y的值?a=1:b=-2Ifa>0Andb>0Theny=a+b:If

a>0Andb<0Theny=a–b程序段1:程序段2:93)无论“条件”是否成立,单行结构条件语句的出口都是本条件语句之后的语句。例如:IfX>=0ThenX=1+XElseX=5-XY=1-X无论条件X>=0是否成立,都要执行Y=1–X例如:Ifx>0ThenIfy>0Thenz=x+yElsez=x-y

_ElseDebug.Print("error")4)单行结构条件语句可以嵌套。10If

条件1Then[语句组1][ElseIf

条件2Then[语句组2]]…[ElseIf

条件nThen[语句组n]][Else[语句组n+1]]EndIf5.2多行结构条件语句1.格式Ifx>10Theny=x-10ElseIfx>5Theny=x-5ElseIfx>0Theny=xElse

Debug.Print("error")EndIf例:11T……TTF条件1语句组1语句组2条件2F条件n语句组nF语句组n+12.功能123.说明1)“条件”是计算结果为True或False、或可以隐式转换为Boolean数据类型的表达式。2)除了第一行的If语句和最后一行的EndIf语句是必须的以外,ElseIf语句和Else语句都是可选的。形式一:If条件Then

语句组1Else

语句组2EndIf形式二:If条件Then

语句组EndIf两种常见的简化形式:13【例5-2】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

距离<250km没有折扣

250km≤距离<500km2%折扣

500km≤距离<1000km5%折扣

1000km≤距离<2000km8%折扣

2000km≤距离<3000km10%折扣距离≥3000km15%折扣使用多行结构条件语句,按以上标准计算运费。14分析:设:每公里每吨货物的基本运费为Price,货物重为Weight,运输距离为Distance,折扣为Discount,则总运费Freight的计算公式为:Freight=Price*Weight*Distance*(1-Discount)15界面设计:TextBox1TextBox2TextBox3Button1Label416代码设计:PrivateSubButton1_Click(…)HandlesButton1.ClickDimprice,weight,distance,discount,freightAsSingleprice=Val(TextBox1.Text)'输入基本运费

weight=Val(TextBox2.Text)'输入货物重量

distance=Val(TextBox3.Text)'输入运输距离

'根据不同的运输距离distance计算折扣

Ifdistance<250Thendiscount=0

ElseIfdistance>=250Anddistance<500Thendiscount=0.0217

ElseIfdistance>=500Anddistance<1000Then

discount=0.05

ElseIfdistance>=1000Anddistance<2000Then

discount=0.08

ElseIfdistance>=2000Anddistance<3000Then

discount=0.1Else

discount=0.15EndIf

'计算总运费

Freight=Price*Weight*distance*(1-discount)

'输出总运费

Label4.Text=Format(freight,"0.00")EndSub18本例条件语句可以简化为:Ifdistance<250ThenDiscount=0ElseIf

distance<500ThenDiscount=0.02ElseIf

distance<1000ThenDiscount=0.05ElseIf

distance<2000ThenDiscount=0.08ElseIf

distance<3000ThenDiscount=0.1ElseDiscount=0.15EndIf在书写多行结构条件语句时,可以将If语句、ElseIf子句、Else子句和EndIf语句左对齐,而各语句组向右缩进若干空格,以使程序结构更加清楚,便于阅读和查错。VB.NET会自动进行缩进。1920使用多行结构条件语句应注意:1)必须以If语句开头,EndIf语句结束。2)严格按格式要求书写,不可随意换行或将两行合并成一行。例如,对于条件结构:写法一:Ifx>=0Theny=1Elsey=2EndIf写法二:Ifx>=0Theny=1Elsey=2EndIfIfx>=0Theny=1Elsey=2EndIf以下两种写法都是错误的:5.3多分支选择语句1.格式SelectCase

测试表达式

Case

表达式表1[语句组1][Case

表达式表2[语句组2]]…[Case

表达式表n[语句组n]][CaseElse[语句组n+1]]EndSelect2.功能根据测试表达式的值,按顺序匹配各Case后的表达式表,如果匹配成功,则执行该Case下的语句块,然后转到EndSelect语句之后继续执行。21多分支选择语句的功能流程图:语句组n+1T……TTF匹配表达式表1语句组1语句组2F语句组nF匹配表达式表2匹配表达式表n223.说明1)“测试表达式”的计算结果必须属于某个基本数据类型。2)“表达式表”中的表达式值可以是任何数据类型,只要它们可以被隐式地转换为“测试表达式”的类型。可以有三种形式:

①表达式1[,表达式2]...

如:Case1,3,5②表达式1To表达式2

如:Case10To30Case"A"To"Z"

③Is关系运算符表达式如:CaseIs>=10CaseIs=0与Case0相同三种形式可以混用,如:CaseIs<-5,0,5To10023【例5-3】用多分支选择语句实现:输入年份和月份,求该月的天数。分析:当月份为1、3、5、7、8、10、12时,天数为31天;当月份为4、6、9、11时,天数为30天;当月份为2时,如果是闰年则天数为29天,否则天数为28天。某年为闰年的条件是:年份能被4整除,但不能被100整除,或年份能被400整除。24界面设计:TextBox1TextBox2TextBox3Button125代码设计:PrivateSubButton1_Click(…)HandlesButton1.ClickDimY,MAsIntegerY=Val(TextBox1.Text)'输入年份

M=Val(TextBox2.Text)'输入月份

SelectCaseM

'对月份进行判断

Case1,3,5,7,8,10,12TextBox3.Text=31

Case4,6,9,11TextBox3.Text=30

Case2

'如果月份为2

If(YMod4=0AndYMod100<>0)Or(YMod400=0)ThenTextBox3.Text=29

ElseTextBox3.Text=28

EndIf

EndSelectEndSub264.注意1)不可以直接在Case后的表达式表中使用关系表达式来表示条件。例:实现“如果变量X的值小于0,则Y等于X的绝对值”错误:SelectCaseX

CaseX<0Y=Abs(X)…EndSelect正确:SelectCaseX

CaseIs<0Y=Abs(X)…EndSelect272)不要在Case后直接使用布尔运算符来表示条件。例如,表示条件0<X<100,以下写法都是错误的。错误写法一:SelectCaseX

CaseIs>0AndIs<100…EndSelect错误写法二:SelectCaseX

Casex>0Andx<100

…EndSelect

对于这种条件或其他较复杂的条件,使用多行结构条件语句来实现则更方便一些。283)“测试表达式”只能是一个变量或一个表达式,而不能是变量表或表达式表。例如,检查变量X1、X2、X3之和是否小于零:错误写法:SelectCaseX1,X2,X3CaseX1+X2+X3<0…EndSelect正确写法:SelectCaseX1+X2+X3CaseIs<0…EndSelect29*5.4条件函数1.IIf函数格式:IIf(条件表达式,表达式1,表达式2)功能:当“条件表达式”的值为True时,返回“表达式1”的值;当“条件表达式”的值为False时,返回“表达式2”的值。例1:使用IIf函数求两个变量A和B的较大数:

MaxAB=IIf(A>B,A,B)例2:使用IIf函数求三个变量A、B和C的最大数:

MaxAB=IIf(A>B,A,B)

MaxABC=IIf(MaxAB>C,MaxAB,C)302.Choose函数格式:Choose(数值表达式,选项1,选项2,...,选项n)功能:当“数值表达式”的值为1时,返回“选项1”的值;当“数值表达式”的值为2时,返回“选项2”的值,以此类推。当“数值表达式”小于1或大于n时,返回Nothing。如果“数值表达式”的值不是整数,则会先舍去小数部分。例如:将成绩1分、2分、3分、4分和5分转换成相应的等级:不及格(1分,2分)、及格(3分),良(4分),优(5分):

Grade=Choose(Score,"不及格","不及格","及格","良","优")315.5条件语句的嵌套

如果在条件成立或不成立的情况下要继续判断其他条件,则可以使用嵌套的条件语句来实现,也就是在“语句组”中再使用另一个条件语句。相同的条件语句可以嵌套,不同的条件语句也可以互相嵌套,但在嵌套时要注意,对于多行结构条件语句,每一个If语句必须有一个与之配对的End

If语句,对于多分支选择语句,每一个Select

Case语句必须要有相应的End

Select语句,而且整个条件结构必须完整地出现在“语句组”中。32例1:多行结构条件语句的嵌套IfA=1Then

IfB=0Then

Debug.Print("**0**")

ElseIfB=1Then

Debug.Print("**1**")

EndIfElseIfA=2Then

Debug.Print("**2**")EndIf33例2:多分支选择语句的嵌套:SelectCaseA

Case1

SelectCaseB

Case0

Debug.Print("**0**")Case1

Debug.Print("**1**")

EndSelect

Case2

Debug.Print("**2**")EndSelect34例3:多分支选择语句与多行结构条件语句的互相嵌套SelectCaseA

Case1

IfB=0Then

Debug.Print("**0**")

ElseIfB=1Then

Debug.Print("**1**")

EndIfCase2

Debug.Print("**2**")EndSelect355.6选择结构程序应用举例【例5-4】求一元二次方程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,则有两个共轭复根36界面设计:TextBox1TextBox2TextBox3TextBox4Button137代码设计:ImportsSystem.MathPublicClassForm1PrivateSubButton1_Click(…)HandlesButton1.ClickDima,b,c,x,x1,x2,delta,a1,a2AsSinglea=Val(TextBox1.Text)b=Val(TextBox2.Text)c=Val(TextBox3.Text)

Ifa=0Then

Ifb=0Then

MsgBox("系数为零,请重新输入")TextBox1.Focus()TextBox1.SelectAll()

Elsex=-c/bTextBox4.Text=Format(x,"0.000")

EndIf

38Elsedelta=b^2-4*a*c

SelectCasedelta

Case0x=-b/(2*a)TextBox4.Text="X1=X2="&_

Format(x,"0.000")

CaseIs>0

x1=(-b+Sqrt(delta))/(2*a)

x2=(-b-Sqrt(delta))/(2*a)

TextBox4.Text=_"X1="&Format(x1,"0.000")&vbCrLf_&"X2="&Format(x2,"0.000")

39

CaseIs<0

a1=-b/(2*a)

a2=Sqrt(Abs(delta))/(2*a)

TextBox4.Text=_"X1="&Format(a1,"0.000")&_"+"&Format(a2,"0.000")&"i"TextBox4.Text=TextBox4.Text&vbCrLf&_"X2="&Format(a1,"0.000")&_"-"&Format(a2,"0.000")&"i"EndSelect

EndIfEndSubEndClass40【例5-5】设计一个口令检测程序,界面如右图(上图)所示。运行时,用户通过文本框TextBox1输入口令,当口令正确时,显示“恭喜!成功进入本系统”(中图);否则,显示“口令错!请重新输入”(下图);如果连续两次输入了错误口令,则在第三次输入完错误口令后显示一个消息框,提示“对不起,您不能使用本系统”,然后结束运行。41界面设计:TextBox1的属性设置:PasswordChar属性设置为“*”号,使输入的口令显示为*号,MaxLength属性设置为6,使最大口令长度为6个字符。Label1TextBox142代码设计:代码写在文本框的KeyDown事件过程中KeyDown事件过程返回一个参数e,e是一个包含事件相关数据的对象根据对象e的KeyCode属性可以判断当前所按下的是键盘上的哪个按键本例根据KeyCode属性的值是否为回车键(Keys.Enter)来判断口令是否输入完毕43PrivateSubTextBox1_KeyDown(…,ByVal

eAsSystem.Windows.Forms.KeyEventArgs)HandlesTextBox1.KeyDown

StaticIAsInteger'I用于累计输入错误口令的次数

Ife.KeyCode=Keys.EnterThen

'如果按下回车键

IfUCase(TextBox1.Text)="HELLO"Then

Label2.Text="恭喜!成功进入本系统"

ElseIfI=0OrI=1ThenI=I+1Label2.Text="口令错!请重新输入"TextBox1.SelectAll()

Else

MsgBox("对不起,您不能使用本系统")End

EndIf

EndIfEndSub44【例5-6】编写应用程序,模拟交通管理信号灯。界面设计:PictureBox1PictureBox2PictureBox3Timer145代码设计:1)在窗体的Load事件过程中编写代码,使得运行时三个信号灯图像重叠在一起,且绿色信号灯图像Image1置前,这样运行时首先看到的是绿灯。PrivateSubForm1_Load(…)HandlesMyBase.LoadPictureBox1.Location=PictureBox2.LocationPictureBox3.Location=PictureBox2.LocationPictureBox1.BringToFront()'将绿灯图像置前EndSub462)设每隔1秒信号灯变换一种状态。信号灯按

温馨提示

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

最新文档

评论

0/150

提交评论