第四章 选择结构程序设计.docx

上传人:b****5 文档编号:5712292 上传时间:2022-12-31 格式:DOCX 页数:45 大小:401.40KB
下载 相关 举报
第四章 选择结构程序设计.docx_第1页
第1页 / 共45页
第四章 选择结构程序设计.docx_第2页
第2页 / 共45页
第四章 选择结构程序设计.docx_第3页
第3页 / 共45页
第四章 选择结构程序设计.docx_第4页
第4页 / 共45页
第四章 选择结构程序设计.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

第四章 选择结构程序设计.docx

《第四章 选择结构程序设计.docx》由会员分享,可在线阅读,更多相关《第四章 选择结构程序设计.docx(45页珍藏版)》请在冰豆网上搜索。

第四章 选择结构程序设计.docx

第四章第四章选择结构程序设计选择结构程序设计第四章选择结构程序设计4.1选择结构程序设计的概念在实际工作中,常常需要根据某个条件是否成立,来决定下一步应该做什么工作。

编写程序让计算机工作,同样存在这种情况。

在这种情况下,程序不再按照代码的书写顺序来执行各语句行的语句,而是根据给定的条件来选择,执行哪些语句行,不执行哪些语句行。

选择结构程序也称为分支构造程序,即程序执行到选择结构时,有两条以上的可供选择的程序执行分支。

选择结构的特点是:

根据所给定的选择条件为真(即条件成立)与否,来决定从各实际可能的不同操作分支中,选择执行某一分支的相应操作,并且任何情况下均有“无论分支多寡,必择其一;纵然众多,仅选其一”的特征。

VisualBasic中实现选择结构的语句主要:

If.ThenIf.Then.ElseSelectCase4.2条件表达式在使用选择结构语句时,要用条件表达式来描述选择条件。

条件表达式一般分为两类:

关系表达式和逻辑表达式。

条件表达式的取值为逻辑值(也称为布尔值):

真(True)或假(Flase)。

在VB中,True转换为数值等于-1,False转换为数值等于0。

条件表达式也可以是数值表达式,其值等于非0为True,其值等于0为Flase。

4.2.1关系表达式在程序中,表示相等、不等、大于、小于的运算符称为关系运算符或比较运算符,用关系运算符把两个表达式连接起来就构成关系表达式。

在VB中使用的关系运算符共有6种,如表4-1所示。

表4-1关系运算符运算符名称关系表达式示例结果小于35True=小于或等于3大于35False=5False=等于ab=aFalse不等于35True说明:

关系运算符的两侧可以是数值表达式、字符型表达式或日期型表达式,也可以是常量、变量或函数。

关系表达式正确编译的条件是:

关系运算符两侧表达式的数据类型相同或可以自动转换为相同。

先计算各表达式的值,然后进行关系比较,若关系成立,则返回True(-1),否则返回False(0)。

关系表达式中,比较的两个操作数类型不同,比较的方式不同:

如果比较的两个操作数是数值型,则按其值的大小比较;如果比较的两个操作数是日期型数据,将日期看成“yyyymmdd”(年4位、月2位、日2位)的8位整数,按数值的大小比较;如果比较的两个操作数是字符型,则按字符的ASCII码值从左到右一一比较,一旦出现不同的字符便停止比较,其中ASCII码值大的字符所在的字符串大,常见字符值的大小如下:

空格09AZaz=0Andx5)And(34)(45)And(35)Or(35)Or(34)TrueFalseNot非表达式为真,结果为假,表达式为假,结果为真,进行取“反”操作Not(10)Not(15)Xor(34)(45)Xor(34)TrueFalse说明:

逻辑运算符两侧都是数值数据,则将数值数据转换为二进制的补码数,1表示真,0表示假,进行按位逻辑运算,结果为一个十进制数。

例如,在图4-2的立即窗口中,给出了表达式为数值的逻辑运算的结果。

若把各表达式中数值转换为8位二进制补码数,最高为符号位,0表示正数,1表示负数,则图4-2中:

