VB蒋加伏第四版第5章.ppt

上传人:cn****1 文档编号:571324635 上传时间:2024-08-10 格式:PPT 页数:51 大小:341KB
返回 下载 相关 举报
VB蒋加伏第四版第5章.ppt_第1页
第1页 / 共51页
VB蒋加伏第四版第5章.ppt_第2页
第2页 / 共51页
VB蒋加伏第四版第5章.ppt_第3页
第3页 / 共51页
VB蒋加伏第四版第5章.ppt_第4页
第4页 / 共51页
VB蒋加伏第四版第5章.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《VB蒋加伏第四版第5章.ppt》由会员分享,可在线阅读,更多相关《VB蒋加伏第四版第5章.ppt(51页珍藏版)》请在金锄头文库上搜索。

1、第5章 Visual Basic控制结构 5.1 算法及其描述 5.2 选择结构 5.3 循环结构 5.4 常用算法 5.15.1 算法及其描述1.算法的概念 是解决问题的有序步骤。2.算法的特征(1) 有穷性。(2) 确定性。(3) 有效性。(4) 零个或多个输入。(5) 至少有一个输出。3.算法的描述(1)自然语言 文字冗长、表达不确切、二义性。(2)流程图 图形方法,直观、形象、易于理解,应用广泛。(3)N-S图 是流程图的发展,去掉了流程线,算法都表示在一个矩形框内。3.三种基本控制结构(1)顺序结构在顺序结构中,算法的每一步操作都是按从上到下的线性次序执行的。(2)选择结构又称分支结

2、构,根据给出的条件,选择执行一个分支。因此,在选择结构中,必然包含了条件判断。(3)循环结构又称重复执行结构。根据给出的条件,判断是否重复执行某一组操作。基本的循环结构有两种:当循环和直到循环。当循环:首先判断条件是否成立,若成立,执行循环体再判断条件,决定是否继续进行循环;若不成立,跳过这组操作,执行此循环结构后面的操作。直到循环:首先执行循环体,然后判断条件是否成立,若成立,则继续进行循环操作;若不成立,执行此循环结构后面的操作。 在程序设计中,算法是由一系列的控制结构构成,每一个控制结构又由若干个语句组成。语句是程序中有确切含义的基本单位,也是构成程序的基本成分,程序功能是由一条条语句的

3、执行来实现的,可把语句视为命令。5.2 5.2 选选 择择 结结 构构 1. IfThen1. IfThen语句语句( (单分支结构单分支结构) ) If Then 语句块语句块 End If(注意多行(注意多行if语句要有语句要有End If) 或或 If Then 重要的是学会两个数的交换,若上述语句重要的是学会两个数的交换,若上述语句次序变一下,结果如何?次序变一下,结果如何? 例:已知两个数x和y,比较它们的大小,使得x大于y. If xy Then t=x x=y y=t End If 或或 If xy Then t=x: x=y: y=t2. IfThenElse2. IfThen

4、Else语句语句( (双分支结构双分支结构) ) If Then Else End If If Then Else 计算分段函数:双分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1)Else y=cos(x)x3+3*xEnd If单分支结构实现: y=cos(x)x3+3*x If x0 Then y=sin(x)+sqr (x*x+1) 3. IfThen3. IfThenElseIfElseIf语句语句( (多分支结构多分支结构) ) 形式: If Then ElseIf Then Else 语句块语句块 n+1 End If例5.1(补) 已知变量strC中

5、存放了一个字符,判断该字符是字母字符、数字字符还是其它字符。用多分支结构实现用多分支结构实现: If Ucase(strC) =A And Ucase (strC) =0 And strC =9 Then Print strC + 是数字字符 Else Print strC + “是其它字符 End If不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。. ElseIf不能写成 Else If。例5.2(补) 已知百分制成绩mark,显示对应的五级制成绩。哪些正确,哪些错误?4 4IfIf语句的嵌套语句

6、的嵌套 If语句的嵌套是指If或Else后面的语句块中又包含If语句。 形式如下: If Then If Then End If End If 例5.3(补) 已知x,y,z三个数,使得xyz,用一个IF语句和一个嵌套的IF语句实现 If xy Then t=x: x=y: y=t If yz Then t=y: y=z: z=t If xy Then t=x: x=y: y=t End If End IfIf语句的嵌套注意事项:书写锯齿型; If 与End If配对。:与同类型的下面四种形式之一: 表达式 例: A 一组枚举表达式(用逗号分隔) 2,4,6,8 表达式1 To 表达式2 60

