《循环结构实验》PPT课件

《循环结构实验》PPT课件

ID:45374550

大小:722.50 KB

页数:43页

时间:2019-11-12

上传者:U-145848
《循环结构实验》PPT课件_第1页
《循环结构实验》PPT课件_第2页
《循环结构实验》PPT课件_第3页
《循环结构实验》PPT课件_第4页
《循环结构实验》PPT课件_第5页
资源描述:

《《循环结构实验》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

VisualBasic程序设计教程第三章 基本控制结构顺序结构程序虽然比较容易理解,但是不可能处理复杂的问题。计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的。必须利用选择结构等来解决实际应用中的各种问题。VB中主要通过If条件语句和Select情况语句来实现。它们都是对条件进行判断,根据判断结果,选择执行不同的分支。计算机最擅长的功能之一就是按规定的条件,重复执行某些操作。在实际应用中,经常遇到一些操作并不复杂,但需要反复多次处理的问题,比如要计算1+2+3…+10000,直接把这个求和的表达式用手工输入显然是不现实的。这类问题都可通过循环结构来方便地实现。 VB中提供了主要两类循环语句:For…Next循环语句(一般已知循环次数);Do…Loop条件型循环语句(一般未知循环次数)。有时,在程序中必须强迫改变程序的流程已脱离循环,VB也提供了几个可以影响执行程序流程的语句:ExitForExitDoGoto3.4循环结构程序设计 程序代码如下:PrivateSubCommand1_Click()DimS%,i%S=0‘累加前变量S为0(清零)Fori=1to100S=S+iNextiPrint"S=";SPrint"循环控制变量i=";iEndSub3.4.2For…Next循环语句例题3.13:计算1+2+3+4+…+100之和。程序分析:1到100的累加,可以看做从0开始,每次加一个数,重复加100次i=1S=1i=2S=3i=3S=6i=4S=10……i=100S=5050i=101S=5050求1-100之间奇数数之和,偶数之和;计算1*2*3*4*…*100 例题3.14:输出1-100中的能被3和5同时整除的整数的个数。程序分析:可以利用循环语句依次枚举1-100中的每个数,再对每个数进行判断,设置计数器,满足条件则把计数器加1。3.4.2For…Next循环语句程序代码如下:PrivateSubForm_Click()n=0‘累加前变量n为0(清零)DimiAsintegerFori=1To100If(iMod3=0)And(iMod5=0)ThenPrinti;"能够被";3;"和";5;"整除"n=n+1EndIfNextiPrint"n=";nEndSub 一般情况下,For…Next需要正常结束,即循环变量到达终值。但在某些情况下,可能在循环变量到达终值前需要退出循环,这可以通过ExitFor语句来实现。ExitFor3.4.2For…Next循环语句例如:PrivateSubForm_Click()Dimi!,j%Fori=1to100Step0.1j=j+1Ifi*j>5000ThenExitForNextiPrint"j=";jPrint"循环控制变量i=";iEndSub如果没有ExitFor语句,循环体应该被执行991次[Int((100-1)/0.1+1)],但在第220次循环时,i*j的值为23×220>5000,满足条件而退出当前循环,所以循环体实际被执行了220次。 Do…Loop循环语句-----比较Do循环用于控制循环次数未知的循环结构。格式1:Do[While|Until]<条件>语句块[ExitDo]语句块Loop格式1为先判断后执行,有可能一次也不执行;格式2为先执行后判断,至少执行一次。格式2:Do语句块[ExitDo]语句块Loop[While|Until]<条件> 例:求1+2+……+100的值PrivateSubForm_click()FontSize=30Sum=0n=1DoSum=Sum+nn=n+1LoopUntiln>100PrintSumEndSubPrivateSubForm_click()FontSize=30Sum=0n=1DoUntiln>100Sum=Sum+nn=n+1LoopPrintSumEndSub 例:输出如下图形1222333334444444555555555思考:若将其中的数字改为*,应如何修改代码?代码为:PrivateSubForm_click()FontSize=18Dima%,b%Fora=1To5PrintTab(40-3*a);Forb=1To2*a-1Printa;NextPrintNextEndSub PrivateSubForm_click()FontSize=18Dima%,b%Fora=1To5PrintTab(27-a);s="*"Forb=1To2*a-1Print"*";NextPrintNextEndSubPrivateSubForm_click()FontSize=18Dima%,b%Fora=1To5PrintTab(40-3*a);Forb=1To2*a-1Printa;NextPrintNextEndSub 例:输出如下图形12223333344444445555555556666666777778889思考:若将其中的数字改为*,应如何修改代码?代码为:PrivateSubForm_click()FontSize=18Dima%,b%Fora=1To9PrintTab(30+3*Abs(5-a));Forb=1To9-2*Abs(5-a)Printa;NextPrintNextEndSub PrivateSubForm_Click()FontSize=18Dima%,b%Fora=1To9PrintTab(30+Abs(4-a));Forb=1To7-2*Abs(4-a)Print"*";NextPrintNextEndSub代码为:PrivateSubForm_click()FontSize=18Dima%,b%Fora=1To9PrintTab(30+3*Abs(5-a));Forb=1To9-2*Abs(5-a)Printa;NextPrintNextEndSub 例题3.17:随机产生n个1-100(包括1和100)的整数,求它们的最大值、最小值和平均值。程序分析:设变量Max,用来存储最大值,先假设第一个数是最大的,把它赋给Max,以后输入的每一个数都与Max比较,把大的数存在Max中,最终Max中就存储了所有数的最大值,同样的方法可以求得最小值。平求均值只需要用累加和除以n程序代码如下:3.4.4应用举例 其他辅助控制语句GoTo语句无条件地转移到标号或行号指定的那行语句。GoTo{标号|行号}注意:标号是字符序列,首字符必须为字母,标号后应有冒号;行号是一个数字序列;例判断输入的数是否为素数素数就是除1和本身以外,不能被其他任何整数整除的数。根据此定义,判别某数m是否为素数最简单的方法就是依次用i=2~m-1去除,只要有一个数能整除m,m就不是素数;否则m是素数。要求一定范围内的素数,只要将m作为外循环体变量。 PrivateSubForm_Click()Dimn%,i%,min%,max%,s%,aver!n=Val(inputBox("输入随机产生数据个数:"))s=int(Rnd*100+1)'随机产生第一个数max=smin=saver=sPrint"第1个数是:"&sFori=2Tons=int(Rnd*100+1)'随机产生第2到n个数Print"第"&i&"个数是:"&sIfs>maxThenmax=s'获得到当前为止的最大数Ifs="9"ThenExitForEndIfNextiIfi>Len(p)ThenText2.Text="输入数据完全是数字"ElseText2.Text="输入数据不完全是数字"EndIfEndSub3.4.4应用举例 例题3.22:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析:逐一读取每一个字符,并对其类型进行判断。设置4个计数器分别记录字母、空格、数字的个数。程序代码如下:PrivateSubForm_Click()DimcAsString*1,tAsStringDimletters%,space%,digit%,others%,i%letters=0'设置计数器初值为0space=0digit=0others=03.4.4应用举例 t=inputBox("请输入字符串")Fori=1ToLen(t)c=Mid(t,i,1)IfLCase(c)>="a"AndLCase(c)<="z"Then'判断是否是字符letters=letters+1ElseIfc=""Then'判断是否是空格space=space+1ElseIfc>="0"Andc<="9"Then'判断是否是数字digit=digit+1Elseothers=others+1'其他字符EndIfNextiPrint"共有字符";letters;"个";"空格";space;"个";"数字";_digit;"个";"其他符号";others;"个"EndSub3.4.4应用举例 例题3.23:在窗体上输出9*9乘法表。程序分析:可以用双重循环打印9*9表,外循环用来控制行变化,内循环用于控制列变化。程序代码如下:PrivateSubForm_Click()DimiAsinteger,jAsintegerPrintTab(35);"9*9乘法表"Fori=1To9Forj=1ToiPrintStr(i)&"*"&Str(j)&"="&Str(i*j);Tab(9*j);NextjPrintNextiEndSub3.4.4应用举例 例题3.24:输出三角形图案,要求第一层由字母A组成,第二层由字母B组成,依次类推。程序分析:双重循环在程序中广泛使用,与例题3.23相同,打印图形一般用双重循环语句结构实现。程序代码如下:PrivateSubForm_click()DimsAsString*1DimnAsintegerDoWhileTruen=inputBox("请输入打印要打印图形的行数1-26")'Ifn>1Andn<26ThenExitDoEndIfLoop3.4.4应用举例 Fori=1Ton'每一层图案上要显示的数字PrintTab(25-i);s=Chr(Asc("A")+i-1)Forj=1To2*i-1'数组中元素存放对应的数字Prints;NextjPrintNextiEndSub3.4.4应用举例 例题3.25:兔子繁殖问题:第1个月买来1对小兔子,两个月后,这对兔子就会生1对小兔子,以后每个月都会生1对小兔子;而生下来的这对小兔子,两个月后又会开始生1对小兔子。依次类推,试计算前30个月每月的兔子对数?程序分析:仔细分析可以得出如下表:月份12345678…兔子对数1123581321…这是一组有规律变化的数字,假设第i月的兔子数对数为fi,第i-1月的兔子对数为f2,第i-2月兔子对数为f1,则fi=f1+f2。利用求得的数不断更新f1和f2的值就可以求出新的fi。这种不断用变量的旧值递推出新值的解决问题的方法叫做递推法。3.4.4应用举例 程序代码如下:PrivateSubForm_Click()DimiAsintegerDimf1AsLong,f2AsLong,fiAsLongf1=1f2=1Printf1,Printf2,Fori=3To30fi=f1+f2'第i-1个数和第i-2个数相加得到第i个数Printfi,'打印第i个数f1=f2f2=fiIfiMod5=0ThenPrint'每打印5个数字换行NextiEndSub3.4.4应用举例 例题3.26:猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存的桃子的一半多一个,到第7天早上要吃时只剩下一个了,问小猴第一天共摘下来多少个桃子。程序分析:假设猴子第i天要吃时还有x个桃子,则第i-1天应该有(x+1)*2个桃子,可以利用递推法算出第一天猴子摘了多少桃子3.4.4应用举例 程序代码如下:PrivateSubForm_Click()Dimn%,i%,x%x=1'第7天还剩一个桃子Print"第7天的桃子数为:1只"Fori=6To1Step-1'求第6到第1天的桃子数x=(x+1)*2'求第i天的桃子数print"第";i;"天的桃子数为:";x;"只"NextiEndSub3.4.4应用举例 例题3.27:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?程序分析:假设球的某一次反弹高度为h,则下一次反弹高度为h/2。把每次反弹与落下的距离累加得到经过的距离。3.4.4应用举例 程序代码如下:PrivateSubForm_Click()Dims!,h!,n%s=100h=s/2'求第一次反弹的高度Forn=2To10s=s+2*h'第n次落地时共经过的距离h=h/2'第n次反跳高度NextnPrint"小球经过的总的距离为";Round(s,2);"米"Print"小球第十次反弹高度为";Round(h,2);"米"EndSub3.4.4应用举例 例题3.28:用辗转相除法求两个自然数m,n的最大公约数和最小公倍数程序分析:辗转相除法,又称欧几里得算法。其原理为:两个整数的最大公约数等于其中较小的数和两数相除所得的余数的最大公约数。如252和105的最大公约数(21)也是42(252除105的余数)和105的最大公约数。3.4.4应用举例 程序代码如下:PrivateSubForm_Click()Dimn%,m%,n1%,m1%,t%,r%n=inputBox("输入第一个数","最大公约与最小公倍数")'获取数据m=inputBox("输入第二个数","最大公约与最小公倍数")n1=n'保存数据m1=mIfm0)Printm1;n1;"的最大公约数为";m'显示最大公约数Print"最小公倍数=";m1*n1/m'计算并显示最小公倍数EndSub3.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|≤ε或|f(xi)|≤ε时,xi+1就作为方程的近似根。对于求平方根,有如下条件:1、迭代初值x=0.5(估计)2、求a的平方根迭代公式3、迭代结束条件:|x1-x0|<10-73.4.4应用举例 程序代码如下:PrivateSubForm_Click()Dimx!,x0!,x1!,a!a=Val(inputBox("请输入正数a"))If(a<0)ThenPrint"数据输入错误!"ElseIf(a=0)Thenx=0Elsex0=a/2'取迭代初值(估计值)x1=0.5*(x0+a/x0)DoWhile(Abs(x1-x0)>0.0000001)x0=x1'为下一次迭代作准备x1=0.5*(x0+a/x0)Loopx=x1EndIfPrinta;“的平方根为";xEndSub3.4.4应用举例 例题3.30:歌德巴赫猜想:任何一个大于或等于六的偶数都可以分解成两个素数之和。程序分析:我们已经知道如何判断一个数是否是素数,那么我们可以将一个大于等于六的偶数表示为两个数的和,再判断这两个数是否都是素数。3.4.4应用举例 程序代码如下:PrivateSubForm_Click()DimiAsinteger,jAsinteger,kAsinteger,mAsintegerDimnAsinteger,m1Asinteger,m2Asinteger,numAsintegernum=Val(inputBox("请输入要验证的整数范围最大值(MAX)"))Fori=6TonumStep2Forj=3Toi/2k=int(Sqr(j))Form=2TokIfjModm=0ThenExitForNextmIfm>kThenn=i-jm1=int(Sqr(n))Form2=2Tom1IfnModm2=0ThenExitForNextm2Ifm2>m1ThenPrinti;"=";j;"+";n;EndIfNextjPrintNextiEndSub3.4.4应用举例 例题3.31:求解爱因斯坦阶梯问题:有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,刚好到达阶梯顶。问这个阶梯有多少阶?找出最少的阶梯数。程序分析:假设阶梯数为T,因为它是7的倍数,可将7作为T的初值,由第一个条件知,阶梯数必为奇数,故可每次递增14,逐个循环进行测试。测试条件“每步跨3阶,最后余2阶”可以写成:TMod3=2,其他条件依此类推。3.4.4应用举例 程序代码如下:PrivateSubForm_Click()DimT%T=7DoWhile(TMod3<>2OrTMod5<>4OrTMod6<>5)T=T+14LoopPrint"阶梯数至少为:";TEndSub3.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应用举例 程序代码如下:PrivateSubForm_Click()Dimx%,y%,z%,n%n=0'方案计数器Forx=0Toint(100/3)'母鸡可能的数量Fory=0Toint(100/2)'公鸡可能的数量Forz=0Toint(100/0.5)'小鸡可能的数量'循环体判断当前组合是否符合条件Ifx+y+z=100And3*x+2*y+0.5*z=100Thenn=n+1Print"第"&Str(n)&"种";"买"&Str(x)&"只母鸡";_Str(y)&"只公鸡";Str(z)&"只小鸡"EndIfNextzNextyNextxPrint"共有";n;"种买鸡方案"EndSub3.4.4应用举例

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