第四章选择结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

4.1条件表达式在程序设计中,经常需要根据某种条件决定选择某一语句的执行。在Delphi中,提供两种条件语句,即如果(IF)语句和分情形(CASE)语句。前者从二者选一,后者从多个分支中选一在条件语句中作为判断依据的表达式称为“条件表达式”,条件表达式的取值为布尔值:真(true)或假(false)。布尔型数据属于顺序类型,false的序数为0,true的序数为1。根据“条件”的简单或复杂程度,条件表达式分为:关系表达式布尔表达式。4.1.1关系运算符与关系表达式关系表达式是指用关系运算符将两个表达式连接起来的式子,关系运算符又称为比较运算符,用来对两个表达式的值进行比较,比较的结果是一个布尔值,这个结果就是关系表达式的值。1、关系运算符Delphi提供九种关系运算符见表:运算符名称例子或说明运算符名称例子或说明〈小于54值为:False〈〉不等于1+24值为:True〈=小于或等于3=4值为:True〈=包含于用于集合运算〉大于10值为:True=包含用于集合运算=大于或等于'aa'='ab'值为:Falsein属于用于集合运算=等于1+2=4值为:False说明:(1)关系运算符两侧可以是数值表达式、字符表达式或日期表达式,也可以是作为表达特例的常量、变量或函数。但数据类型必须一致。(2)关系运算符的运算级别相同。2、关系表达式关系表达式的格式为:〈表达式1〉〈关系运算符〉〈表达式2〉[〈关系运算符〉〈表达式3〉]说明:(1)关系表达式的运算次序为:先分别求出关系运算符两侧表达式的值,然后再把二者进行比较,二者的关系若与关系运算符指示的一样,则为真(true),否则为假(false)。(2)〈关系运算符〉两边的表达式类型应是相容达到标准数据类型或顺序类型。(3)数值型数据按其数值大小进行比较(4)字符型的数据按其AscII码值进行比较。在比较两个字符串时,首先比较两个字符串的第一个字符,其中ASCII码值较大的字符串所在的字符串大,如果第一个字符相同,则比较第二个,……,依此类推。常见字符串值的大小如下:空格'0'…'9''A'…'Z''a'…'Z'任何汉字(5)顺序类型数据的比较按照其序数进行比较。(6)数学不等式:a≤x≤b,在Delphi中不能写成a=x=b。4.1.2布尔运算符与布尔表达式对于较复杂的条件,必须使用布尔表达式。布尔表达式是指用布尔运算符连接若干关系表达式或布尔值而成的式子。布尔表达式的值也是一个布尔值。Delphi提供了四种布尔运算符:And、Or、Not、Xor见表:运算符名称例子说明And与(45)and(34)值为:False,两个表达式的值均为真,结果才真,否则为假。Or或(45)or(34)值为:True,两个表达式中只要有一个为真,结果为真Not非Not(10)值为:False,由真变假或由假变真,进行取“反”操作Xor异或如果两个布尔表达式不同则为真说明:(1)布尔运算符两侧若为数值数据,则将数值数据转换为二进制数(补码形式)进行按位运算(2)布尔运算真值表:Not由真变假,由假变真And对两个布尔值进行比较,如果两个值均为真,则结果为真,否则为假Or对两个布尔值进行比较,如果其中一个值为真,则结果为真,只有两个值都为假时,结果为假abaAndbaOrbNotaaXorbTrueTrueTrueTrueFalseFalseTrueFalseFalseTrueFalseTrueFalseTrueFalseTrueTrueTrueFalseFalseFalseFalseTrueFalse4.1.3运算符的优先顺序运算符的优先顺序见表:说明:(1)同级运算按照它们从左到右出现的顺序进行计算。(2)可以用括号改变优先顺序,强令表达式的某些部分优先进行。(3)括号内的运算总是优先于括号外的运算,在括号内,运算符的优先顺序不变。【例4-1】:判断某个年份是闰年的根据是年份满足下述条件之一:(1)能被4整除,但不能被100整除的年份都是闰年;(2)能被100整除,又能被400整除的年份都是闰年。解:令y表示年份,判断是否满足(1)的布尔表达式是:(ymod4=0)and(ymod1000)判断是否满足(2)的布尔表达式是:(ymod100=100)and(ymod400=0)两者取“或”即得判断闰年的布尔表达式:(ymod4=0)and(ymod1000)or(ymod100=100)and(ymod400=0)4.1.4求值方式在Pascal中对由and和or组成的表达式支持两种求值方式:完全求值和部分求值。完全求值就是对表达式中每一个运算对象都进行运算,不管是不是已经获得了结果。部分求值则是严格按照从左到右进行运算,如果已经判明了表达式的结果就立刻终止运算。【例4-2】设整型变量i和j的值分别为2和1,布尔型变量b的值为true,计算表达式的值:注意:由于关系运算符的优先级最低,因此,当计算一个表达式或括在括号内的表达式时,根据表达式的语法,最后只允许出现一个关系运算符。如,不允许出现:pq=r的形式。当p、q、r都是算术型时,应写成:(pq)and(q=r)在Delphi中编译开关{$B}控制两种求值方式的选取,缺省时为{$B-},即采用部分求值方式。若把该开关设计设置为{$B+},即采用完全求值方式4.2If语句If语句又称为条件语句,是最常用的单条件选择结构:If语句分为两种:简单条件语句复合条件语句1.if语句语法If〈条件〉then〈语句1〉[Else〈语句2〉];2.if语句语义判定布尔表达式,若为True执行Then后的语句,否则执行Else后的语句(二者取一)。当无ELSE部分时,若布尔表达式为真,执行THEN后的语句,否则执行该条件语句的下一语句,其中IF、THEN、ELSE是保留字。其语义可用图表示如下:说明:(1)〈条件〉可以是关系表达式或布尔表达式。若〈条件〉为真,则执行〈语句1〉,否则执行〈语句2〉。(2)因为If..then..Else语句是一个完整的语句,因此在保留字之前没有分号。(3)〈语句〉可以是简单语句,也可以是复杂语句。4.2.1简单条件语句简单条件语句中不包含其他的条件语句。【例4-3】:输入X,计算Y的值。其中:【例4-4】:编辑框PasswordChar的属性可以隐蔽用户通过键盘输入的字符,常用来编写检查用户口令的程序【例4-5】利用输入框函数输入3个不同的数,将他们从大到小排序【例4-3】:输入X,计算Y的值。其中:设计步骤:(1)、应用程序用户界面的建立与对象属性设置如下图。(参照第3章的方法)(2)、程序代码编写:按钮Button1的OnClick事件代码:procedureTForm1.Button1Click(Sender:TObject);varX,Y:Double;BeginX:=StrToFloat(Edit1.Text);If(X=0)thenY:=X*X+2*XelseY:=1-2*X;Edit2.Text:=FloatToStr(Y);Edit1.SetFocus;end;程序下载【例4-4】:编辑框PasswordChar的属性可以隐蔽用户通过键盘输入的字符,常用来编写检查用户口令的程序,如下图:(1)、设计步骤:应用程序用户界面的建立与属性设置如下图。对象属性属性值说明GroupBox1Caption请输入口令:Edit1Text清空PasswordChar*只显示字符“*”Button1Caption确定按钮的标题DefaultTruePanel1BevelInnerBvLowered凸起BevelOuterBvRaised凹上BorgerWidth15两个斜面之间的宽度(2)、编写程序代码:按钮Button1的Onclick事件代码:procedureTForm1.Button1Click(Sender:TObject);beginIfLowerCase(Edit1.Text)='abcd'thenPanel1.Caption:='欢迎使用本系统'elsePanel1.Caption:='对不起,口令错!';Edit1.SelStart:=0;Edit1.SelLength:=Length(Edit1.Text);end;编写编辑框Edit1的Onchange事件代码,使得改变编辑框的输入时,自动清除面板中的内容:procedureTForm1.Edit1Change(Sender:TObject);beginPanel1.Caption:='';end;程序下载【例4-5】利用输入框函数输入3个不同的数,将他们从大到小排序设计要求:分析:设3个数分别为a,b,c(1)先将a与b比较,把较大者放入a中,小者放入b中(2)再将a与c比较,把较大者放入a中,小者放入c中,此时a为三者中的最大者(3)最后将b与c比较,把较大者放入b中,小者放入c中,此时a,b,c已由大到小顺序排列。设计步骤:应用程序用户界面的建立与属性设置如下图。对象属性属性值说明Button1Caption依次输入3个整数按钮的标题DefaultTruePanel1BevelInnerBvLowered凸起BevelOuterBvRaised凹上BevelWidth2斜面的宽度BorgerWidth15两个斜面之间的宽度Label1AutoSizeFalseCaption标签的内容Font.Name隶书字体名称Font.Size22字体大小WordWrapTrue折行(2)、编写程序代码:按钮Button1的Onclick事件代码:procedureTForm1.Button1Click(Sender:TObject);vara,b,c,d:integer;p:string;begina:=StrToInt(InputBox('输入框','请输入第一个数:','0'));b:=StrToInt(InputBox('输入框','请输入第二个数:','0'));c:=StrToInt(InputBox('输入框','请输入第三个数:','0'));ifbathenbegind:=a;a:=b;b:=d;end;ifcathenbegind:=a;a:=c;c:=d;end;ifcbthenbegind:=c;c:=b;b:=d;end;p:=Format('三个数从大到小依次是:'+#13+'%d,%d,%d',[a,b,c]);Label1.Caption:=p;end;4.2.2复合条件语句如在If语句格式中的〈语句1〉或〈语句2〉本身又是一个语句,则称为If语句的嵌套。又称为复合条件句。【例4-6】:在【例4-4】中利用Tag属性计数,控制口令输入的次数。【例4-8】:某百货公司为了促销,采用购物打折的优惠办法:每位顾客一次购物:(1)在1000元以上者,按九五折优惠。(2)在2000元以上者,按九折优惠。(3)在3000元以上者,按八五折优惠。(4)在5000元以上者,按八折优惠。输入购物款数,计算并输出优惠价。【例4-6】:在【例4-4】中利用Tag属性计数,控制口令输入的次数。程序流程图:如果Edit1.Text='abcd'真输出:欢迎使用假Tag:=Tag+1如果Tag=3真1、关闭编辑框,2、输出:对不起您无权限使用假输出:口令错程序设计界面与属性设置与例4-4相同,只需修改按钮的事件代码:procedureTForm1.Button1Click(Sender:TObject);beginIfLowerCase(Edit1.Text)='abcd'thenPanel1.Caption:='欢迎使用本系统'elsebeginEdit1.Tag:=Edit1.Tag+1;ifEdit1.Tag=3thenbeginPanel1.Caption:='对不起,对不起您无权使用';GroupBox1.Enabled:=False;endelsePanel1.

1 / 54
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功