第4章程序控制结构.ppt_第1页
第4章程序控制结构.ppt_第2页
第4章程序控制结构.ppt_第3页
第4章程序控制结构.ppt_第4页
第4章程序控制结构.ppt_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、Visual Basic程序设计,第四章 程序控制结构,第4章 程序控制结构,程序示例,循环结构程序设计,选择结构程序设计,顺序结构程序设计,程序设计与算法,4.1.1 程序的基本组成,程序的基本组成包括:输入、处理和输出三个部分。 例如,需要用计算机编程求解一个三角形的面积。根据题目的要求可以确定: (1)程序的“输出”是三角形的面积值。 (2)“处理”是求解三角形的面积。 (3)如果用三条边长求三角形面积,则需要输入三角形的三条边长,如果用相邻的两条边及其夹角求三角形面积,就需要输入两条边长及其对应的夹角。,4.1 程序设计与算法,由于计算机只能执行算术运算和逻辑运算,所以其解决问题的方法

2、、步骤和人们生活中解决问题的方法、步骤不同,必须考虑其特殊性。,4.1.2 算法,1. 算法的定义 从广义上讲,算法是解决某个问题或处理某个事件的方法和步骤。 从狭义上讲,算法指用计算机解决某一问题的方法和步骤。 算法可以分为两大类:一类是数值计算方法,主要是解决一般数学解析方法难以处理的一些数学问题,如求解超越方程的根等;另一类是非数值计算方法,如排序、查找和求最大值最小值等。,4.1.2 算法,2.算法的特征 算法具备以下五个特征: (1)确定性 (2)可行性 (3)有穷性 (4)输入性 (5)输出性,4.1.2 算法,3. 算法的描述 算法本身可以采用不同的方法来描述。可以用自然语言(英

3、语、汉语等)来描述;可以用伪代码来描述;可以用特定的图形来描述。,4.1.2 算法,4.算法和程序的区别 算法和程序的区别主要有三点: (1)一个程序不一定满足有穷性。 (2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。 (3)算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。,4.1.3 算法的基本结构,算法有三种基本结构: 顺序结构 分支结构 循环结构。,4.2 顺序结构,顺序结构的概念和执行流程 顺序结构是指按照语句书写的先后顺序依次执行每条语句。顺序结构主要是由变量定义语句、赋值语句、输入输出语句和一些命令语句等构成。,4.2 顺序结构,如以下顺序结构程序段:

4、Private Sub Command1_Click() Dim x As Integer, y As Integer, z As Integer 变量定义 x = Val(Text1.Text) 数据的输入 y = Val(Text2.Text) 数据的输入 z = x + y 数据的处理 Text3.Text = z 数据的输出 End Sub,4.2 顺序结构,该程序段自上而下依次执行各条语句。整个程序只有一个入口和一个出口。 程序中主要包含四部分内容: (1)变量的定义; (2)数据的输入; (3)数据的处理; (4)数据的输出。,1. 输入函数InputBox,InputBox函数用

5、来接收通过键盘输入的数据。 InputBox函数的语法格式如下:v=InputBox(Propmt ,Title , Default , x, y , Helpfile,Context) v:用于接收在InputBox函数中输入的数据。 Propmt:对话框中显示的提示信息。 Title:对话框的标题。 Default:显示在用户编辑框中的缺省值。 x, y:用于确定对话框在屏幕上显示时的位置。 Helpfile,Context:是帮助文件名和帮助主题号。,1. 输入函数InputBox,例如x=InputBox(“请输入一个数字!”,“程序示例”,10),显示如图所示的对话框。,2. 消息框

6、函数MsgBox,MsgBox函数用于向用户发布提示信息,并要求用户做出响应。 MsgBox函数语法格式如下: v =MsgBox(Propmt,Button,Title, Helpfile,Context) Propmt:对话框中显示的提示信息。 Button:定义信息框按钮的个数、类型和信息框中的图标。 Title:信息框的标题。 Helpfile,Context:Helpfile是帮助文件名,Context是帮助主题号。 V:用于接收MsgBox函数返回的一个值。,2. 消息框函数MsgBox,例如:x=MsgBox (非法数据!,1+ 48+0, 提示信息!),4.3选择结构程序设计,

7、本节要点 选择结构先对条件进行测试,根据测试的结果选择执行对应的分支语句。 1. If条件语句 2. IIf函数 3. Select Case结构 4. 选择结构应用示例,4.3.1 If条件语句,1.单分支If语句 说明: 条件可以是:关系表达式、逻辑表达式或算数表达式。 格式(1)中“语句组”可以是一条或几条语句。 格式(3)不换行书写,仅一行,没有End If。 If和End If必须成对使用,除非是格式(2)。,格式(2): If 条件 Then 语句 ,格式(1): If 条件 Then 语句组 End If ,4.3.1 If条件语句,1.单分支If语句 执行规则:条件为真则执行“

8、语句”或“语句组”,否则,不执行“语句”或“语句组”,直接执行If后面的语句。 例4.1根据百分制成绩提示考试是否通过。,If score = 60 Then Print 祝贺你考试通过! End If Print 继续努力!,score = 60 If score = 60 Then Print 祝贺你考试通过! Print 继续努力!,4.3.1 If条件语句,格式: If 条件 Then 语句组1 Else 语句组2 End If,执行规则:条件为真执行语句组1,If语句执行结束,否则,执行语句组2,If语句执行结束。,2.双分支If语句,4.3.1 If条件语句,2.双分支If语句 例

9、4.2 求x和y的最大值,If x y Then Print 最大值是: ,x Else Print 最大值是: , y End If,单分支和双分支If语句用于解决两种情况的问题。,4.3.1 If条件语句,2.双分支If语句 例4.3 计算分段函数: 程序代码: If x=0 Then y=(-x+Sqr(x3-3*x+7)/2 Else y=Log(x)+1 End If,4.3.1 If条件语句,2.双分支If语句,例4.4 计算分段函数。,程序代码: If x=0 Then Else y=Log(x)+1 EndIf,双分支If的Then中又包含一个If语句。,If x0 Then

10、y=(-x+Sqr(x3-3*x+7)/2 Else y=0 EndIf,4.3.1 If条件语句,2.双分支If语句 在If语句的Then或Else中又包含If语句,称为If结构嵌套。 注意: 注意If嵌套结构的程序书写规范,最好采用层层缩进的方式。 除非采用If结构的缩写格式,否则,有几个If语句,就有几个End If语句与之配对。,嵌套的结构比较复杂!,4.3.1 If条件语句,3.多分支If语句,格式:If 条件1 Then 语句组1 ElseIf 条件2 Then 语句组2 ElseIf 条件n Then 语句组n Else 语句组n+1 End If,执行规则:首先判断条件1,条件

11、1成立,执行语句组1,If语句执行结束,否则再判断条件2依此类推。n个条件都不成立,则执行语句组n+1,n+1个语句组仅执行一个。,注意:(1)在书写时要注意ElseIf之间不能有空格;(2)条件的书写是有顺序的,如有多个分支同时满足条件,只执行第一个与之匹配的语句组。,4.3.1 If条件语句,3.多分支If语句,多分支If语句用于解决三种及以上情况的问题。 把例4.4用多分支If语句处理。,程序代码: If x0 Then y=(-x+Sqr(x3-3*x+7)/2 ElseIf x=0 Then y=0 Else y=Log(x)+1 End If,4.3.1 If条件语句,3.多分支I

12、f语句,例4.5 编写一个按月收入额计算个人收入调节税的程序。 计算方法如下:,4.3.2 条件函数IIf函数,格式:变量=IIf(表达式1,表达式2,表达式3) IIf函数根据条件的成立与否,返回不同表达式的结果。如果表达式1的值为真,函数值是表达式2的值,否则函数值是表达式3的值。 例4.6 将两个变量x和y中的最大值放入max。,If语句: If x y Then max = x Else max = y End If,IIf函数: max = IIf(x y, x, y),4.3.3 Select Case 语句,Select Case 测试表达式 Case 测试项1 语句组1 Cas

13、e 测试项2 语句组2 Case 测试项n 语句组n Case Else 语句组n+1 End Select,说明:(1)测试表达式的值应是数字或字符型。 (2)测试项的取值必须与测试表达式的值类型相同,常用形式为: 具体取值,用逗号隔开 如:1,5,9 连续的范围:界1 TO 界2 如:12 To 20 满足某个条件:Is运算符 如:Is10 三种形式可组合使用,用逗号隔开。,Select Case语句执行过程 先计算测试表达式的结果,按顺序判断结果与Case语句后的测试项是否匹配,如果匹配,则执行相应的语句组,否则继续判断,如果表达式结果与所有的测试项都不匹配,则执行Case Else后的

14、语句组(如果有的话)。,4.3.3 Select Case 语句,例4.7 百分制成绩转换成三级制成绩。成绩大于等于90的为优秀,小于90大于等于60为及格,否则为不及格。,Select Case方法: Mark=Val(Text1.Text) Select Case Mark Case is=90 Print 优 Case 60 to 90 Print 通过 Case Else Print 未通过 End Select,多分支If方法: Mark=Val(Text1.Text) If mark=90 then Print 优 ElseIf mark=60 then Print 通过 Else

15、 Print 未通过 End If,Select Case 语句和多分支If语句都是处理多分支问题。,4.3.4 选择结构应用示例,例4.8 编写一个加油站计费程序 从“种类”中选择油品种类,界面上的说明文字将随之改变,并将“数量”文本框设为焦点;在数量文本框中输入需购的油品数量后,单击“计算”按钮,在“总价”文本框显示所购油品种类应付的金额。已知汽油单价: 90号 7.21元/升 93号 7.41元/升 97号 7.80元/升,4.3 分支结构总结,单分支If语句 双分支If语句 If语句的嵌套 多分支If语句 IIF函数 Select Case 语句,4.4 循环结构,循环:是在指定的条件

16、下多次重复执行一组语句。,1. ForNext,2. DoLoop,3. 循环嵌套,4.4 循环结构,4.4.1 For循环结构 说明: 初值、终值和步长可以为正整数,也可以为小数。 步长可以为正值,也可以为负值。 Exit For用于退出For循环。 循环的执行次数=Int(终值-初值)/步长)+1,For 循环变量=初值 To 终值 Step 步长 Exit For Next 循环变量,步长省略, 默认为1,循环体,可以省略,4.4 循环结构,4.4.1 For循环结构 执行过程(初值小于终值,步长为正值) (1) 将初值赋给循环变量(仅执行一次) (2) 判断循环变量值是否小于等于终值

17、(3) 若是则执行循环体 (4) 循环变量增加一个步长 (5)重复(2)(4)步骤 (6)否则,结束循环,4.4 循环结构,4.4.1 For循环结构 执行过程(初值大于终值,步长为负值) (1)将初值赋给循环变量(仅执行一次) (2) 判断循环变量值是否大于等于终值 (3) 若是则执行循环体 (4) 循环变量增加一个步长 (5)重复(2)(4)步骤 (6)否则,结束循环,4.4 循环结构,例4.9 读程序写结果,程序代码: s=0 For i = 1 To 10 step 1 s=s+i Next i Print i, s,可以省略,该算法是累加求和:累加求和的做法是定义一个变量(如s),作

18、为累加器使用,一般初值为0,再定义一个变量(如i)用来保存加数。,第1次:i=1,1=10,s=0+1=1,执行Next, i为2,第2次:i=2,2=10,s=1+2=3 ,执行Next, i为3,第10次:i=10,10=10,s=45+10=55 执行Next,i为11,第10次循环结束后:1110为假, 循环结束。,4.4 循环结构,思考:求奇数和1+3+5+99? 两种方法: 1)求和前用if语句对i做判断,如果i是奇数对i求和。 2)设置步长为2,则i的取值全部为奇数。,方法1: S=0 For i = 1 To 99 If i Mod 2 = 0 Then s = s +i En

19、dIf Next,方法2: S=0 For i = 1 To 100 step 2 s = s + i Next,4.4 循环结构,例4.10 求1/2+2/3+20/21 该问题也是求和,是按规律求和,累加器第i次加ai=i/(i+1), ai称为通项。,程序代码: s=0 For i = 1 To 20 Next i Print i, s,说明:通项求和一般是先计算通项,然后把通项加到累加器。,计算通项,t=i/(i+1),s=s+t,4.4 循环结构,例4.11 求积:1*2*3*10 分析:把求和s=s+i改成s=s*i。 注意:(1)把s的初值改为1; (2)s定义成Long 类型,

20、整型可能不够用。,程序代码: Dim i As integer, s As Long s=1 For i = 1 To 10 s=s*i Next i Print i, s,4.4 循环结构,例4.12 输入一个正整数,求各个位上数字之和。如输入4532,输出各个位上的数字之和14,(1)输入正整数k (2)求它是几位数 (3)用For循环:1,位数和步长 (4)取k的末位数(Mod),求和 (5)使k去掉末位数( ) (6)重复(4)和(5),直到结束 (7)在Text2中显示结果,分析:要求各个位数的和,必须把各个位上的数分离出来。,4.4 循环结构,总 结,思考:我国现有人口13亿,按人

21、口年增长率0.8%计算,多少年后我国人口超过26亿?能否用For循环解决该问题?, 初值、终值、步长必须是数值型,步长为正,初值终值;缺省默认为1; 在已知循环次数时使用For循环,循环次数=Int(终值-初值)/步长)+1; 组成循环体的语句块可以是一条或多条语句; Exit For表示当遇到该语句时,退出循环体,执行Next后面的语句; 在循环体内对循环变量可多次引用,但在循环过程中一般不改变 其值,否则影响结果; 退出循环后,循环变量保持退出时的值。,4.4 循环结构,4.4.2 DoLoop循环结构,(1)Do While Exit Do Loop,(2) D0 Exit Do Loo