7、 To 100 Is 关系运算符表达式 Is =A And Ucase (strC) =0 And strC 0 And y 0 Then Print 在第一象限 ElseIf x 0 Then Print 在第二象限 ElseIf x 0 And y 0 And y 0 And y 0Print 在第一象限 Case x 0Print 在第二象限 Case x 0 And y 0 And y 0Print 在第四象限End Select方法二代码错误:1. Select Case 后不能出现多个变量;后不能出现多个变量;2. Case后不能出现变量及有关运算符后不能出现变量及有关运算符。例5

8、.6 商店售货,按购买货物的多少分别给予不同优惠折扣如下:编程计算购物款数。购物不足250元,无折扣,购物满250元、不足500元,减价5%,计算机根据学生的答案判断正确与否,当结束时给出成绩。购物满500元、不足1000元,减价7.5%,购物满1000元、不足2000元,减价10%,购物满2000元,减价15%。 分析:设购物款为m,折扣为d,以上规定可表示如下: d=0 (m250)5% (250m500)7.5% (500m1000)10% (1000m2000)15% (2000m)代码如下:Private Sub Command1_Click() Dim s As Single, d

9、 As Single m = Val(InputBox(请输入应付款:) Select Case m Case Is 250 d = 0 Case Is 500 d = 0.05 Case Is 1000 d = 0.075 Case Is y,x,y) (2)Choose函数形式是: Choose(数字类型变量,值为数字类型变量,值为1的返回值,值为的返回值,值为2的返回值的返回值) 例如,Nop是1-4的值,转换成 + 、-、运算符的语句如下: Op= Choose(Nop,+,-,) 当值为1,返回字符串“+”,然后放入Op变量中,值为2,返回字符串“-”,依次类推;当Nop是1-4的非

10、整数,系统自动取Nop的整数再判断;若Nop不在14之间,函数返回Null值。 (3) Switch函数形式是: Switch(条件表达式条件表达式1,条件表达式,条件表达式1为为True时的值时的值,条件表达式,条件表达式2,条件表达式,条件表达式2为为True时的值时的值)常常 见见 错错 误误1在选择结构中缺少配对的结束语句对多行式的If块语句中,应有配对的 End If语句结束。2. 多边选择ElseIf关键字的书写和条件表达式的表示 ElseIf 不要写成Else If。3. Select Case语句的使用 Select Case 后不能出现多个变量;Case子句后不能出现变量,见

11、例5.5。5.3 5.3 循循 环环 结结 构构1. For循环语句循环语句 (一般用于循环次数已知)形式 For 循环变量初值循环变量初值 to 终值终值 Step 步长步长 语句块语句块Exit For 语句块语句块 Next 循环变量循环变量 循环变量 =终值 语句块 Exit For 语句块 循环变量加步长 T F 循环变量得初值 循环体例5.7(补) 计算1100的奇数和,程序段如下: Dim i %, s% 等价于: Dim i %, s% s=0 s=0 : i = 1 For i = 1 To 100 step 2 re: If i 0 初值终值 =1 时,可省略终值=0 死循

12、环循环次数要注意:要注意:v 出了循环,循环控制变量值的问题。 例程序段: For i=2 To 13 Step 3 循环执行次数 Print i , 输出 i的值分别为: Next i 2 5 8 11 Print : Print “I=“, i 出了循环输出为: I=14v 在循环体内对循环控制变量可多次引用;但最好不要对其赋值,否则影响原来的循环控制规律。步长例5.8(补)改变循环控制变量对循环的影响Private Sub Command1_Click() j = 0 For i = 1 To 20 Step 2 i = i + 3 j = j + 1 Print 第; j; 次循环i=

13、; i Next i Print 退出循环后i=; i End Sub正常情况:i=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19例5.9 输入一个班的学习成绩,统计其中及格的学生人数,并计算出全班的平均分数。学生人数不定,输入负数时截止。设全班人数不超过50人。 Private Sub Command1_Click() Dim Score As Single, PassN As Integer, n As Integer Dim i As Integer, Sum As Single Text1 = : Text2 = : Text3 = Sum = 0: Pa