(10And7)相当于(00001010And00000111),结果为00000010,即十进制数的2(10Or7)相当于(00001010Or00000111),结果为00001111,即十进制数的15(10Xor7)相当于(00001010Xor00000111),结果为00001101,即十进制数的13(Not7)相当于(Not00000111),结果为11111000,即十进制数的-8图4-2数值的逻辑运算如果在一个表达式中含有算术运算、字符串运算、关系运算和逻辑运算,则首先作算术运算,其次作字符串运算,再作关系运算,最后作逻辑运算(参见表4-3)。

而在逻辑运算中,各运算符的优先顺序由高到低的关系是:

NotAndOr和Xor(Or和Xor同级)。

在程序设计中,较常使用的是算术运算、关系运算和逻辑运算的混合表达式,如图4-3的立即窗口。

图4-3逻辑运算举例4.2.3运算符的优先顺序在编程实现中,常在一个表达式中进行多种不同的运算操作,VB给种运算操作都规定有固定的求值顺序,这个求值顺序就是运算符的优先顺序。

各种运算符的优先顺序如表4-3所示。

表4-3运算符的优先顺序优先顺序运算符类型运算符1算术运算符(指数运算)2-(负数运算)3*,/(乘除运算)4(整数除法)5Mod(求余数运算)6+,-(加减运算)7&,+(字符串连接运算)8关系运算符=,=9布尔运算符Not(非运算)10And(与运算)11Or,Xor(或运算,异或运算)说明:

同级运算按照它们从左到右出现的顺序进行计算。

可以用括号改变优先顺序,强令表达式的某些部分优先执行。

括号内的运算总是先优于括号外的运算,在括号内,运算符的优先顺序不变。