22、p While ,(3) Do Until Exit Do Loop,(4)Do Exit Do Loop Until ,4.4 循环结构,4.4.2 DoLoop循环结构 格式 Do While 循环体 Exit Do 循环体 Loop,先判断,后执行: 先判断循环条件,若为真,执行循环体,然后再判断循环条件。否则,跳出循环体,执行Loop之后的语句。,注意:1.执行Exit Do,直接跳出循环体,执行DoLoop后面的语句。 2.如果循环条件初始为假,则循环体一次都不执行。,4.4 循环结构,4.4.2 DoLoop循环结构 对例4.9 1+2+3+4+10,DoLoop方法: s=0:i

23、=1 Do While i=10 s=s+i i=i+1 Loop,For循环实现的程序功能,也可以用Doloop循环实现。,For方法: s=0 For i=1 To 10 s=s+i Next I,4.4 循环结构,4.4.2 DoLoop循环结构,格式(2) Do 循环体 Exit Do 循环体 Loop While ,执行规则:先执行循环体,再判断循环条件。,注意: 不管“循环条件”开始为真还是为假,循环体至少执行一次。,4.4 循环结构,4.4.2 DoLoop循环结构 对例4.9 1+2+3+4+10,程序代码: s=0:i=1 Do While i=10 s=s+i i=i+1

