《循环结构实验》PPT课件.ppt

上传人:小飞机 文档编号:5508023 上传时间:2023-07-15 格式:PPT 页数:43 大小:722.50KB
返回 下载 相关 举报
《循环结构实验》PPT课件.ppt_第1页
第1页 / 共43页
《循环结构实验》PPT课件.ppt_第2页
第2页 / 共43页
《循环结构实验》PPT课件.ppt_第3页
第3页 / 共43页
《循环结构实验》PPT课件.ppt_第4页
第4页 / 共43页
《循环结构实验》PPT课件.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《《循环结构实验》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《循环结构实验》PPT课件.ppt(43页珍藏版)》请在三一办公上搜索。

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

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

3、序分析:1到100的累加,可以看做从0开始,每次加一个数,重复加100次,i=1 S=1 i=2 S=3i=3 S=6i=4 S=10i=100 S=5050i=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(清零)Dim i As integer For

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

5、 Next i Print j=;j Print 循环控制变量 i=;iEnd 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为先执行后判断,至少执行一次。,格式2:Do 语句块 Exit Do 语句块Loop While|Until,例:求

6、1+2+100的值,Private Sub Form_click()FontSize=30 Sum=0 n=1 Do Sum=Sum+n n=n+1 Loop Until n 100 Print SumEnd Sub,Private Sub Form_click()FontSize=30 Sum=0 n=1 Do Until n 100 Sum=Sum+n n=n+1 Loop Print SumEnd Sub,例:输出如下图形,1 2 2 2 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5思考:若将其中的数字改为*,应如何修改代码?,代码为:Private

7、 Sub Form_click()FontSize=18 Dim a%,b%For a=1 To 5 Print Tab(40-3*a);For b=1 To 2*a-1 Print a;Next Print NextEnd Sub,Private Sub Form_click()FontSize=18 Dim a%,b%For a=1 To 5 Print Tab(27-a);s=*For b=1 To 2*a-1 Print*;Next Print NextEnd Sub,Private Sub Form_click()FontSize=18 Dim a%,b%For a=1 To 5 P

