第04章 选择结构程序设计_第1页
第04章 选择结构程序设计_第2页
第04章 选择结构程序设计_第3页
第04章 选择结构程序设计_第4页
第04章 选择结构程序设计_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 选择结构程序设计 本章主要内容1. 条件表达式2. 条件语句3. 开关语句4. 条件语句的嵌套选择结构常用下面两种图来描述图4-1 N-S图 图4-2 程序流程图 说明: 当条件P为真(True)时,执行语句块1 当条件P为假(False)时,执行语句块2条件表达式 在条件判断语句中,作为判断依据的表达式称为条件表达式,条件表达式的取值通常为逻辑(Boolean)型。常见的条件表达式有两类:关系表达式和逻辑表达式。关系表达式 由关系运算符将表达式连接起来的式子称为关系表达式,关系运算符也称比较运算符,用于对两个相同数据类型表达式值的大小进行比较,被比较的数据是数值型、字符型、日期型,不

2、能是布尔型。 关系表达式的格式为: 注意: 1日期型数据的比较,是将其看成“yyyymmdd”形式的8位整数进行比较。 2字符型数据的比较,是按字符的ASCII码值逐个字符进行比较的,在比较两个字符串的大小时,首先比较第一个字符的ASCII码值,ASCII码值达的字符串为大,若第一个字符相同,则比较第二个,以此类推。只有在两个字符串的所有字符都相同(长度也相同)的情况下,这两个字符串才相等。 3常见字符的排序表如下: 空格数字大写字母小写字母汉字 汉字字符的大小是按区位码的大小排序,常用字与拼音顺序一致,显然”Beijing ”shanghai”,也就有“北京”“上海” 4不要对单精度或双精度

3、的数据进行”=”的比较,例如:sqr(2)2=2结果为:False,从数学的角度来看,它是个恒等式,但是在计算机进行计算时,sqr(2)是个近似数,有很小的一点误差,就造成了“不等”的结果。逻辑表达式 由逻辑运算符将关系表达式连接起来的表达式称为逻辑表达式,逻辑运算符也称布尔运算符。常用的逻辑运算符有:not、and、or。对于比较复杂的条件要使用逻辑表达式,例如:用逻辑表达式代替条件的嵌套会使程序的逻辑结构更加清晰,容易理解。 逻辑表达式的格式为: 下面给出一些逻辑表达式: 1x5 and x=10 相当于数学中的5x10 2x5 相当于数学中的|x|5 3x0 and x mod 5=0

4、自然数中的5的倍数 4x0 and not x mod 3=0自然数中不能被3整除的数 5a,b,c能构成三角形的条件: (a0 and b0 and c0)and(a+bc and a+cb and b+ca) 6二次方程ax2+bx+c=0存在实根的条件: a0 and b*b-4*a*c=0 7y(日期型)是10月1日: month(y)=10 and day(y)=1 8条件1:y能被4整除,但不能被100整除: t1=y mod 4=0 and y mod 1000 条件2: y能被100整除,又能被400整除: t2=y mod 100 and y mod 400=0 判断y是否闰

5、年的条件是:t1 or t2 9条件1:5门课s1,s2,s3,s4,s5 的总分不低于450 t1=s1+s2+s3+s4+s5=450 条件2:每门课的得分都在88以上(含88分) t2=s1=88 and s2=88 and s3=88 and s4=88 and s5=88 条件3:前3门(主课)不低于90分,其他不低于80分 t3=s1=95 and s2=95 and s3=95 and s4=80 and s5=80 判断是否优秀学生的条件是:t1 or t2 or t3单行结构条件语句和IIf函数 1单行结构条件语句 单行结构条件语句比较简单,其格式如下: If 条件 Then

6、 then部分 Else else部分 该语句的功能是:如果“条件”为True,则执行“then部分”;否则执行“else部分”。 说明: (1)在上面的格式中,“条件”是一个关系表达式或逻辑表达式。程序根据这个表达式的值(True或False)执行相应的操作。“then部分”和“else部分”的操作完全相同,即: 语句|GoTo 行号 在这里,“语句”是一个或多个Visual Basic语句(包括If语句),当含有多个语句时,各语句之间用冒号隔开。“行号”是一个标识符,通过GoTo语句把控制转移到“行号”所在的程序行。 (2)If语句中的“else部分”是可选的,当省略该项时,If语句简化为