24、Loop,程序代码: s=0:i=1 Do s=s+i i=i+1 Loop While i=10,可以看出:两种While循环可以实现相同的功能。,将i先赋值为11, 执行结果如何?,4.4 循环结构,4.4.2 DoLoop循环结构 例4.13 我国现有人口13亿,按人口年增长率0.8%计算,多少年后我国人口超过26亿?,分析:可以看出,该问题是循环问题,但循环次数不确定,不能用For循环。 计算公式: 26=13*(1+0.008)n;,程序代码: P=13:n=0 Do n=n+1 p=p*(1+0.008) Loop While p=26 Print n,可以看出:(1)循环次数不确

25、定的循环只能用While循环; (2)For循环都可以转换成While循环,但Wile循环不一定都能用For循环实现。,4.4 循环结构,4.4.2 DoLoop循环结构, Do While 循环体 Loop, D0 循环体 Loop While ,区别: (1)执行顺序不同: 形式一:先判断,后执行循环体; 形式二:先执行循环体,后判断。 (2)执行次数不同(特殊情况下): 形式一:条件不满足,循环体可能一次也不执行 形式二:不论条件如何,至少执行一次,4.4 循环结构,例4.14 用辗转相除法求两自然数m、n的最大公约数和最小公倍数。,最大公约数: 已知两数m、n; m Mod n的值为r