8、rint Tab(40-3*a);For b=1 To 2*a-1 Print a;Next Print NextEnd Sub,例:输出如下图形,1 2 2 2 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 8 8 8 9思考:若将其中的数字改为*,应如何修改代码?,代码为:Private Sub Form_click()FontSize=18 Dim a%,b%For a=1 To 9 Print Tab(30+3*Abs(5-a);For b=1 To 9-2*Abs(5-a)Print a;Next

9、Print NextEnd Sub,Private Sub Form_Click()FontSize=18 Dim a%,b%For a=1 To 9 Print Tab(30+Abs(4-a);For b=1 To 7-2*Abs(4-a)Print*;Next Print NextEnd Sub,代码为:Private Sub Form_click()FontSize=18 Dim a%,b%For a=1 To 9 Print Tab(30+3*Abs(5-a);For b=1 To 9-2*Abs(5-a)Print a;Next Print NextEnd Sub,例题3.17:随机

10、产生n个1100(包括1和100)的整数,求它们的最大值、最小值和平均值。程序分析:设变量Max,用来存储最大值,先假设第一个数是最大的,把它赋给Max,以后输入的每一个数都与Max比较,把大的数存在Max中,最终Max中就存储了所有数的最大值,同样的方法可以求得最小值。平求均值只需要用累加和除以n程序代码如下:,3.4.4应用举例,其他辅助控制语句,Go To 语句 无条件地转移到标号或行号指定的那行语句。Go To 标号|行号注意:标号是字符序列,首字符必须为字母,标号后应有冒号;行号是一个数字序列;例 判断输入的数是否为素数素数就是除1和本身以外,不能被其他任何整数整除的数。根据此定义,

11、判别某数m是否为素数最简单的方法就是依次用i=2m-1去除,只要有一个数能整除m,m就不是素数;否则m是素数。,要求一定范围内的素数,只要将m作为外循环体变量。,Private Sub Form_Click()Dim n%,i%,min%,max%,s%,aver!n=Val(inputBox(输入随机产生数据个数:)s=int(Rnd*100+1)随机产生第一个数 max=s min=s aver=s Print 第1个数是:averEnd Sub,3.4.4应用举例,例题3.18:求s=a+aa+aaa+aaaa+aa.a的值,其中a(1-9)中的一个数字。例如2+22+222+2222+

12、22222 程序分析:我们可以用循环累加的方法来完成求和的计算,设s为累加和,t为每次要加的数(aaaaa)。则本题的关键在于如何计算每次要加的t,由于a、aa、aaa、是一组有规律变化的数字,分析可知aaa=aa*10*a、aaaa=aaa*10+a,所以当前要加的t,可以由上一次加的t计算得出。,3.4.4应用举例,程序代码如下:Private Sub Form_Click()Dim n%,i%Dim s As Long,t As Long,a As Long s=0 t=0 a=inputBox(请输入数据1-9)n=inputBox(请输入n)For i=1 To n t=t+a s=

13、s+t t=t*10 Next i Print a+aa+.aaaaaa=;sEnd Sub,3.4.4应用举例,例题3.19:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,153=13+53+33。编程找出所有的水仙花数,程序分析:可以用循环的方法依次判断所有的三位数。在每次循环中,取出一个三位数的个、十、百位按照水仙花数的定义公式进行判断。这种判断所有可能性的方法叫做穷举法。,3.4.4应用举例,程序代码如下:Private Sub Form_Click()Dim x%,y%,z%,n%For n=100 To 99

14、9 测试所有可能的3位数 x=int(n/100)计算百位数 y=int(n-x*100)/10)计算十位数 z=n-int(n/10)*10 计算个位数 If n=x 3+y 3+z 3 Then 判断是否满足水仙花数条件 Print Str(x)+3+;Str(y)+3 _+Str(z)+3+=+Str(n)+_ 是水仙花数 打印水仙花数 End If Next nEnd Sub,3.4.4应用举例,例题3.20:求具有abcd=(ab+cd)2性质的四位数。例如:3025将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025程序分析:与上例相同,可以采用穷举

15、法,对所有四位数进行判断,从而筛选出符合这种性质的四位数。程序代码如下:Private Sub Form_Activate()Dim n%,ab)的平方 End If Next nEnd Sub,3.4.4应用举例,例题3.21:在一个文本框中输入一个字符串,判断输入信息是否完全是数字形式。程序分析:可以用循环语句从字符串中依次取出每个字符,对该字符进行判断,如果不是数字形式,则退出循环。最后通过循环是否正常结束来判断输入信息是否完全是数字形式。程序代码如下:Private Sub Command1_Click()Dim p As String,q As String*1 Dim i As i

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

17、个数。程序代码如下:Private Sub Form_Click()Dim c As String*1,t As String Dim letters%,space%,digit%,others%,i%letters=0 设置计数器初值为0 space=0 digit=0 others=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+1 Else others=others+1 其他字符 End If

18、Next i Print 共有字符;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 integer Print Tab(35);9*9 乘法表 For i=1 To 9 For j=1 To i Print Str(i)Next j Print Next iEnd Sub,3.4.4应用举

19、例,例题3.24:输出三角形图案,要求第一层由字母A组成,第二层由字母B组成,依次类推。程序分析:双重循环在程序中广泛使用,与例题3.23相同,打印图形一般用双重循环语句结构实现。程序代码如下:Private Sub Form_click()Dim s As String*1Dim n As integerDo While True n=inputBox(请输入打印要打印图形的行数1-26)If n 1 And n 26 Then Exit Do End IfLoop,3.4.4应用举例,For i=1 To n 每一层图案上要显示的数字 Print Tab(25-i);s=Chr(Asc(A

20、)+i-1)For j=1 To 2*i-1 数组中元素存放对应的数字 Print s;Next j PrintNext iEnd Sub,3.4.4应用举例,例题3.25:兔子繁殖问题:第1个月买来1对小兔子,两个月后,这对兔子就会生1对小兔子,以后每个月都会生1对小兔子;而生下来的这对小兔子,两个月后又会开始生1对小兔子。依次类推,试计算前30个月每月的兔子对数?程序分析:仔细分析可以得出如下表:月份12345678兔子对数1123581321这是一组有规律变化的数字,假设第i月的兔子数对数为fi,第i-1月的兔子对数为f2,第i-2月兔子对数为f1,则fi=f1+f2。利用求得的数不断更

21、新f1和f2的值就可以求出新的fi。这种不断用变量的旧值递推出新值的解决问题的方法叫做递推法。,3.4.4应用举例,程序代码如下:Private Sub Form_Click()Dim i As integer Dim f1 As Long,f2 As Long,fi As Long f1=1 f2=1 Print f1,Print f2,For i=3 To 30 fi=f1+f2 第i-1个数和第i-2个数相加得到第i个数 Print fi,打印第i个数 f1=f2 f2=fi If i Mod 5=0 Then Print 每打印5个数字换行 Next iEnd Sub,3.4.4应用举

22、例,例题3.26:猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存的桃子的一半多一个,到第7天早上要吃时只剩下一个了,问小猴第一天共摘下来多少个桃子。程序分析:假设猴子第i天要吃时还有x个桃子,则第i-1天应该有(x+1)*2个桃子,可以利用递推法算出第一天猴子摘了多少桃子,3.4.4应用举例,程序代码如下: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天的

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

24、Print 小球经过的总的距离为;Round(s,2);米 Print 小球第十次反弹高度为;Round(h,2);米End Sub,3.4.4应用举例,例题3.28:用辗转相除法求两个自然数m,n的最大公约数和最小公倍数 程序分析:辗转相除法,又称欧几里得算法。其原理为:两个整数的最大公约数等于其中较小的数和两数相除所得的余数的最大公约数。如 252 和 105的最大公约数(21)也是42(252除105的余数)和105的最大公约数。,3.4.4应用举例,程序代码如下:Private Sub Form_Click()Dim n%,m%,n1%,m1%,t%,r%n=inputBox(输入第一

25、个数,最大公约与最小公倍数)获取数据 m=inputBox(输入第二个数,最大公约与最小公倍数)n1=n 保存数据 m1=m If m 0)Print m1;n1;的最大公约数为;m 显示最大公约数 Print 最小公倍数=;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无限的

26、接近函数在x轴的交点,即方程的根。所以经过若干次迭代后,可得到方程较高精度的近似根。牛顿切线法迭代公式为 xi+1=xi f(xi)/f(xi)其中:f(xi)是f(xi)的导数,当|xi+1-xi|或|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

27、=0.5*(x0+a/x0)Loop x=x1 End If Print a;“的平方根为;xEnd Sub,3.4.4应用举例,例题3.30:歌德巴赫猜想:任何一个大于或等于六的偶数都可以分解成两个素数之和。程序分析:我们已经知道如何判断一个数是否是素数,那么我们可以将一个大于等于六的偶数表示为两个数的和,再判断这两个数是否都是素数。,3.4.4应用举例,程序代码如下:Private Sub Form_Click()Dim i As integer,j As integer,k As integer,m As integerDim n As integer,m1 As integer,m2

28、As integer,num As integernum=Val(inputBox(请输入要验证的整数范围最大值(MAX)For i=6 To num Step 2 For j=3 To i/2 k=int(Sqr(j)For m=2 To k If j Mod m=0 Then Exit For Next m If m k Then n=i-j m1=int(Sqr(n)For m2=2 To m1 If n Mod m2=0 Then Exit For Next m2 If m2 m1 Then Print i;=;j;+;n;End If Next j PrintNext iEnd Su

29、b,3.4.4应用举例,例题3.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=7 Do While(T Mod 3 2 Or T

30、 Mod 5 4 Or T Mod 6 5)T=T+14 Loop Print 阶梯数至少为:;TEnd 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 Then n=n+1 Print 第 种买鸡方案End Sub,3.4.4应用举例,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号