7、: If 条件 Then then部分 它的功能是:如果“条件”为True,则执行“then部分”;否则执行下一行程序。例如: If x=y Then Print “x=y” Print “x=y,则执行Print “x=y”;否则执行下面的语句,即Print “x=y Then Print “x=y” Else Print “x= 0 Then y = 1 + x Else y = 1 - 2 * x Print x=; x; y=; y End Sub 2IIf函数 IIf函数可用来执行简单的条件判断操作,它是“IfThenElse”结构的简写版本,IIf是“Immediate If”的缩

8、略。 IIf函数的格式为: Result= IIf(条件,True部分,False部分) 在这里,“Result”是函数的返回值,“条件”是一个关系表达式。当“条件”为真时,IIf函数返回“True部分”,而当“条件”为假时IIf函数返回“False部分”。“True部分”或“False部分”可以是表达式、变量或其它函数。注意:IIf函数中的3个参数都不能省略,而且要求“True部分”、“False部分”及结果变量的类型保持一致。 例题4.3(用IIf函数重做例4.1) 设有如下函数,输入x的值,求y的值。 Private Sub Command1_Click() Dim x As Integ

9、er, y As Integer x = Val(InputBox(输入x的值) Print IIf(x = 0, x= & x & y= & 1 + x, x= & x & y= & 1 - 2 * x) End Sub块结构条件语句 块结构条件语句格式: If 条件 Then 语句块1 条件为真时,执行语句块1 Else 语句块2 条件为假时,执行语句块2 End If 块结构条件语句的功能是:如果“条件”为True,则执行“语句块1”;否则执行“语句块2” 说明: (1)在块形式中,If语句必须是第1行语句。If 块必须以End If一个语

10、句结束。 (2)当程序执行到If块时,首先测试“条件”。如果“条件”为True,则执行Then之后的语句;如果条件为False,并且有Else子句,则程序会执行Else部分的语句。 (3)这里的“语句块”可以是一个语句,也可以是多个语句。当有多个语句时,可以分别写在多行里,若写在一行中,则各语句之间用冒号隔开。 (4)Else子句是可选的。 总之,与单行条件语句相比,块结构条件语句有很多优点。例如:块形式比单行形式提供了更好的结构和灵活性,它允许条件分支跨越数行。同时,用块形式可以测试更复杂的条件。块形式是程序的结构按逻辑引导,而不是把多个语句放在一行中。此外,使用块形式的程序一般容易阅读、维

11、护和调试。任何单行形式的条件语句都可以改写成块形式。 例4.4 重用例4-1输入x的值,求y的值。 Private Sub Form_Click() Dim x As Single, y As Single x = Val(InputBox(输入x的值) If x=0 then y=1+x else y=1-2*x End if Print x=; x; y=; y End Sub 例题4.5 求一个实数x的算术平方根。 Private Sub Command1_Click() Dim x As Single x = Val(InputBox(输入x的值) If x = 0 Then Prin

12、t Sqr(; x; )=; Sqr(x) Else Print x; 没有实数根! End If End Sub条件语句的嵌套 如果在条件语句的Then下的语句块1中或在Else下的语句块2中还含有条件语句,则称其为条件语句的嵌套。在程序设计中常用凹进的方法来表示嵌套的层次,一般格式如下所示:第一种格式: If Then If Then Else End If Else End If 第二种格式 If Then Else If Then Else End If End If 说明:实际上,在所嵌套的条件语句中还可以含有条件语句,如果在所嵌套的条件语句中还可以行有条件语句,这就构成了条件语句的

13、多层嵌套,但是嵌套是有限制的。条件语句嵌套实例 例题4.6 从输入框输入一名学生的成绩(100分为满分),在消息框输出他的成绩等级,90分以上为A等,8089为B,7079为C, 6069为D,60分以下为E等. 程序代码及运行界面: Private Sub Command1_Click() Dim grade As Single, result As String grade = Val(InputBox(请输入成绩:, 成绩输入) If grade 100 Or grade = 90 Then result = A Else If grade = 80 Then result = B El

14、se If grade = 70 Then result = C Else If grade = 60 Then result = D Else result = E End If End If End If End If MsgBox “该生的成绩等级为: + result, , 成绩等级 End Sub Private Sub Command2_Click() End End Sub 例题 某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物 (1)在1000元以上者,按九五折优惠; (2)在2000元以上者,按九折优惠; (3)在3000元以上者,按八五折优惠; (4)在500

15、0元以上者,按八折优惠。 编写程序,输入购物款数,计算并输出优惠价。 (1)建立应用程序界面:选择“新建”工程,进入窗体设计器,在窗体上增加1个命令按钮控件Command1、两个标签控件Label1Label2,两个文本框控件Text1Text2。 设计界面如图4-4所示。 (3)程序代码如下: Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x 1000 Then y = x Else If x 2000 Then y = 0.95 * x Else If x 3000 Then

16、 y = 0.9 * x Else If x 100 Or grade = 90 Then result = A ElseIf grade = 80 Then result = B ElseIf grade = 70 Then result = C ElseIf grade = 60 Then result = D Else result = E End If MsgBox 该生的成绩等级为: + result, , 成绩等级 End Sub Private Sub Command2_Click() End End Sub多分支条件选择语句结构 在Visual Basic中,多分支结构程序通过

17、多情况选择语句来实现。多情况选择语句也叫Select Case语句或Case语句,它根据一个表达式的值,在一组相互独立的可选语句序列中挑选要执行的语句序列。在多情况选择语句中,有很多成分语句,它是块形式条件语句的一种变形。 多情况选择语句的一般格式为: Select Case Case Case Case Case Else End Select 多情况选择语句以Select Case开头,以End Select结束。其功能时,根据“测试表达式”的值,从多个语句块中选择符合条件的一个语句块执行。说明: (1)多情况选择语句中含有多个参量,这些参量的含义分别是: 1)测试表达式:可以是数值表达式

18、或字符串表达式,通常为变量或常量。 2)语句块1、语句块2:每个语句块由一行或多行合法的Visual Basic语句组成。 3)表达式列表1、表达式列表2:称为域值,可以是下列形式之一: 表达式,表达式。例如:Case 2,4,6,8 表达式 To 表达式。 例如:Case 1 To 5 Is关系运算表达式,使用的运算符包括: = =。 例如: Case Is=12;Case Isa+b “表达式列表”中的表达式必须与测试表达式的数据类型相同。 (2)多情况选择语句的执行过程是:先对“测试表达式”求值,然后测试该值与哪一个Case子句中的“表达式列表”相匹配。如果找到了,则执行与该Case子句

19、有关的语句块,并把控制转移到End Select后面的语句;如果没有找到,则执行与Case Else子句有关的语句块,然后把控制转移到End Select后面的语句。例如: Private Sub Form_Click() Dim v As String v = InputBox(enter data) Select Case v Case a Text1.Text = a Case b Text1.Text = b Case Else Text1.Text = good bye! End Select End Sub 为了运行上面的程序,应先在窗体上建立一个文本框。程序运行后,单机窗体,在输

20、入对话框中输入一个字符。如果输入“a”则在文本框中显示“a”;如果输入“b”则在文本框中显示“b”;输入“a” ,“b”以外的字符,则执行Case Else子句,在文本框中显示“good bye!”。因此对于上面的程序来说,共有3种不同的输出,每次运行只能输出一种。 (3)“表达式列表”由上面提到的3种形式,在具体使用时应注意以下几点: 1)关键字To用来指定一个范围。在这种情况下,必须把较小的值写在前面,较大的值写在后面,字符串常量的范围必须按字母顺序写出,例如: Case -5 To -1 Case “dsrk” To” kear” 2)如果使用关键字Is,则只能用关系运算符。例如: Ca