例4-1设变量x=4,y=-1,a=7.5,b=-6.2,求表达式x+ya+bAndNotya+bAndNoty(a+b)And(Not(ya+bAndNotya+bAndNoty(a+b)and(not(y(a+b)And(Not(yb)EndSub运行程序后,单击窗体,在窗体上显示的结果如图4-4所示,说明VB程序在执行时,是严格按规定的优先顺序来执行各种运算操作的。

图4-4例4-1程序的运行情况4.3条件语句条件语句也可简称为If语句,是在VB中实现双分支选择结构程序最常用的语句,程序根据条件表达式的取值不同,而执行不同的操作。

4.3.1IfThen语句在VB中,IfThen语句有两种语法格式。

单行结构格式If条件表达式Then语句块结构格式If条件表达式Then语句块EndIf说明:

这里的“条件表达式”可以是逻辑表达式、关系表达式或数值表达式,如果以数值表达式作条件,VisualBasic将这个值解释为True或False:

一个为零的数值为False,而任何非零数值都被看作True。

当程序执行到该语句时,首先计算条件表达式的值,若条件表达式的值为True,则执行Then后面的语句或语句块,否则(条件表达式的值为False)直接执行下一语句(单行结构)或“EndIf”后的下一条语句(块结构)。

4.3.2IfThenElse语句IfThenElse语句也有两种语法格式。

单行结构格式If条件表达式Then语句1Else语句2块结构格式If条件表达式Then语句块1Else语句块2EndIf说明:

首先计算条件表达式的值,如果值为True,执行Then后面的语句1或语句块1;如果值为Fale,执行Else后面的语句2或语句块2。

在执行Then或Else之后的语句或语句块之后,会从一行语句或EndIf之后的语句继续执行。

例4-2判断某个年份是闰年的根据是年份数满足下述条件之一:

能被4整除,但不能被100整除的年份都是闰年。

能被400整数的年份是闰年。

试编写一个程序,提示用户输入一年份,然后显示输出该年份是否为闰年。

分析:

用变量x表示年份,判断x满足条件的逻辑表达式为xMod4=0AndxMod1000,判断x满足条件逻辑表达式为xMod400=0,这样判断x满足闰年年份的条件可以写为:

xMod4=0AndxMod1000OrxMod400=0根据分析画出流程序图4-5所示。

为了方便文字的书写,这里把第二章介绍的N-S图便通了一下。

图4-5判断闰年的流程图程序设计步骤如下:

创建一个工程,在窗体上添加一个命令按钮Command1。

图4-6例4-2程序的运行情况编写程序代码。

首先编写窗体的Load事件过程,设置控件的属性:

PrivateSubForm_Load()Form1.Caption=是闰年吗?

Command1.Caption=判断闰年EndSub然后编写Command1的Click事件过程,判断输入的年份是否是闰年。

代码如下:

PrivateSubCommand1_Click()DimxAsIntegerx=Val(InputBox(请输入一个年份:

年份输入框)IfxMod4=0AndxMod1000OrxMod400=0ThenMsgBoxStr(x)+是闰年,闰年判断输出框ElseMsgBoxStr(x)+不是闰年,闰年判断输出框EndIfEndSub程序运行后,单击命令按钮“判断闰年”,弹出输入对话框,输入年份,弹出输出对话框,说明该年份是否为闰年,如图4-6所示。

例4-3输入三个数,将它们从大到小排序。

创建一个工程,在窗体上添加5个标签Label1Label5,4个文本框Text1Text4和一个命令按钮,设置控件属性,程序界面如图4-7所示。

图4-7例4-3程序的运行情况编写程序代码。

编写命令按钮的单击事件过程,实现对文本框Text1Text3输入的三数进行排序,把排序的结果在文本框Text4中输出,代码如下:

PrivateSubCommand1_Click()DimaAsSingle,bAsSingle,cAsSinglea=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)IfabThentmp=a:

a=b:

b=tmp把a、b中的大数交换到a中IfacThentmp=a:

a=c:

c=tmp把a、c中的大数交换到a中Ifb=0,1+x,1-2*x)Text2.Text=yEndSub图4-9例4-4程序的运算情况本例用函数IIf()实现了二分支选择程序的操作,极为简捷。

4.3.4条件语句嵌套及多分支条件语句为了在程序中实现多分支选择结构,在VB中可以嵌套使用If语句,以及带ElseIf块的If语句,以方便处理一些较复杂的编程问题。

1.If语句的嵌套在If语句的语句块中含有If语句称为If语句嵌套,格式如下:

If条件表达式1ThenIf条件表达式2ThenEndIfEndIf说明:

在VisualBasic中,分支结构的嵌套层数没有限制。

按一般习惯,为了使分支结构更具可读性,总是用缩排方式(锯齿型)书写分支结构的代码正文部分。

对于多行结构的If语句要保证IfEndIf配对出现。

多个If嵌套时,If与EndIf是由里向外层层配对的。

例4-4根据不同的时间段发出问候语,如中午12点前显示“早上好!

”,下午18点前显示“下午好!

”,晚上18点以后显示“晚上好!

”。

本例采用创建工程后的默认用户界面,利用窗体Load事件,采用Print方法直接在窗体上输出问候语。

程序代码如下:

PrivateSubForm_Load()DimhAsIntegerMe.Showh=Hour(Time)Me.FontSize=30Me.BackColor=RGB(255,255,0)Me.ForeColor=RGB(255,0,0)Ifh12ThenPrint早上好!

ElseIfh0ThenText2.Text=1ElseIfx=0ThenText2.Text=0ElseText2.Text=-1EndIfText1.SetFocusText1.SelStart=0Text1.SelLength=Len(Text1.Text)EndSub运行程序,在左边的文本输入一个数,单击“求符号函数值”按钮,则在右边的文本框中显示出符号函数的值。

在本例中,使用带ElseIf的If嵌套语句简捷地实现了三分支选择结构程序。

类似地,可以方便地实现更多分支的选择结构程序。

例4-6输入学生成绩单(百分制),判断该成绩的等级(优、良、中、及格、不及格)。

创建应用程序的用户界面和设置对象属性。

在窗体上画两个标签Label1和Label2,一个文本框Text1,一个命令按钮Command1,程序界面如图4-12所示。

图4-12例4-6程序的运行情况编写程序代码。

首先编写窗体的Load事件,设置控件的有关属性,其代码为:

PrivateSubForm_Load()Me.Caption=判定成绩等级Me.ShowLabel1.AutoSize=TrueLabel1.Caption=输入成绩:

Label2.BorderStyle=1Label2.Caption=成绩的等级为:

Text1.Text=Text1.SetFocusCommand1.Caption=判断EndSub然后编写命令按钮Command1的Click事件过程,实现在文本框Text1中输入成绩,单击命令按钮后,判断输入成绩的等级,并通过标签Label2显示判断的结果。

其代码如下:

PrivateSubCommand1_Click()DimScoreAsInteger,TempAsStringTemp=成绩的等级为:

Score=Val(Text1.Text)IfScore0ThenLabel2.Caption=输入的成绩出错ElseIfScore60ThenLabel2.Caption=Temp+不及格ElseIfScore70ThenLabel2.Caption=Temp+及格ElseIfScore80ThenLabel2.Caption=Temp+中ElseIfScore90ThenLabel2.Caption=Temp+良ElseIfScore=100ThenLabel2.Caption=Temp+优ElseLabel2.Caption=输入的成绩出错EndIfText1.SetFocusText1.SelStart=0Text1.SelLength=Len(Text1.Text)EndSub运行程序,在文本框中输入成绩,单击“判断”按钮,即可在标签中看到相应的等级。

本例代码应用带ElseIf的If语句嵌套简洁地实现了7分支选择结构程序。

4.4情况选择语句SelectCase在VB程序中,除了应用If语句嵌套实现多分支选择外,还可以使用更为方便的情况选择语句SelectCase实现多分支选择结构。

用SelectCase实现的多分支选择结构操作的流程,可以用图4-13来描述,其特点是:

程序顺序测试条件1、条件2、,执行第1个条件为真的操作块,然后执行该结构之后的操作。

如果所给各条件都为假,则执行“其他”对应的操作块,随后执行该结构之后的操作。

图4-13多条件多分支选择结构的流程图SelectCase语句也称为情况语句,其语法格式为:

SelectCase测试表达式Case取值列表1语句块1Case取值列表2语句块2CaseElse语句块nEndSelect说明:

SelectCase情况语句的执行过程:

依次检测各Case子句中的“取值列表1”、“取值列表2”、“取值列表n”,确定哪一个Case子句中的“取值列表”与“测试表达式”的值匹配,一旦遇到某个Case子句中的“取值列表”与之匹配便终止测试;程序执行“取值列表”与“测试表达式”匹配的Case子句中的语句块;跳过随后的所有Case子句,执行EndSelect之后的程序。

如果没有检测到与“测试表达式”匹配的“取值列表”,在CaseElse子句存在的情况下,程序执行其随后的语句块n,若没有CaseElse子句,则放弃所的Case子句,执行EndSelect之后的程序。

“测试表达式”为必要参数,是任何数值表达式或字符串表达式。

在Case子句中,“取值列表”为必要参数,是“测试表达式”可能取值的列表,用来测试其中的值是否与“测试表达式”的值匹配。

“取值列表”的格式有以下三种:

一组用逗号分隔的数值或字符串表达式的列表:

Case表达式1,表达式2,各表达式取值之间是逻辑“Or”关系,在程序执行时,任何一个值与“测试表达式”的值相等,程序都执行该Case子句之后的语句块。

例如:

Case1,3,5“测试表达式”值等于1、3、5中的任何一个数,程序都会执行随后的语句块。

使用To指定“取值列表”的取值范围:

Case低值表达式To高值表达式只要“测试表达式”的值在指定的低值与高值之间,程序便执行该Case子句之后的语句块。

例如:

Case30To70“测试表达式”的值满足“30测试表达式70”,程序执行该Case子句后的语句块。

使用Is关系表达式,指定“测试表达式”值要满足的条件:

CaseIs关系运算符表达式这里的Is就是指的“测试表达式”,检试“测试表达式”是否满足该关系,即关系表达式的值为True,程序执行该Case子句后的语句块。

在编写程序时,可以不书写Is,只书写关系运算符和表达式,光标一旦离开该行,VisualBasci会自动加上Is。

例如:

CaseIs10“测试表达式”的值小于10,程序执行该Case子句后的语句块。

例4-7用SelectCase语句来实现便4-6程序中的多分支选择功能。

程序的用户界面保持不变,只重写Command1的Click事件过程,代码如下:

PrivateSubCommand1_Click()DimScoreAsInteger,TempAsStringTemp=成绩的等级为:

Score=Val(Text1.Text)SelectCaseScoreCaseIs0Label2.Caption=输入的成绩出错CaseIs60Label2.Caption=Temp+不及格CaseIs70Label2.Caption=Temp+及格CaseIs80Label2.Caption=Temp+中CaseIs90Label2.Caption=Temp+良CaseIs=100Label2.Caption=Temp+优CaseElseLabel2.Caption=输入的成绩出错EndSelectText1.SetFocusText1.SelStart=0Text1.SelLength=Len(Text1.Text)EndSub程序运行情况与例4-6相同。

例4-8某航空公司规定在旅游的旺季79月份,如果订票数超过20张,票价优惠25%,20张以下,优惠15%;在旅游的淡季15月份、10月份、11月份,如果订票数超过20张票价优惠50%,20张以下,优惠30%;其他情况一律优惠20%。

设计程序,根据月份和订票张数决定票价的优惠率。

分析:

假设输入的月份为m,票数为n,优惠率为r,可以为程序画出如图4-14的流程图。

图4-14计算票价优惠率的流程图创建一个工程,在窗体上添加四个标签Label1Label4,两个文本框Text1和Text2,一个命令按钮Command1,设置有关的属性,调整各控件的位置及大小,程序界面如图4-15所示。

图4-15例4-8程序的运行情况编写程序代码。

根据流程图,编写命令按钮Command1的Click事件过程,计算票价的优惠率,其代码为:

PrivateSubCommand1_Click()DimmAsInteger,nAsInteger,rAsIntegerm=Val(Text1.Text)n=Val(Text2.Text)SelectCasemCaseIs=20Thenr=50Elser=30Case7To9Ifn=20Thenr=25Elser=15CaseElser=20EndSelectLabel4.Caption=所订机票的优惠率为:

&r&%Text1.SetFocusEndSub为了程序操作更加方便,再增加如下代码。

窗体的Load事件过程:

PrivateSubForm_Load()Me.ShowText1.Text=Month(Date)默认值为当前月份Text1.SetFocusEndSub文本框Text1的GotFocus(获得焦点)事件过程:

PrivateSubText1_GotFocus()Text1.SelStart=0选中所有文本,光标在起始位置方便输入月份Text1.SelLength=Len(Text1.Text)EndSub文本框Text1的KyePress(按键)事件过程:

PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then在Text1按回车光标跳到Text2IfText1.Text0AndText1.Text0ThenLabel4.Caption=准备计算机票的优惠率。

Command1.SetFocusElseLabel4.Caption=输入的机票张数出错!

Text2.SetFocusText2.SelStart=0Text2.SelLength=Len(Text2.Text)EndIfEndIfEndSub程序运行后,先输入月份后按回车键,后输入机票张数后回车键,最后再按回车键,便完成计算,输出机票优惠率,如图4-15所示。

随后又可以进入下一轮的输入数据、计算优惠率的操作。

4.5选择控件应用程序常需要提供选项让用户选择,如选择“是”或“否”。

VB提供的单先按钮和复选框可以为用户提供简单的、事先准备好的选项。

4.5.1单选按钮单选按钮(OptionButton)主要用于多种选项中选择一项的情况。

它是一个标有文字说明的圆圈“”,选中它后圆圈中出现一个黑点;没有选中时,圆圈中间的黑点消失。

单选按钮必须成组出现,用户在一组单选按钮中必须选择一项,并且最多只能选择一项。

参看图4-16。

1.常用属性Caption属性:

设置单选按钮边上的文本标题(说明)。

默认值为Option1,Option2,。

Alignment属性:

决定OptionButton控件中的文本与控钮的位置关系。

该属性取值为:

vbLeftJustify0文本在右边,控件钮在左边(缺省值)vbRightJustify1文本在左边,控件钮在右边Value属性:

返回或设置OptionButton控件的选择状态,该属性为一逻辑值:

True表示已选择该按钮False表示没有选择该按钮(缺省值)如果在代码中设置Value属性值为True将触发活该按钮的Click事件。

Style属性:

设置单选按钮的外观,在程序运行时是只读的,只能在设计时设置,其值为:

VbButtonStandard0标准方式,显示为带标签的选项按钮(缺省的)VbButtonGraphical1图形方式,显示为上下切换的按钮(表示选中与否)2.事件单选按钮可以接收Click事件。

当程序运行时单击单选按钮,或在代码中改变单选按钮的Value属性值(从False改为True),将触发Click事件。

在应用程序中可以创建

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1