14、ssN = 0: n = 0 For i = 1 To 50 统计人数大于50时停止循环 Score = Val(InputBox(请输入学生成绩:) If Score = 60 Then PassN = PassN + 1 统计及格人数 n = n + 1 统计总人数 Sum = Sum + Score 统计总分 End If Next i Text1.Text = Str$(n) Text2.Text = Str$(PassN) Text3.Text = Str$(Sum / n) End Sub 2. DoLoop循环语句循环语句(用于控制循环次数未知)形式1: Do While|Unt

15、il 语句块语句块 Exit Do 语句块语句块 Loop形式2:Do 语句块语句块 Exit Do 语句块语句块Loop While|Until 例5.10(补)我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题可利用Do Loop循环求得,程序如下:Private Sub Command1_Click() x = 13 n = 0 Do While x n; (2) m除以n得余数r; (3)若r=0,则n为最大公约数结束;否则执行(4); (4)mn,nr,再重复执行(2)。 例 求 m=14 ,n=6 的最大公约数. If m n Then t =

16、m: m = n: n = t r=m mod n Do While (r 0) m=n n=r r= m mod n Loop Print 最大公约数最大公约数=“; n m n r 14 6 2 6 2 0辗转相减法 m=m-n mn n=n-m nm m、n为公约数 m=nDo While m n m n If m n Then 14 6 m = m n 8 6 Else 2 6 n = n m 2 4 End If 2 2Loop3.While-Wend结构形式如下: While 条件 循环体 Wend功能:当给定的“条件”为True时,执行循环体;否则,跳出循环体,执行Wend后面的

17、语句。注意:(1)该循环结构先测试条件,然后决定是否执行循环体。(2)如果“条件”总成立,则构成死循环,所以,在循环体中应该包含有修改“条件”的操作,使循环能正常结束。(3)当循环可以嵌套,不允许交叉。每个Wend和最近的While相匹配。例5.12(补) 小红今年12岁,她父亲比她大30岁,编程计算她的父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?代码如下:Private Sub Form_Click() Dim age As Integer age = 12 While age * 2 age + 30 age = age + 1 Wend Print 经过; age - 12; 年

18、 Print 小红父女的年龄分别是:; age + 30; 和; ageEnd Sub4. 循环的嵌套循环的嵌套 一个循环体内又包含了一个完整的循环结构称为循环的嵌套. 例5.13(补)打印九九乘法表. For i = 1 To 9 For j = 1 To 9 se = i & & j & = & i * j Print Tab(j - 1) * 9 + 1); se; Next j Print Next i思考:思考:打印上三角或下三角程序如何改动?要打印下三角打印上三角或下三角程序如何改动?要打印下三角?For j = 1 To i For ii =1 To 10 For jj=1 To

19、 20 Next ii Next jj For ii =1 To 10 For ii=1 To 20 Next ii Next ii For ii =1 To 10 For jj=1 To 20 Next jj Next ii For ii =1 To 10 Next ii For ii =1 To 10 Next ii 对于循环的嵌套,要注意以下事项:内循环变量与外循环变量不能同名;外循环必须完全包含内循环,不能交叉;不能从循环体外转向循环体内,反之则可以。正确错误 其它辅助控制语句其它辅助控制语句 1. Go To 语句语句 形式形式: Go To 标号标号|行号行号 作用:无条件地转移到

20、标号或行号指定的那行语句。 标号是一个字符序列,行号是一个数字序列。 2.Exit语句语句 多种形式: Exit For、Exit Do、Exit Sub、Exit Function等。 作用:退出某种控制结构的执行。 3. End语句语句 多种形式: End、 End If、 End Select、 End With、 End Type、 End Sub、 End Function、 作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。4.With 语句语句 形式如下: With 对象 语句块 End With 作用:对某个对象执行一系列的操作,而不用重复指出对

21、象的名称。 With Label1 .Height = 2000 .Width = 2000 .FontSize=22 .Caption = MyLabel End With Label1.Height = 2000 Label1.Width = 2000 Label1.FontSize=22 Label1.Caption = MyLabel 等价5.4 5.4 常用算法常用算法算法是对某个问题求解过程的描述。1. 1. 累加、连乘累加、连乘 1100的5或7的倍数的和 Sum = 0 For i = 1 To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then Su

