《第三章 程序流程控制.pptx》由会员分享,可在线阅读,更多相关《第三章 程序流程控制.pptx(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章 程序流程控制第三章 程序流程控制 本章内容及要求:1.熟练掌握行if语句、块if结构、Select Case情况选择结构的使用,掌握选择的嵌套结构;2.熟练掌握实现循环结构的For/Next循环结构及Exit For语句、Do/Loop循环结构的使用,掌握多重循环。本章重点:选择结构及循环结构的实现及其应用 本章难点:选择的嵌套及多重循环结构案例3.1 条件语句IfThenElse3.1.1 案例说明 输入x,计算y的值。其中:(1)当 x6 时,y=x+3(2)当 x 6时,y=4x 案例3.1 条件语句IfThenElse3.1.2 相关知识 1.1.IfThen结构这种结构常称为
2、简单分支结构,如图所示。它一般有两种形式:单行和多行语句。单行语句格式:If 条件表达式 Then 语句 多行语句格式:If 条件表达式 Then 语句块End If例如:对语句 If ab Then max=a也可改成多行结构形式:If ab Then max=a End If案例3.1 条件语句IfThenElse2.IfThenElse结构语句格式:If 条件表达式 Then 语句块1 Else 语句块2 End If例如,如果成绩大于60分,则在屏幕上显示“合格”,否则在屏幕上显示“不合格”。If score60 then MsgBox 合格 Else MsgBox 不合格 End I
3、f 案例3.1 条件语句IfThenElse3.多重If语句语句格式:语句格式:If 条件表达式1 Then 语句块1 ElseIf 条件表达式2 Then 语句块2 ElseIf 条件表达式3 Then 语句块3 ElseIf 条件表达式n Then 语句块n Else 语句块 End If 案例3.1 条件语句IfThenElse案例3.1 条件语句IfThenElse3.1.3 设计步骤(1)建立程序初始界面。(2)设置属性。演示:案例3.1的补充例题 案例3.1 条件语句IfThenElse3.1.3 设计步骤(3)编写事件过程。Private Sub Command1_Click()
4、Dim x As Single,y As Singlex=Val(Text1.Text)If x 6 Then y=x+3Else y=4*xEnd IfText2.Text=Str(y)End Sub 案例3.1 条件语句IfThenElse3.1.4 思考与练习 1.编程实现:输入一个整数,判断它是奇数还是偶数,并输出相应的提示信息。用 IfThenElse语句实现。(设计界面,编写完整的程序,上机实现)Dim n As Integer,str As String 从界面上的某个控件获得变量n的值If n Mod 2=0 Then str=偶数Else str=奇数End If 把str的
5、内容显示在界面上的某个控件上案例3.1 条件语句IfThenElse3.1.4 思考与练习2.以下程序运行时,输出结果是什么?Private Sub Command1_Click()y=1If y 0 Then x=5If y 0 Then x=4Else x=3End IfPrint x=;xEnd Subx=3案例3.2 条件语句IfThenElseIf语句3.2.1 案例说明 对所输入的整数进行判断,若输入数为正数,则显示“大于零”,若输入数为负数,则显示“小于零”,否则显示“等于零”。用 IfThenElseIf语句实现。3.2.2 设计步骤(1)建立程序初始界面。(2)设置属性。演示
6、:案例3.2 案例3.2 条件语句IfThenElseIf语句3.2.2 设计步骤(3)编写事件过程。Private Sub Command1_Click()If Val(Text1.Text)0 Then Text2.Text=大于零 Else Text2.Text=等于零End IfEnd Sub案例3.2 条件语句IfThenElseIf语句3.2.3 思考与练习 1.为铁路编写计算运费的程序。假设铁路托运行李,规定每张客票托运费的计算方法是:行李重量不超过 50 kg时,每千克0.25元;超过 50 kg而不超过 100 kg时,其超过部分每千克0.35元;超过 100 kg时,其超过
7、部分每千克0.45元。用 IfThenElseIf语句实现。(设计界面,编写完整的程序,上机实现)分析:托运费的分段函数是什么?答:设行李重量为w公斤,应付托运费为x元,则托运费的分段函数是:(1)w=50时,x=0.25*w(2)50w100时,x=0.25*50+0.35*50+0.45*(w-100)案例3.2 条件语句IfThenElseIf语句Private Sub Command1_Click()Dim w As Single,x As Singlew=Val(Text1.Text)If w 50 And w 100 Then x=0.25*50+0.35*50+0.45*(w-1
8、00)如果把最后一句Text2.Text=Str(x)写在此处,效果是什么?End If案例3.2 条件语句IfThenElseIf语句不能写成:50w100时,才输出托运费。其他情况,不输出托运费。Text2.Text=Str(x)End Sub注意:运行程序时,w50,50w100 几种情况都要运行,看结果是否正确。案例3.2 条件语句IfThenElseIf语句不能写成:x=Text2.Text3.2.4 思考与练习2.根据输入三角形三边判断能否组成三角形,若可以则判断输出三角形的类型。用 IfThenElseIf语句实现。(设计界面,编写完整的程序,上机实现)说明:三角形的类型有:等边
9、三角形,等腰三角形,直角三角形,普通三角形。案例3.2 条件语句IfThenElseIf语句请思考:(1)怎样判断三角形是等边三角形?(2)怎样判断三角形是等腰三角形?(3)怎样判断三角形是直角三角形?案例3.2 条件语句IfThenElseIf语句Private Sub Command1_Click()Dim a As Integer,b As Integer,c As Integer,str As String 从界面上的某些控件获得变量a,b,c的值If(a+b c And b+c a And c+a b)Then If a=b And a=c Then str=该三角形是等边三角形 E
10、lseIf a=b Or a=c Or b=c Then str=该三角形是等腰三角形 a=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)案例3.2 条件语句IfThenElseIf语句ElseIf a*a+b*b=c*c Or b*b+c*c=a*a Or c*c+a*a=b*b Then str=该三角形是直角三角形 Else str=该三角形是普通三角形 End IfElse str=不能组成三角形End If 把str的内容显示在界面上的某个控件上End SubLabel5.Caption=str Text4.Text=str案例3.
11、3 条件语句Select Case语句3.3.1 案例说明 计算公民应纳个人所得税。这里将个人所得税具体计算问题理想化,假设以1000元作为标准,10001999的税率为5%,20004999的税率为10%,50009999的税率为25%,1000019999的税率为40%,20000以上的税率为45%。用Select Case语句实现。3.3.2 相关知识语句格式:Select Case 测试表达式Case 表达式列表1 语句块1Case 表达式列表2 语句块2 Case 表达式列表n 语句块n Case Else 语句块End Select案例3.3 条件语句Select Case语句 说
12、明:“测试表达式”是必选项,可以是数值型或字符型表达式。“表达式列表”可以有3种形式。表达式:用来表达一些具体的数值范围。多个数值间用逗号分隔开,例如,Select case number Case 1,2,3,4,5 Result=不合格 Case 6,7 Result=合格 Case 8 Result=良好 Case Else Result=优秀 End Select案例3.3 条件语句Select Case语句 说明:表达式 To 表达式。这种表达式常用来表示一个数值范围,数值小的放在To前面。例如,Case a To z。以上判断成绩等级示例可以改成“表达式 To 表达式”形式:Cas
13、e 1 To 5 Result=不合格 Case 6 To 7 Result=合格 Case 8 Result=良好 Case Else Result=优秀 End Select Is表达式。通过Is与比较运算符结合,用来表示一个数值范围。例如,Case Is6 案例3.3 条件语句Select Case语句3.3.3 设计步骤(1)建立程序初始界面。(2)设置属性。演示:案例3.3 案例3.3 条件语句Select Case语句3.3.3 设计步骤(3)编写事件过程。Private Sub Command1_Click()Dim num As IntegerDim salary As Sin
14、gle,rate As Single,taxes As SingleDim temp As Stringtemp=InputBox(请输入该公民的月收入:,月收入输入窗口)salary=Val(temp)If(salary-1000)0 Then MsgBox 不需交纳个人所得税Else 案例3.3 条件语句Select Case语句num=Int(salary/1000)Select Case num Case 1:rate=0.05 Case 2,3,4:rate=0.1 Case 5 To 9:rate=0.25 Case 10 To 19:rate=0.4 Case Else rate
15、=0.45 End Select taxes=(salary-1000)*rate MsgBox 应交个人所得税金额为:&taxesEnd IfEnd Sub案例3.3 条件语句Select Case语句3.3.4 思考与练习 1.为某航空公司计算票价的优惠率。假设优惠规定如下:(1)在旅游的旺季 7 9 月,如果订票数超过 20 张,票价优惠 15%,20 张以下,优惠 5%;(2)在旅游的淡季 1 5月、10月、11月,如果订票数超过 20 张,票价优惠 30%,20 张以下,优惠 20%;(3)其他情况一律优惠 10%。请设计程序,根据月份和订票张数决定票价的优惠率。(设计界面,编写完整
16、的程序,上机实现)案例3.3 条件语句Select Case语句演示:票价.vbp的界面方法一:Select Case 语句中嵌套IfThenElse语句Private Sub Command1_Click()Dim month As Integer,number As Integer,rate As Integermonth=Val(Text1.Text)number=Val(Text2.Text)Select Case month Case 1 To 5,10,11 If number 20 Then rate=20 Else rate=30 Case 7 To 9 If number 2
17、0 Then rate=5 Else rate=15 案例3.3 条件语句Select Case语句 Case Else rate=10End SelectLabel4.Caption=所订机票的优惠率为:&Str(rate)&%End Sub案例3.3 条件语句Select Case语句方法二:If ThenElseIf语句中嵌套IfThenElse语句Private Sub Command2_Click()Dim month As Integer,number As Integer,rate As Integermonth=Val(Text1.Text)number=Val(Text2.T
18、ext)If(month=1 And month=5)Or month=10 Or month=11 Then If number=7 And month=9 Then If number 20 Then rate=5 Else rate=15Else rate=10案例3.3 条件语句Select Case语句End IfLabel4.Caption=所订机票的优惠率为:&Str(rate)&%End Sub 案例3.3 条件语句Select Case语句案例3.4 ForNext 3.4.1 案例说明 求sum=1+2+3+100。用ForNext循环结构实现3.4.2 相关知识 1.Fo
19、r循环语句(一般用于循环次数已知)语句格式:For counter=start To end Step increment 语句块1 Exit For 语句块2 Next counter 0 初值终值=1 时,可省略终值=0 死循环step案例3.4 For循环语句3.4.3 设计步骤(1)建立程序初始界面。(2)设置属性。演示:案例3.4案例3.4 For循环语句(3)编写事件过程。Private Sub Command1_Click()Dim sum As Integer,i As Integersum=0 累加器初值置为0。书上77页加注释。For i=1 To 100 sum=sum+
20、i 注意红颜色的语句Next iLabel2.Caption=Str(sum)Debug.Print sumEnd Sub案例3.4 For循环语句3.4.4 思考与练习(1)如果要实现 sum=1+2+3+10,怎样修改程序?(2)如果要实现 sum=30+31+32+50,怎样修改程序?(3)如果 Label2.Caption=Str(sum)中 sum 写成 sam,即:Label2.Caption=Str(sam)则,运行后,Label2的Caption会变成什么?怎样避免这种错误?案例3.4 For循环语句For i=1 To 10For i=30 To 50强制变量声明,Optio
21、n Explicit菜单:工具 选项 要求变量声明03.5.1 案例说明 用 For 循环实现求阶乘 n!3.5.2 设计步骤(1)建立程序初始界面。(2)设置属性。演示:案例3.5案例3.5 用For循环求阶乘(3)编写事件过程。Private Sub Command1_Click()Dim n As Integer,i As Integer Dim result As Long result=1 累乘,初值置为1。书上78页加注释。n=CInt(text1.text)把表达式转换为整型。If n=0 Then Label2.Caption=请输入正整数!Exit Sub 结束过程 End
22、if For i=1 To n result=result*i Next i Label2.Caption=Str(n)+!=+Str(result)End Sub案例3.5 用For循环求阶乘3.5.3 思考与练习(1)如果 result=1 写成 result=0,则运行后,Label2的Caption会变成什么?(2)运行后,如果输入的 n=0,1)Exit Sub 2)End(如果 Exit Sub 写成 End)1),2)中哪句会结束程序的运行?哪句会结束本次事件过程,等待下一次事件过程?02)结束程序的运行1)结束本次事件过程,等待下一次事件过程案例3.5 用For循环求阶乘3.6
23、.1 案例说明用 DoLoop 循环结构实现求和sum=1+2+3+100。案例3.6 DoLoop循环结构3.6.2 相关知识DoLoop循环结构 DoLoop语句较灵活,其常用格式有两种。语句格式1:Do While|Until conditionstatementsExit DostatementsLoop语句格式2:DostatementsExit DostatementsLoop While|Until condition案例3.6 DoLoop循环结构 DoLoop Until执行过程 Do UntilLoop执行过程案例3.6 DoLoop循环结构3.6.3 设计步骤(1)建立程
24、序初始界面。(2)设置属性。演示:案例3.6案例3.6 DoLoop循环结构(3)编写事件过程。解法一:采用当型循环Do WhileLoopPrivate Sub Command1_Click()Dim i As Integer,sum As Integer i=1 循环变量初值置为1,82页修改-红字部分 sum=0 累加器初值置为0 Do While i=100 当型循环 sum=sum+i i=i+1 每次循环变量加1 Loop Label2.Caption=Str(sum)End Sub解法二:采用直到型循环Do UntilLoopPrivate Sub Command1_Click(
25、)Dim i As Integer,sum As Integer i=1 循环变量初值置为1 sum=0 累加器初值置为0 Do Until i100 sum=sum+i i=i+1 Loop Label2.Caption=Str(sum)End Sub3.6.4 思考与练习(1)如果 去掉 i=i+1,则运行结果是什么?程序运行出错。错误原因:溢出。请思考:为什么会溢出呢?案例3.5 用For循环求阶乘3.7.1 案例说明 提示用户输入数字型数据,并对所输入的非负数进行求和,用 WhileWend 循环结构实现。案例3.7 WhileWend循环结构3.7.3 设计步骤(1)建立程序初始界面
26、。(2)设置属性。演示:案例3.7案例3.7 WhileWend循环结构(3)编写事件过程。Private Sub Command1_Click()Dim num As Integer,total As IntegerDim temp As Stringnum=0total=0While num=0 total=total+num temp=InputBox(Please enter a number:)num=Val(temp)WendLabel1.Caption=Str(total)End Sub案例3.7 WhileWend循环结构3.7.4 思考与练习(1)这个While循环什么时候结
27、束?(2)这个While循环的循环次数是否固定?答:输入负数时,循环结束。因为当 num=0时,执行循环体。答:循环次数不固定案例3.7 WhileWend循环结构3.8.1 案例说明 求sum=1!+2!+3!+4!+5!,用多重循环实现。案例3.8 多重循环 3.8.2 相关知识多重循环 如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:案例3.8 多重循环3.8.3 设计步骤(1)建立程序初始界面。(2)设置属性。演示:案例3.
28、8案例3.8 多重循环(3)编写事件过程。Private Sub Command1_Click()Dim i As Integer,j As Integer,n As Integer Dim sum1 As Long,sum2 As Long n=5请思考:怎样使 n 能够变化?sum1=0 案例3.8 多重循环答:用InputBox语句实现,或加控件:Text1n=Val(InputBox(请输入n(n1,n为整数),输入数据,2)或n=Val(Text1.Text)For i=1 To n sum2=1 For j=1 To i sum2=sum2*j Next j sum1=sum1+s
29、um2Next iLabel1.Caption=Label1.Caption+Str(sum1)End Sub案例3.8 多重循环(1)i=1 时,For j=1 to 1(2)i=2 时,For j=1 to 2(5)i=5 时,j=1 to 5总结:外重循环变量i变化1次,内重循环关于j的循环体可能执行多次。For i=1 To n sum2=1 For j=1 To i sum2=sum2*j Next j sum1=sum1+sum2Next iLabel1.Caption=Label1.Caption+Str(sum1)End Sub案例3.8 多重循环(1)i=1 时,sum2=1
30、For j=1 to 1 1)j=1 sum2=sum2*j=1*1=1sum1=sum1+sum2=0+1=1For i=1 To n sum2=1 For j=1 To i sum2=sum2*j Next j sum1=sum1+sum2Next i案例3.8 多重循环(2)i=2 时,sum2=1For j=1 to 2 1)j=1 sum2=sum2*j=1*1=1 2)j=2 sum2=sum2*j=1*2=2sum1=sum1+sum2=1+2=3 For i=1 To n sum2=1 For j=1 To i sum2=sum2*j Next j sum1=sum1+sum2
31、Next i案例3.8 多重循环(3)i=3 时,sum2=1For j=1 to 3 1)j=1 sum2=sum2*j=1*1=1 2)j=2 sum2=sum2*j=1*2=2 3)j=3 sum2=sum2*j=2*3=6sum1=sum1+sum2=3+6=9 案例3.8 多重循环请思考:书上 页 习题三书上 3.1 输入3个数,输出其中的最大数。(1)建立程序初始界面。(2)设置属性。演示:3.1 题习题三(3)编写事件过程。Private Sub Command1_Click()Dim a As Single,b As Single,c As Single,max As Sing
32、lea=Val(Text1.Text)b=Val(Text2.Text)c=Val(Text3.Text)If a b Then max=aElse max=bEnd If习题三If c max Then max=cEnd IfLabel4.Caption=最大的数是:+Str(max)End Sub习题三3.2 输入一行字符,分别统计其中数字、英文字母、空格的个数。(1)建立程序初始界面。(2)设置属性。演示:3.2 题习题三(3)编写事件过程。Dim num1 As Integer,num2 As Integer,num3 As Integer注意定义num1,num2,num3的位置Pr
33、ivate Sub Form_Load()num1=0num2=0num3=0End Sub习题三Private Sub Text1_KeyPress(KeyAscii As Integer)Dim ch1 As String*1ch1=Chr(KeyAscii)Chr()见教材56页表2.12Select Case ch1 Case 0 To 9 num1=num1+1 Case A To Z,a To z num2=num2+1 Case num3=num3+1End Select习题三End SubPrivate Sub Command1_Click()Dim msg1 As Strin
34、g,msg2 As String,msg3 As Stringmsg1=数字有&num1&个,msg2=英文字母有&num2&个,msg3=空格有&num3&个。Label2.Caption=msg1&msg2&msg3End Sub习题三Private Sub Command2_Click()Text1.Text=Label2.Caption=Text1.SetFocus 设置焦点num1=0num2=0num3=0End Sub习题三3.4 试编程将学生的百分制成绩转换成等级制,90分以上为“A”等,8089分为“B”等,7960分为“C”等,60分以下为D等。(1)建立程序初始界面。(2
35、)设置属性。演示:3.4 题习题三(3)编写事件过程。Private Sub Command1_Click()Dim score As SingleDim result As Stringscore=Val(Text1.Text)Select Case Int(score)Case 0 To 59 result=D Case 60 To 79 result=C 习题三Case 80 To 89 result=BCase 90 To 100 result=A Case Else MsgBox 输入数据错误,请输入100以内的数!Text1.Text=Text1.SetFocusEnd SelectLabel2.Caption=resultEnd Sub习题三Private Sub Text1_Change()Label2.Caption=End Sub