收藏 分享(赏)

循环结构实验.ppt

上传人:wspkg9802 文档编号:6895442 上传时间:2019-04-25 格式:PPT 页数:43 大小:722.50KB
下载 相关 举报
循环结构实验.ppt_第1页
第1页 / 共43页
循环结构实验.ppt_第2页
第2页 / 共43页
循环结构实验.ppt_第3页
第3页 / 共43页
循环结构实验.ppt_第4页
第4页 / 共43页
循环结构实验.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、Visual Basic 程序设计教程,第三章,基本控制结构,顺序结构程序虽然比较容易理解,但是不可能处理复杂的问题。 计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的。必须利用选择结构等来解决实际应用中的各种问题。VB中主要通过If条件语句和Select情况语句来实现。它们都是对条件进行判断,根据判断结果,选择执行不同的分支。 计算机最擅长的功能之一就是按规定的条件,重复执行某些操作。在实际应用中,经常遇到一些操作并不复杂,但需要反复多次处理的问题,比如要计算1+2+3+10000,直接把这个求和的表达式用手工输入显然是不现实的。这类问题都可通过循环结构来方便地实现。,VB中提供了

2、主要两类循环语句:ForNext循环语句(一般已知循环次数);DoLoop条件型循环语句(一般未知循环次数)。有时,在程序中必须强迫改变程序的流程已脱离循环, VB也提供了几个可以影响执行程序流程的语句:Exit ForExit DoGoto,3.4 循环结构程序设计,程序代码如下: Private Sub Command1_Click()Dim S% ,i%S=0 累加前变量S为0(清零)For i=1 to 100S=S+iNext iPrint “ S= “ ;SPrint “循环控制变量 i=“; i End Sub,3.4.2 For Next循环语句,例题3.13:计算1+2+3+

3、4+100之和。 程序分析:1到100的累加,可以看做从0开始,每次加一个数,重复加100次,i=1 S=1 i=2 S=3 i=3 S=6 i=4 S=10 i=100 S=5050 i=101 S=5050,求1-100之间奇数数之和,偶数之和;计算1*2*3*4*100,例题3.14:输出1-100中的能被3和5同时整除的整数的个数。 程序分析:可以利用循环语句依次枚举1-100中的每个数,再对每个数进行判断,设置计数器,满足条件则把计数器加1。,3.4.2 For Next循环语句,程序代码如下: Private Sub Form_Click()n = 0 累加前变量n为0(清零)Di

4、m i As integerFor i = 1 To 100If (i Mod 3 = 0) And (i Mod 5 = 0) ThenPrint i; “能够被“; 3; “和“; 5; “整除“n = n + 1 End IfNext i Print “n=“; n End Sub,一般情况下, For Next 需要正常结束,即循环变量到达终值。但在某些情况下,可能在循环变量到达终值前需要退出循环,这可以通过Exit For 语句来实现。,Exit For,3.4.2 For Next循环语句,例如: Private Sub Form_Click()Dim i! ,j%For i=1

5、to 100 Step 0.1j = j +1If i*j5000 Then Exit ForNext iPrint “ j= “ ;jPrint “循环控制变量 i=“; i End Sub,如果没有Exit For 语句,循环体应该被执行991次Int(100-1)/0.1+1),但在第220次循环时,i*j的值为232205000,满足条件而退出当前循环,所以循环体实际被执行了220次。,DoLoop循环语句 -比较,Do循环用于控制循环次数未知的循环结构。 格式1: Do While|Until 语句块Exit Do 语句块 Loop格式1为先判断后执行,有可能一次也不执行; 格式2为

6、先执行后判断,至少执行一次。,格式2: Do 语句块Exit Do语句块 Loop While|Until ,例:求1+2+100的值,Private Sub Form_click()FontSize = 30Sum = 0n = 1DoSum = Sum + nn = n + 1Loop Until n 100Print Sum End Sub,Private Sub Form_click()FontSize = 30Sum = 0n = 1Do Until n 100Sum = Sum + nn = n + 1LoopPrint Sum End Sub,例:输出如下图形,12 2 23 3

7、 3 3 34 4 4 4 4 4 45 5 5 5 5 5 5 5 5思考:若将其中的数字改为*,应如何修改代码?,代码为: Private Sub Form_click()FontSize = 18Dim a%, b%For a = 1 To 5Print Tab(40 - 3 * a);For b = 1 To 2 * a - 1Print a;NextPrintNext End Sub,Private Sub Form_click()FontSize = 18Dim a%, b% For a = 1 To 5Print Tab(27 - a);s = “*“For b = 1 To 2