22、m = Sum + i End If Next i Print Sum 310的乘积 t = 1 For i =3 To 10 t = t * i Next i Print t思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?例5.14(补) 求自然对数e的近似值,要求其误差小于0.00001,近似公式为: 该例题涉及两个问题: (1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。 (2)累加:e=e+t 循环体外对累加和的变量清零 e=0 连乘:n=n*i 循环体外对连乘积变量置1 n=1 定义Form_Click()事件过程如下:Priva

23、te Sub Form_Click() Dim i%, n&, t!, e! Cls e = 0: n = 1 e存放累加和、n存放阶乘 i = 0: t = 1 i计数器、t第i项的值 Do While t 0.00001 e = e + t: i = i + 1 累加、连乘 n = n * i: t = 1 / n Loop CurrentX = 200: CurrentY = 200 Print 计算了; i; 项的和是 ; eEnd Sub 2. 求素数求素数素数是一个大于2,除了1和自身外,不能被任何整数整除的整数。 判别某数m是否为素数最简单的方法是:对于m ,从 i=2,3,m-

24、1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。例5.15(补) 求100以内的素数。代码如下: For m = 2 To 100 For i = 2 To m - 1 If (m Mod i) = 0 Then GoTo NotNextM Next i Print m;NotNextM: Next mm是否为素数求100以内的素数思考:思考: 此例用Go To语句对非素数不作判断,若不用GoTo语句,如何修改程序? 3.3.穷举法穷举法 “穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。 例5.16(补) 百元买百

25、鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+z=100 3x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。 方法一:最简单三个未知数利用三重循环来实现。 方法二:从三个未知数的关系,利用两重循环来实现。4.4.递推法递推法 “递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。 例5.17(补) 猴子

26、吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃剩下桃子的一半多一个,到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子。设第n天的桃子数为xn,那么它是前一天的桃子数的xn-1 的一半减1,即xn = xn-1 /2-1,即 xn-1=( xn+1)*25.5.最小、最大值最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数

27、替换为最大值;依次逐一比较。例5.18(补) 随机产生10个100200之间的整数,求最大值。 Private Sub Command1_Click() Max = 100 For i = 1 To 10 x = Int(Rnd * 101 + 100) Print x; If x Max Then Max = x Next i Print Print 最大值=; MaxEnd Sub例5.19(补) 实际应用,求最短残料。有一根长度为321米的钢材料,要将它截取成两种规格a、b的长度分别为17米和27米的短料,每种至少1段,问分隔成a,b各多少段后,剩余的残料r最少?分析,该题利用“试凑法”

28、通过二重循环求残料r的最小值正数,残料不可能是负数。程序如下:Private Sub Command1_Click() Dim a%, b%, r!, ia%, ib% r = 321 最小值初值取钢材料的长度 For b = 1 To 321 27 b最多的段数 For a = 1 To 321 17 - b a最多的段数 t = 321 - b * 27 - a * 17 当前的残料 If t 0 And t r Then r = t 求最短的残料 ia = a 最短残料时a的段数 ib = b 最短残料时b的段数 End If Next a Next b Print ia, ib, rE

29、nd Sub常常 见见 错错 误误1. 不循环或死循环的问题不循环或死循环的问题 主要是循环条件、循环初值、循环终值、循环步长的设置有问题。2. 循环结构中缺少配对的结束语句循环结构中缺少配对的结束语句 For 缺少 配对的Next 3. 循环嵌套时循环嵌套时,内外循环交叉内外循环交叉4. 累加、连乘时,存放累加、连乘结果的变量赋初值问题累加、连乘时,存放累加、连乘结果的变量赋初值问题 (1)一重循环 在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。(2)多重循环 这要视具体问题分别对待。本章小结选择结构:if,selectcase, iif,choose循环结构: for,do

30、Loop语句,辅助语句(GoTo,Exit, End,Stop,WithEnd With)常用算法:累加,连乘,最大值,最小值,穷举,递推习题讲解1. 在窗体中添加一个命令按钮(Name属性为Command1),然后编写如下代码: Private Sub Command1_Click() s = 0 For k = 1 To 3 If k = 1 Then x = 1 ElseIf k = 2 Then x = 2 ElseIf k 4 Print 分支 2 Case Else Print Else 分支 End SelectEnd Sub程序运行后,如果在输入对话框中输入5,则窗体上显示的是

31、( )A)分支1 B)分支2 C)Else分支 D)程序出错3. 在窗体上画一个名称为Command1的命令按钮,然后编写如下事件过程:Private Sub Command1_Click() x = 0 n = InputBox() For i = 1 To n For j = 1 To i x = x + 1 Next j Next i Print xEnd Sub程序运行后,单击命令按钮,如果输入3,则在窗体上显示的内容是( ).A)3 B)4 C)5 D)64. 在窗体(Name属性为Form1)上画两个文本框(其Name属性分别为Text1和Text2)和一个命令按钮(Name 属性

32、为Command1),然后编写如下事件过程:Private Sub Command1_Click() a=Text1.Text+Text2.Text Print aEnd Sub程序运行后,在第一个文本框(Text1)和第二个文本框(Text2)中分别输入123和222,然后单击命令按钮,则输出结果为( )。A) 123222 B) 321123 C) 345 D) 2221235. 有如下程序: Private Sub Command1_Click() Dim s as integer s=0 i=1 While i=100 s=s+i Wend End Sub 运行后的输出结果是( )。

33、A)5050 B)5051 C)死循环,直到溢出 D)无穷大的数6. 以下叙述正确的是( )。A)SelectCase语句中的测试表达式可以是任何形式的表达式B)SelectCase语句中的测试表达式只能是数值表达式或字符串表达式C)在执行SelectCase语句时,所有Case子句均按出现的次序被顺序执行D)如下SelectCase语句中的Case表达式是错误的 SelectCasex Case1 to 10 EndSelect7. 下述程序的运行结果是( )。 j = 0Do While j30 j = (j+1)*(j+2) k=k+1LoopPrint k; jA)0 1 B)3 182 C)30 30 D)4 30

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号