21、se Is20 and Is2,4,6,8,Is20 (4)Select Case语句与IfThenElse语句块的功能类似。一般来说,可以使用块形式的条件语句的地方,也可以使用多情况选择语句。例如下面两个程序的功能相同。 程序1: Private Sub Form_Click() Dim v As String v = InputBox(enter data) Select Case v Case 1 Text1.Text = one Case 2 Text1.Text = two Case 3 Text1.Text = three Case Else Text1.Text = must b

22、e integer from 1 to 3 End Select End Sub 程序2: Private Sub Form_Click() Dim v As String v = InputBox(enter data) If v = 1 Then Text1.Text = one ElseIf v = 2 Then Text1.Text = two ElseIf v = 3 Then Text1.Text = three Else Text1.Text = must be integer from 1 to 3 End If End Sub Select Case语句和块形式的IfThen

23、Else语句的主要区别是:Select Case语句只对单个表达式求值,并根据求值结果执行不同的语句块;而块形式的条件语句可以对不同的表达式求值,因而效率较高。 (5)如果同一个域值的范围在多个Case子句中出现,则只执行符合条件的第一个Case子句的语句块。 (6)在多情况选择语句中,Case Else 必须放在所有的Case子句之后。如果在Select Case结构中的任何一个Case子句都没有与测试表达式相匹配的值,而且也没有Case Else子句,则不执行任何操作。 (7)在不同的Case子句中指定的条件和相应的操作不能相互矛盾。例如: Select Case n Case 1 Pri