8、 * a - 1Print “*“;NextPrintNext End Sub,Private Sub Form_click()FontSize = 18Dim a%, b%For a = 1 To 5Print Tab(40 - 3 * a);For b = 1 To 2 * a - 1Print a;NextPrintNext End Sub,例:输出如下图形,12 2 23 3 3 3 34 4 4 4 4 4 45 5 5 5 5 5 5 5 56 6 6 6 6 6 67 7 7 7 78 8 89 思考:若将其中的数字改为*,应如何修改代码?,代码为: Private Sub Fo

9、rm_click()FontSize = 18Dim a%, b%For a = 1 To 9Print Tab(30 + 3 * Abs(5 - a);For b = 1 To 9 - 2 * Abs(5 - a)Print a;NextPrintNext End Sub,Private Sub Form_Click() FontSize = 18Dim a%, b%For a = 1 To 9Print Tab(30 + Abs(4 - a);For b = 1 To 7 - 2 * Abs(4 - a)Print “*“;NextPrintNext End Sub,代码为: Privat

10、e Sub Form_click()FontSize = 18Dim a%, b%For a = 1 To 9Print Tab(30 + 3 * Abs(5 - a);For b = 1 To 9 - 2 * Abs(5 - a)Print a;NextPrintNext End Sub,例题3.17:随机产生n个1100(包括1和100)的整数,求它们的最大值、最小值和平均值。程序分析:设变量Max,用来存储最大值,先假设第一个数是最大的,把它赋给Max,以后输入的每一个数都与Max比较,把大的数存在Max中,最终Max中就存储了所有数的最大值,同样的方法可以求得最小值。平求均值只需要用累

11、加和除以n程序代码如下:,3.4.4应用举例,其他辅助控制语句,Go To 语句 无条件地转移到标号或行号指定的那行语句。Go To 标号|行号 注意:标号是字符序列,首字符必须为字母,标号后应有冒号;行号是一个数字序列; 例 判断输入的数是否为素数 素数就是除1和本身以外,不能被其他任何整数整除的数。根据此定义,判别某数m是否为素数最简单的方法就是依次用i=2m-1去除,只要有一个数能整除m,m就不是素数;否则m是素数。,要求一定范围内的素数,只要将m作为外循环体变量。,Private Sub Form_Click()Dim n%, i%, min%, max%, s%, aver!n =

12、Val(inputBox(“输入随机产生数据个数:“)s = int(Rnd * 100 + 1) 随机产生第一个数max = smin = saver = sPrint “第1个数是:“ aver End Sub,3.4.4应用举例,例题3.18:求s=a+aa+aaa+aaaa+aa.a的值,其中a(1-9)中的一个数字。例如2+22+222+2222+22222程序分析:我们可以用循环累加的方法来完成求和的计算,设s为累加和,t为每次要加的数(aaaaa)。则本题的关键在于如何计算每次要加的t,由于a、aa、aaa、 是一组有规律变化的数字,分析可知aaa=aa*10*a、 aaaa=a

13、aa*10+a ,所以当前要加的t,可以由上一次加的t计算得出。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim n%, i%Dim s As Long, t As Long, a As Longs = 0t = 0a = inputBox(“请输入数据1-9 “)n = inputBox(“请输入n“)For i = 1 To nt = t + as = s + tt = t * 10Next iPrint “a+aa+.aaaaaa=“; s End Sub,3.4.4应用举例,例题3.19:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位

14、数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,153=13+53+33。编程找出所有的水仙花数,程序分析:可以用循环的方法依次判断所有的三位数。在每次循环中,取出一个三位数的个、十、百位按照水仙花数的定义公式进行判断。这种判断所有可能性的方法叫做穷举法。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim x%, y%, z%, n%For n = 100 To 999 测试所有可能的3位数x = int(n / 100) 计算百位数y = int(n - x * 100) / 10) 计算十位数z = n - int(n / 10)

15、 * 10 计算个位数If n = x 3 + y 3 + z 3 Then 判断是否满足水仙花数条件Print Str(x) + “3“ + “+“; Str(y) + “3“ _+ “+“ + Str(z) + “3“ + “=“ + Str(n) + _“是水仙花数“ 打印水仙花数End IfNext n End Sub,3.4.4应用举例,例题3.20 :求具有abcd=(ab+cd)2性质的四位数。例如:3025将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025 程序分析:与上例相同,可以采用穷举法,对所有四位数进行判断,从而筛选出符合这种性质的四位

16、数。 程序代码如下: Private Sub Form_Activate()Dim n%, ab “)的平方“End IfNext n End Sub,3.4.4应用举例,例题3.21:在一个文本框中输入一个字符串,判断输入信息是否完全是数字形式。程序分析:可以用循环语句从字符串中依次取出每个字符,对该字符进行判断,如果不是数字形式,则退出循环。最后通过循环是否正常结束来判断输入信息是否完全是数字形式。程序代码如下:Private Sub Command1_Click()Dim p As String, q As String * 1Dim i As integerp = Trim(Text1

17、.Text) 获取输入字符串,3.4.4应用举例,For i = 1 To Len(p) 从输入字符串中自后向前依次取出每个字符q = Mid(p, i, 1)If q = “9“ ThenExit ForEnd IfNext iIf i Len(p) ThenText2.Text = “输入数据完全是数字“ ElseText2.Text = “输入数据不完全是数字“End If End Sub,3.4.4应用举例,例题3.22:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析:逐一读取每一个字符,并对其类型进行判断。设置4个计数器分别记录字母、空格、数字的个数。程序

18、代码如下:Private Sub Form_Click()Dim c As String * 1, t As StringDim letters%, space%, digit%, others%, i%letters = 0 设置计数器初值为0space = 0digit = 0others = 0,3.4.4应用举例,t = inputBox(“请输入字符串“)For i = 1 To Len(t)c = Mid(t, i, 1)If LCase(c) = “a“ And LCase(c) = “0“ And c = “9“ Then 判断是否是数字digit = digit + 1Els

19、eothers = others + 1 其他字符End IfNext iPrint “共有字符“; letters; “个“; “空格“; space; “个“; “数字“; _digit; “个“; “其他符号“; others; “个“ End Sub,3.4.4应用举例,例题3.23:在窗体上输出9*9乘法表。 程序分析:可以用双重循环打印9*9表,外循环用来控制行变化,内循环用于控制列变化。 程序代码如下: Private Sub Form_Click()Dim i As integer, j As integerPrint Tab(35); “9*9 乘法表“For i = 1 T

20、o 9For j = 1 To iPrint Str(i) Next jPrintNext i End Sub,3.4.4应用举例,例题3.24:输出三角形图案,要求第一层由字母A组成,第二层由字母B组成,依次类推。 程序分析:双重循环在程序中广泛使用,与例题3.23相同,打印图形一般用双重循环语句结构实现。 程序代码如下: Private Sub Form_click() Dim s As String * 1 Dim n As integer Do While Truen = inputBox(“请输入打印要打印图形的行数1-26“) If n 1 And n 26 ThenExit Do

21、End If Loop,3.4.4应用举例,For i = 1 To n 每一层图案上要显示的数字Print Tab(25 - i);s = Chr(Asc(“A“) + i - 1)For j = 1 To 2 * i - 1 数组中元素存放对应的数字Print s;Next jPrint Next i End Sub,3.4.4应用举例,例题3.25:兔子繁殖问题:第1个月买来1对小兔子,两个月后,这对兔子就会生1对小兔子,以后每个月都会生1对小兔子;而生下来的这对小兔子,两个月后又会开始生1对小兔子。依次类推,试计算前30个月每月的兔子对数?程序分析:仔细分析可以得出如下表: 月份 1

22、2 3 4 5 6 7 8 兔子对数 1 1 2 3 5 8 13 21 这是一组有规律变化的数字,假设第i月的兔子数对数为fi,第i-1月的兔子对数为f2,第i-2月兔子对数为f1,则fi=f1+f2。利用求得的数不断更新f1和f2的值就可以求出新的fi。这种不断用变量的旧值递推出新值的解决问题的方法叫做递推法。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim i As integerDim f1 As Long, f2 As Long, fi As Longf1 = 1f2 = 1Print f1,Print f2,For i = 3 To 30

23、fi = f1 + f2 第i-1个数和第i-2个数相加得到第i个数Print fi, 打印第i个数f1 = f2 f2 = fiIf i Mod 5 = 0 Then Print 每打印5个数字换行Next i End Sub,3.4.4应用举例,例题3.26:猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存的桃子的一半多一个,到第7天早上要吃时只剩下一个了,问小猴第一天共摘下来多少个桃子。程序分析:假设猴子第i天要吃时还有x个桃子,则第i-1天应该有(x+1)*2个桃子,可以利用递推法算出第一天猴子摘了多少桃子,3.4.4应用

24、举例,程序代码如下: Private Sub Form_Click()Dim n%,i%,x%x=1 第7天还剩一个桃子Print “第7天的桃子数为:1只“For i=6 To 1 Step -1 求第6到第1天的桃子数 x=(x+1)*2 求第i天的桃子数print “第“; i ;“天的桃子数为:“;x;“只“Next i End Sub,3.4.4应用举例,例题3.27:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?程序分析:假设球的某一次反弹高度为h ,则下一次反弹高度为h/2。把每次反弹与落下的距离累加得到经

25、过的距离。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim s!, h!, n%s = 100h = s / 2 求第一次反弹的高度For n = 2 To 10s = s + 2 * h 第n次落地时共经过的距离h = h / 2 第n次反跳高度Next nPrint “小球经过的总的距离为“; Round(s, 2); “米“Print “小球第十次反弹高度为“; Round(h, 2); “米“ End Sub,3.4.4应用举例,例题3.28:用辗转相除法求两个自然数m,n的最大公约数和最小公倍数程序分析:辗转相除法,又称欧几里得算法。其原理

26、为:两个整数的最大公约数等于其中较小的数和两数相除所得的余数的最大公约数。如 252 和 105的最大公约数(21)也是42(252除105的余数)和105的最大公约数。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim n%, m%, n1%, m1%, t%, r%n = inputBox(“输入第一个数“, “最大公约与最小公倍数“) 获取数据m = inputBox(“输入第二个数“, “最大公约与最小公倍数“)n1 = n 保存数据m1 = mIf m 0)Print m1; n1; “的最大公约数为“; m 显示最大公约数Print “最小

27、公倍数=“; m1 * n1 / m 计算并显示最小公倍数 End Sub,3.4.4应用举例,例题3.29:利用牛顿迭代法求某个数a的平方根,要求精确到10-7。 程序分析:牛顿迭代法求f(x)=0的根是在根的附近找一个初值作为x0,过x0做方程的切线,与x 轴的交点为x1,再过x1作切线,交x轴于点x2,.如右图,可以知道,只要给定一个初始值x,通过以上操作,可不断的得到新的值x,并且x无限的接近函数在x轴的交点,即方程的根。所以经过若干次迭代后,可得到方程较高精度的近似根。牛顿切线法迭代公式为xi+1 = xi f(xi)/f(xi)其中:f(xi)是f(xi)的导数,当|xi+1-xi

28、|或|f(xi)| 时, xi+1就作为方程的近似根。对于求平方根,有如下条件:1、迭代初值 x=0.5(估计)2、求a的平方根迭代公式 3、迭代结束条件: | x1-x0|10-7,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim x!, x0!, x1!, a!a = Val(inputBox(“请输入正数a“)If (a 0.0000001)x0 = x1 为下一次迭代作准备x1 = 0.5 * (x0 + a / x0)Loopx = x1End IfPrint a; “的平方根为“; x End Sub,3.4.4应用举例,例题3.30: 歌

29、德巴赫猜想:任何一个大于或等于六的偶数都可以分解成两个素数之和。程序分析:我们已经知道如何判断一个数是否是素数,那么我们可以将一个大于等于六的偶数表示为两个数的和,再判断这两个数是否都是素数。,3.4.4应用举例,程序代码如下: Private Sub Form_Click() Dim i As integer, j As integer, k As integer, m As integer Dim n As integer, m1 As integer, m2 As integer, num As integer num = Val(inputBox(“请输入要验证的整数范围最大值(MAX

30、)“) For i = 6 To num Step 2For j = 3 To i/2k = int(Sqr(j)For m = 2 To kIf j Mod m = 0 Then Exit ForNext mIf m k Thenn = i - jm1 = int(Sqr(n)For m2 = 2 To m1If n Mod m2 = 0 Then Exit ForNext m2If m2 m1 Then Print i; “=“; j; “+“; n;End IfNext jPrint Next i End Sub,3.4.4应用举例,例题3.31: 求解爱因斯坦阶梯问题:有一阶梯,每步跨

31、2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,刚好到达阶梯顶。问这个阶梯有多少阶?找出最少的阶梯数。程序分析:假设阶梯数为T,因为它是7的倍数,可将7作为T的初值,由第一个条件知,阶梯数必为奇数,故可每次递增 14,逐个循环进行测试。测试条件“每步跨 3阶,最后余2阶”可以写成:T Mod 3 = 2,其他条件依此类推。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim T%T = 7Do While (T Mod 3 2 Or T Mod 5 4 Or T Mod 6 5)T = T + 14L

32、oopPrint “阶梯数至少为:“; T End Sub,3.4.4应用举例,例题3.32:百元买百鸡问题。假设母鸡每只3元,公鸡每只2元,小鸡每只5角。现在要用100元钱买100只鸡,编程列出所有可能的买鸡方案。程序分析:假设母鸡、公鸡、小鸡各为x 、y、 z只,购鸡方案实际上就是求满足条件X+y+z=100和3x+2y+0.5z=100的x、y、z的组合。通过多重循环可以得到x、y、z的所有组合。,3.4.4应用举例,程序代码如下: Private Sub Form_Click()Dim x%, y%, z%, n%n = 0 方案计数器For x = 0 To int(100 / 3) 母鸡可能的数量For y = 0 To int(100 / 2) 公鸡可能的数量For z = 0 To int(100 / 0.5) 小鸡可能的数量循环体判断当前组合是否符合条件If x + y + z = 100 And 3 * x + 2 * y + 0.5 * z = 100 Thenn = n + 1Print “第“ “种买鸡方案“ End Sub,3.4.4应用举例,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 中学实验

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报