26、; mn,nr; 若r0 ,则重复 ,否则,循环结束,m为所求的最大公约数。 最小公倍数: 原两个数相乘,再除以最大公约数。,程序代码: Dim m As Integer, n As Integer m=Text1.Text:n=Text2.Text m1=m:n1=n Do Loop while r0 Text3.Text = m Text4.Text = m1 * n1 / m,r=m Mod n,m=n,n=r,能否把while r0 放到Do后面?,4.4 循环结构,4.4.2 DoLoop循环结构,格式: Do Until 循环体 Loop,While条件与Until条件的区别: W

27、hile条件是当条件满足时执行循环体,Until条件是当条件满足时结束循环体的执行。,格式(4): Do 循环体 Loop Until ,4.4 循环结构,4.4.2 DoLoop循环结构 对例4-9求1+2+3+4+10,i=1 Do While i=10 s=s+i i=i+1 Loop Print i,s,i=1 Do Until i10 s=s+i i=i+1 Loop Print i,s,While循环和Until循环可以实现相同的功能。,4.4 循环结构,4.4.2 DoLoop循环结构,几种形式比较:,Do While 循环体 Loop( While ),Do Until 循环体

28、 Loop( Until ),区别: While 条件为真时执行循环体,否则退出循环。 Until 条件为假时执行循环体,否则退出循环。,关系:while和Until可以相互转换,但循环条件取反。,4.4 循环结构,例4.15 输入一个正整数n,求最大的k,使得1*1+2*2+k*kn成立。,分析:由于循环次数不确定,不能用For循环,只能用DoLoop循环。 (1) 输入n的值。 (2) 判断累加和sn?。 (3) 若是,s加下一个数的平方值。 (4) 重复(2)、(3)。 (5) 若否,结束循环。 (6) 由text2输出最后一个累加数k。,程序代码: n = Val(Text1.Text

29、) s = 0: k = 1 Do While s n k = k + 1 s = s + k * k Loop Text2.Text = k - 1,4.4 循环结构,4.4.3 循环的嵌套 循环的嵌套:在一个循环体内又包含了一个完整的循环结构。 例4.16 打印乘法表。 注意: (1)内、外循环变量不能同名。 (2)外循环必须完全包含内循环,不能出现交叉。,4.4 循环结构,例4.17 计算1!+2!+5! 程序代码: s = 0 For i = 1 To 5 s = s + t Next Print s,t = 1 For j = 1 To i t = t * j Next,4.4 循环

30、结构总结,1. ForNext语句 2. DoLoop 语句 3. 循环的嵌套,4.5 程序示例,例4.18 从一个由字母、数字组成的字符串中找出所有大写字母并逆序输出。,方法2: Private Sub Command1_Click() For i = Len(Text1.Text) To 1 Step -1 t = Mid(Text1.Text, i, 1) If t = A And t = Z Then Text2.Text = Text2.Text + t End If Next End Sub,方法1: Private Sub Command1_Click() For i = 1 To Len(Text1.Text) t = Mid(Text1.Text, i, 1) If t = A And t = Z Then Text2.Text = t +

温馨提示

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

评论

0/150

提交评论