24、nt 1 Case 1 To 5 Print 2 End Select 当n的值为1时,既符合第一个Case子句中规定的条件,又符合第二个Case子句中规定的条件。在第一个Case子句中要求输出“1”,在第二个Case子句中要求输出“2”显然两者是矛盾的。这种情况下,尽管系统不会出现错误,但程序中不应该出现这种逻辑上的矛盾。单选按钮、复选框和框架 在应用程序中,有时候需要用户做出选择,为此,Visual Basic提供了单选按钮、复选框和框架。框 架 框架(Frame)是一个容器控件,用于将屏幕上的对象分组。可以把不同的对象放在一个框架中,框架提供了视觉上的区分和总体的激活屏蔽特性。 框架的属

25、性包括:Enabled、FontBold、FontUnderline、Height、Left、Top、Visible、Width。此外,Name属性用于在程序代码中标识一个框架,而Caption属性定义了框架的可见文字部分。 对于框架来说,通常把Enabled属性设置为True,这样才能保证框架内的对象是“活动”的。如果把框架的Enabled属性设置为False,则其标题将变为灰色,框架中的所有对象,包括文本框、命令按钮及其他对象,均被屏蔽 使用框架的主要目的是为了对控件进行分组,即把指定的控件放在框架中。为此,使用时必然有两种情况: 1先画出框架,然后再在框架内画出需要成为一组的控件,这样才

26、能使框架内的控件成为一个整体,和框架一起移动。 2有时需要将窗体上(不是框架内)的已有控件进行分组,并把它们放到一个框架中,可按下述步骤来做: (1)选择需要分组的控件。 (2)执行“编辑”菜单中的“剪切”命令(或按Ctrl+X键), 把选择的控件放入剪贴板中 (3)在窗体上画一个框架控件,并保持它为活动状态。 (4)执行“编辑”菜单中的“粘贴”命令(或按Ctrl+V键) 经过上述操作,可把所选择的控件放入框架,作为一个整体移动或删除。 为了选择框架内的控件,必须在框架处于非活动状态时按住Ctrl键,然后用鼠标画一个框,使这个框能框住要选择的控件。 实际中,如果窗体上有多个单选按钮时,如果选择

27、其中一个,其他单选按钮自动关闭。但是,当需要在同一窗体上建立几组相互独立的单选按钮时,则必须通过框架为单选按钮分组,使得在一个框架内的单选按钮为一组,每个框架内的单选按钮的操作不影响其他组的按钮。具体实例见后面单选按钮部分。单选按钮 在一组的多个选项中只允许选择其中的某一项时常使用单选按钮(OptionButton)表4-4 单选按钮的常用属性属性功能值Caption设置选项按钮的标题标题内容字符串Alingment设置标题位置0:默认值,居右侧;1:居左侧Value单选按钮是否选中的状态True或FalseEnabled能否对用户事件产生反应True或FalseStyle决定单选按钮的风格0

