控制结构与循环结构程序设计.ppt_第1页
控制结构与循环结构程序设计.ppt_第2页
控制结构与循环结构程序设计.ppt_第3页
控制结构与循环结构程序设计.ppt_第4页
控制结构与循环结构程序设计.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第五章 控制结构与循环结构程序设计,结构化程序设计的基本控制结构有3种: 顺序结构:程序中的每一步操作从上到下顺序执行; 选择结构:根据给定的条件,选择一个分支执行; 循环结构:根据给定的条件,重复执行。,5.1 选择控制结构,产生背景:需要根据给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。 在VB中,选择结构通过条件语句来实现。条件语句也称为IF语句,有两种格式,一种是单行结构,一种是块结构。,5.1.1 单行结构条件语句,格式:If 条件 Then 语句1 Else 语句2 功能:如果条件成立,执行语句1,然后执行If语句的下一条语句;如果有Else 语句2的可选部分,条件不成立时执行语句2,然后执行If语句的下一条语句;如果条件不成立且没有可选部分,则直接执行If语句的下一条语句。 举例: If ab Then Print “ab“ If a/3=int(a/3) Then Print “a能被3整除“ If a/3=int(a/3) Then Print “a能被3整除“ Else Print “a不能被3整除“ If Mpass Then Print “通过考试“,说明: 条件的结果是一个逻辑值,即真与假。如果一个变量的数据类型为布尔型,则根据要求可以直接在条件处写变量或者写“Not 变量”。 例如: 通过考试的人,打印“英语4级通过” If Mpass Then Print “英语4级通过“ 没通过考试的人,打印“英语4级未通过” If Not Mpass Then Print “英语4级未通过“,条件语句可以嵌套。(条件语句中的语句1和语句2都可以是条件语句) 例如: If x=0 Then If x0 Then y=1 Else y=0 Else y=-1 If x0 Then y=1 Else If x=0 Then y=0 Else y=-1 注意: 嵌套的正确性,每个Else语句都有与之相对应的If Then 语句。,5.1.2 块结构条件语句,格式: If 条件1 Then 语句块1 ElseIf 条件2 Then 语句块2 ElseIf 条件3 Then 语句块3 ElseIf 条件n Then 语句块n Else 语句块n+1 End If,功能:如果条件1成立,执行语句块1(语句块意为多条语句);条件1不成立,测试条件2,如果条件2成立,执行语句块2;一直这样执行下去,到最后一个条件n测试成立,执行语句块n,不成立执行语句块n+1。 说明: 在执行了Then或 Else后面的语句块之后,程序退出块结构条件语句,继续执行EndIf后面的语句。 语句块中的语句不能与Then放在同一行上,这也是块结构和单行结构条件语句的主要区别。 在块结构的条件语句中,Else子句的数量没有限制。 块结构条件语句中的ElseIf子句和Else子句都是可选的。 当有多个条件为True时,只能执行满足条件的第一个语句块,且执行完后跳出If结构。 块形式的条件语句也可以嵌套。,举例: 如果成绩大于等于60,显示成绩及格;否则,显示成绩不及格。,Private Sub Command1_Click() mcj = InputBox(“输入成绩“) mcj = Val(mcj) If mcj = 60 Then Print “成绩及格“ Else Print “成绩不及格“ End If End Sub,举例: 如果成绩大于100,显示“成绩错误”;在90-100之间,显示“成绩优秀”;80-89之间,显示“成绩良好”;60-79之间,显示“及格”;0-59之间,显示“不及格”。,Private Sub Command1_Click() mcj = InputBox(“输入成绩“) mcj = Val(mcj) If mcj 100 Then Print “成绩错误“ ElseIf mcj = 90 Then Print “成绩优秀“,ElseIf mcj = 80 Then Print “成绩良好“ ElseIf mcj = 60 Then Print “及格“ Else Print “不及格“ End If End Sub,5.1.3 IIf函数用来执行简单的判断操作,格式:result=IIf(条件,表达式1,表达式2) 功能:如果条件成立,返回表达式1的值,否则返回表达式2的 值。 说明: result是函数的返回值,“条件”是一个逻辑表达式。 IIf函数中的3个参数都不能省略,且要求表达式1、表达式2和结果变量的类型一致。,举例: 如果成绩=60,给变量赋值“及格”,否则赋值“不及格”。 Mchr=IIf(Mcj=60,“及格“,“不及格“) 如果成绩=90,给变量赋值“优秀”,如果成绩=60,给变量赋值“及格”,否则赋值“不及格”。 Mchr=IIf(Mcj=90,“优秀“,IIf(Mcj=60,“及格“,“不及格“),5.2 多分支控制结构-情况语句,产生背景:根据给定条件从多个分支路径中选择执行其中的一个。在VB中,多分支控制结构通过情况语句来实现。 格式:,Select Case 测试表达式 Case 表达式表列1 语句块1 Case 表达式表列2 语句块2 Case Else 语句块n End Select,功能:计算表达式的值,如果表达式的值和Case项中的值相等,则执行相应的语句体。执行完语句体后,执行End Select。如果没有合适的项,执行Case Else后面跟的语句体。 注意: 1、 Case后面的值(表达式表列1、2n)称为值域,可以是下列形式之一:,表达式,表达式,. 如果Select Case后的表达式的值是是上面表达式表中的一个值,进入此处。 例如:Case “讲师“,“副教授“,“教授“ 表达式1 To 表达式2 如果Select Case后的表达式的值是是上面两个表达式值之间的值,进入此处。 表达式1的值必须=60 错误的用法:Case Is=60 And Is=100 可以上述方法混用 例如:Case Is“L“,“S“,“Q“,“X“ To “Z“,Private Sub Command1_Click() Select Case Val(Text1.Text) Case 1 To 5 Label1.Caption = “工作日“ Case 6, 7 Label1.Caption = “休息日“ Case Else Label1.Caption = “错误“ End Select End Sub Private Sub Command2_Click() End End Sub,举例: 窗体上有一个文本框,输入1-5,标签框显示工作日,输入6-7,标签框显示休息日,输入其他为错误。,2、Select Case语句和IfThenElse语句的主要区别:, Select Case语句只对单个表达式求值,并根据求值结果执行不同的语句块,而块形式的条件语句可以对不同的表达式求值,因而效率较高。 3、当条件范围重叠时,例如:第一个case 的条件是Is1,第二个case 的条件是Is3,如果表达式的结果两个case都符合,只执行位置在前面的case里的命令。 4、当条件范围不重叠时,Case子句的顺序对执行结果没有影响,但 Case Else子句必须放在所有的Case子句之后。 5、如果Select Case结构中的任何一个Case子句都没有与测试表达式相匹配的值,而且也没有Case Else子句, 则不执行任何操作。 6、不同的Case子句中制定的条件和相应的操作不能相互矛盾。,5.3 For 循环控制结构,产生背景:一些问题并不复杂,但需要反复多次处理,用顺序结构的程序来处理比较繁琐,甚至难以实现。为此,VB提供了循环语句。 VB提供了3种不同风格的循环结构,包括: 计数循环(For-Next循环) 当循环(While-Wend循环) DO循环(Do-Loop循环),For循环也称为For-Next循环或计数循环,格式:For 循环变量=循环初值 To 循环终值 Step 循环步长 循环体 Exit For Next 循环变量 功能:以指定次数来重复执行一组语句。 参数说明如下: 循环变量:也称循环控制变量、控制变量或循环计数器。它是一个数值变量,但不能下标变量或记录元素。 初值:循环变量的初值,它是一个数值表达式。 终值:循环变量的终值,也是一个数值表达式。,步长:循环变量的增量,是一个数值表达式,可以是正数或负数,但不能为0。 循环体:在For语句和Next语句之间的语句序列,可以是一个或多个语句。 Exit For: 退出循环 Next:循环终端语句,在Next后面的“循环变量”与For语句中的“循环变量”必须相同。 注意:格式中的初值、终值、步长均为数值表达式,但其值不一定是整数,可以是实数。,执行过程如下: 第一步:循环变量赋循环初值。 第二步:如果循环步长0,测试循环变量初值是否大于循环终值;如果循环步长0,测试循环变量初值是否小于循环终值。步长默认为1。 是,转到Next的下一句运行。(退出循环) 否,运行循环体。 如果循环体中有Exit For语句,运行到此句,直接转向Next语句的下一句运行。(退出循环) 运行到Next语句,循环变量=循环变量+步长。 转到第二步开始处运行。(循环一次完成),注意: 步长为负时,循环变量每加一次步长,值变小。步长为零时,循环变量值不变,因此循环体内如果无Exit For 语句,则进入死循环。在设计时运行程序进入死循环可以使用Ctrl+Break,终止程序执行。 在For循环语句中,For 和 Next是一对语句,必须成对出现,缺一不可。 可以嵌套使用,但是循环变量名必须使用不同的变量名,而且不可以书写交叉的For循环语句。 例如:,下面属于错误的嵌套 For i=1 To 9 For j=1 to 9 Print i,j Next i Next j 正确的嵌套方式 For i=1 To 9 For j=1 to 9 Print i,j Next j Next i,当几个Next语句之间无任何其他语句时,可以合并成为一句,Next后面跟上所有的合并的语句中的循环变量名称,但顺序不能随便改动,变量名称之间用逗号分隔,且此处的循环变量不可以省略。例如上面程序最后的2个Next语句可以写成:Next j,i 当循环终值是一个变量时,在循环第一次运行时取走变量中的值,此变量中的值就不会再影响循环了,下面的程序,循环5次。,Private Sub Command1_Click() Mcs = 5 For i = 1 To Mcs Mcs = Mcs + 1 Print i, Mcs Next i End Sub,循环变量用来控制循环过程,在循环体内可以被引用和赋值。当循环变量在循环体内被引用时,称为“操作变量”,而不被引用的循环变量称为“形式变量”。 有些情况下,需要在循环变量到达终值前退出循环,这可以通过Exit For语句来实现,它可以出现在循环体的任何位置。但是, Exit For只能退出当前循环(它所在的循环)。 For-Next中的“循环体”是可选项,当该项缺省时, For-Next 执行空循环。,例:请计算n的阶乘。,Private Sub Command1_Click() a = Val(Text1.Text) m = 1 For i = 1 To a m = m * i Next i Label1.Caption = Trim(Text1.Text) + “的阶乘为“ + Str(m) End Sub,例:请计算1到n的连续求和,Private Sub Command1_Click() a = Val(Text1.Text) m = 0 For i = 1 To a m = m + i Next i Label1.Caption = “从1到“ + Trim(Text1.Text) + “的和为“ + Str(m) End Sub,5.4 当循环控制结构,产生背景:循环次数不固定,当满足条件时退出循环。(For循环解决不了这类问题) 格式: While 条件 语句块 Wend 功能:按照条件是否成立执行循环。操作如下: 第一步:测试条件。 第二步:当结果为真,执行语句块,执行完语句块,遇到Wend,转向While语句,重新到第一步测试条件,进行下一次循环;如果结果为假,转到Wend语句的下一句执行,结束循环。,说明: 对于循环次数有限但又不知道具体次数的操作,使用当循环。 While循环语句先对条件进行测试,然后再决定是否执行循环体。只有在条件成立时才执行循环体。如果条件从开始就不成立,则一次循环体也不执行。 如果条件总是成立,则重复执行循环体,容易出现死循环,所以循环体的执行,应该能使条件发生改变。 可以嵌套使用,每个Wend语句与离它最近的While语句配对。 当循环与For循环的区别: 当循环是以条件的结果为假来结束循环的。 For循环是执行指定的次数。,例:循环输入大于0的数据,如果是奇数,显示是奇数,否则显示是偶数;如果输入了“end”,退出。,Private Sub Command1_Click() a = Trim(UCase(InputBox(“输入=0的数据,end退出循环“) While a “END“ If Val(a) / 2 = Int(Val(a) / 2) Then Label1.Caption = a + “是偶数“ Else Label1.Caption = a + “是奇数“ End If a = Trim(UCase(InputBox(“输入=0的数据,end退出循环“) Wend End Sub,例:请输入大于3的数据,如果是素数,显示是素数,否则显示不是素数。,Private Sub Command1_Click() a = InputBox(“输入3的数据“) 接收数据 b = Int(Sqr(Val(a) flag = 0 标志 i = 2 起测数据 While i = b And flag = 0 If Val(a) Mod i = 0 Then flag = 1 不是素数,修改循环控制变量 i = i + 1 Wend Label1.Caption = IIf(flag = 1, a + “不是素数“, a + “是素数“) End Sub,5.5 Do循环控制结构,产生背景:既可以指定循环条件,也能够指定循环终止的条件。 格式1: Do While|Until 条件 语句块 Exit Do Loop 格式2: Do 语句块 Exit Do Loop While|Until 条件,格式1:Do While|Until 条件 语句块 Exit Do Loop,功能:按照条件是否成立执行循环。操作如下: 第一步:测试条件。 第二步:在While条件结果为真,或在Until条件结果为假,执行语句块。否则执行Loop语句的下一句。 执行完语句体,遇到Loop,转回Do语句,重新到第一步测试条件,进行下一次循环。 注意:在语句体中遇到Exit Do,转去执行Loop语句的下一句。,格式2: Do 语句块 Exit Do Loop While|Until 条件,功能:按照条件是否成立执行循环。操作如下: 第一步:执行语句块。 第二步:在While条件结果为真,或在Until条件结果为假,转回Do语句。否则执行Loop语句的下一句。 注意:在语句体中遇到Exit Do,转去执行Loop语句的下一句。,注意: 格式2一定会执行1次循环体内的语句块,而格式1测试条件后,根据条件情况执行循环体。 方括弧中的while|until 条件不写时变成了如下格式: Do 语句块 Loop 这时如果在语句块中无Exit Do和其他跳出命令,则成为死循环。 Do循环可以嵌套。,例:求小于100的素数。,Private Sub Command1_Click() n = 1 Do While n 100 flag = 0 For i = 2 To Sqr(n) If n Mod i = 0 Then flag = 1 Exit For End If Next i If flag = 0 Then Print n; If n Mod 10 = 0 Then Print n = n + 1 Loop End Sub,例:现地球人口约为60亿,增长率如果是0.4%,设计一个程序可计算随意的人口数目在几年后超过。,Private Sub Command1_Click() mrk = 60 i = 0 Do Until mrk Val(Text1.Text) mrk = mrk * (1 + 0.014) i = i + 1 Loop Label1.Caption = “在“ + Str(i) + “年后人口超过“ + _ Text1.Text + “亿,设人口增长率为1.4%“ Print mrk End Sub,5.6 多重循环,单重循环:循环体内不含有循环语句的循环。 多重循环:循环体内含有循环语句的循环。,例:打印99口诀表。,Private Sub Command1_Click() Print “*“; For i = 1 To 9 Print Tab(i * 6); i; Next i Print For i = 1 To 9 Print i; For j = 1 To i Print Tab(j * 6); i * j; Next j Print Next i End Sub,If flag = 0 Then Print n; m = m + 1 End If If m = 10 Then m = 0 Print End If n = n + 1 Loop End Sub,Private Sub Command1_Click() n = 100 m = 0 Do Until n 300 flag = 0 For i = 2 To Sqr(n

温馨提示

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

评论

0/150

提交评论