28、:默认值,标准; 1:图形Picture用于为单选按钮设置图形当Style属性为1时才有效 在使用Style属性时,应注意以下几点: Style属性是只读属性,只能在设计时使用。 当Style属性为0(默认值)时,被选中的按钮有一黑点,其选中状态由Value属性决定。 (3)当Style属性被设置为1时,可以用和属性分别设置不同的图标或位图,已表示为选定、选定和禁用。 (4)Style属性被设置为不同的值(0或1)时,其外观也是不一样的,当该属性为1时,控件的外观类似于命令按钮,但其作用于命令按钮是不一样的。 (5)当在属性窗口设置属性时,如果一组单选按钮中所有Value属性均为False,则

29、运行时程序会将第一个按钮的状态自动设置为True。 2单选按钮的常用事件与方法 常用的事件有:Click、DbClick、GotFocus、LostFocus、KeyDown、KeyUp、KeyPress、MouseDown、MouseUp、MouseMove等事件。 常用的方法有:SetFocus、Refresh方法。 3单选按钮的应用 例题4.12 通过单选按钮设置文本框中的字体。 设计步骤如下: (1)建立应用程序界面:选择“新建”工程,进入窗体设计器,在窗体上增加1个文本框控件Text1、1个框架控件Frame1。选中Frame1框架控件,在其中增加4个单选按钮控件Option1Opt

30、ion4。 设计界面如图4-6。 程序代码如下: Private Sub Option1_Click() Text1.FontName = 宋体 End Sub Private Sub Option2_Click() Text1.FontName = 黑体 End Sub Private Sub Option3_Click() Text1.FontName = 隶书 End Sub Private Sub Option4_Click() Text1.FontName = 幼圆 End Sub复选框 复选框(Checkbox)控件,可以实现在一组选项中同时选中多个选项,一般情况下被选中的选项的左

31、侧的复选框中会出现一个对号。 1复选框的常用属性 复选框的常用属性与单选按钮的类似,只是它的属性是数值型的,可以取0,1,2,用以表示复选框的三种执行状态:0表示为选中,1表示已选中,2也表示已选中,但现实灰色,用于表示用户不可修改其状态。 2复选框的常用事件与方法 复选框的常用事件与方法与单选按钮的常用事件与方法基本相同。 单选按钮和复选框都可以接收Click事件,但通常不对单选按钮和复选框的Click事件进行处理。当单击单选按钮或复选框时,将自动变换其状态,一般不需要编写Click事件过程。 例题4.14 设计程序实现文本框内内容的字形的选择。 设计步骤如下: (1)建立应用程序界面:选择

32、“新建”工程,进入窗体设计器,在窗体上增加1个文本框控件Text1、1个框架控件Frame1,选中Frame1框架控件,在其中增加3个复选框控件Check1Check3。 界面设计如图4-8。对象名属性设置说明Text1Text字形的选择设置文本框的内容Frame1Caption字形的选择设置框架的标题Check1Caption粗体复选框的标题Check 2Caption斜体复选框的标题Check 3Caption下划线复选框的标题上述所有控件字号小四设置字的大小 源程序代码: Private Sub Check1_Click() Text1.FontBold = True End Sub Private Sub Check2_Click() Text1.FontItalic = True End Sub Private Sub Check3_Click() Text1.FontUnderline = True End Sub 3综合题 例题4.15 设计一个个人资料输入窗口,使用单选按钮输入性别和民族,使用复选框输入个人爱好。 设计步骤如下: (1)建立应用程序界面。选择“新建”工程,进入窗体设计器,1个命令按钮Command1和5个框架控件。依次激活框架控件Frame1Frame5后,在其中分别增加: Frame1中:标签Label1、文本

温馨提示

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

评论

0/150

提交评论