第5章设计循环结构程序讲课资料

上传人:youn****329 文档编号:136944494 上传时间:2020-07-04 格式:PPT 页数:51 大小:398.50KB
返回 下载 相关 举报
第5章设计循环结构程序讲课资料_第1页
第1页 / 共51页
第5章设计循环结构程序讲课资料_第2页
第2页 / 共51页
第5章设计循环结构程序讲课资料_第3页
第3页 / 共51页
第5章设计循环结构程序讲课资料_第4页
第4页 / 共51页
第5章设计循环结构程序讲课资料_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第5章设计循环结构程序讲课资料》由会员分享,可在线阅读,更多相关《第5章设计循环结构程序讲课资料(51页珍藏版)》请在金锄头文库上搜索。

1、第5章设计循环结构程序,VisualBasic程序设计教程,VisualBasic程序设计教程,2,循环结构又称重复结构。本章主要介绍:逻辑表达式For/Next语句Do/Loop语句While/Wend语句循环的嵌套使用。,VisualBasic程序设计教程,3,循环结构是根据条件来决定某段代码是否重复执行。循环结构中一种常用的流程可以表示如图:条件满足就执行a块程序段然后再进行条件判别如果满足条件,则继续执行a块程序段直到条件不满足,才执行a块后面的程序。,5.1概述,VisualBasic程序设计教程,4,其中的a程序块段称为循环体。条件使用逻辑表达式。循环的另一种形式是把判断条件放在循

2、环体之后。,VisualBasic程序设计教程,6,循环有两种类型:计数控制控制累计执行循环体的次数次数已到则结束循环如1+2+3+100或98+96+94+4+2事态控制由某些条件决定循环结束。如计算一系列正整数之和,遇负数停止循环。也可以在一个循环过程中同时使用这两种类型,VisualBasic程序设计教程,7,【例5-1】设计一个判断素数的程序。若不是素数,要求分解为a*b的形式控件:1个文本框和1个命令按钮事件:命令按钮的Click。首先要了解什么是素数。素数是指除了1和自身外,不能被其它整数整除的正整数。判断A是否为素数的基本方法是:将A分别除以2、3、A-1,若都不能整除,则它为素

3、数。判断A被i整除可以采用表达式:AModi=0或:A/i=Ai或:A/i=Int(A/i),5.2判断素数,VisualBasic程序设计教程,8,OptionExplicitPrivateSubCommand1_Click()DimAAsLong,iAsIntegerA存放要判断的数。i取值为2A-1DimFlagAsBooleanFlag作素数标志,False时,表示不是素数A=Val(Text1.Text)Flag=True先设A是素数,当A2或能被i整除时,再置为FalseIfA2ThenFlag=FalseA2,不是素数Elsei=2DoWhilei=A-1IfAModi=0The

4、nFlag=False:ExitDoA能被i整除,则不是素数i=i+1LoopEndIfIfFlagThenMsgBoxA是素数Else此时表示程序运行是通过ExitFor转出来的PrintA;不是素数EndIfElsePrintA;不是素数EndIf,VisualBasic程序设计教程,25,5.5.1Do/Loop语句对只知道循环终止条件,可采用Do/Loop循环For/Next语句可改写成Do/Loop循环,反之则不然。Do/Loop语句有五种表示形式,它们的格式为:,5.5使用Do/Loop循环语句,VisualBasic程序设计教程,26,1执行过程(1)对格式一和二,VB将先判断条

5、件,再执行循环体。(2)对格式三和四,先执行循环体,再判断条件。循环体至少执行一次。(3)对用While的语句,当条件满足(True)时,执行循环体。(4)对用Until的语句,当条件不满足(False)时,执行循环体。(5)格式五的循环体内必须存在ExitDo语句,否则会出现死循环。若程序运行出现死循环,同样可用CtrlBreak暂停程序执行。,VisualBasic程序设计教程,27,2关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现3关于循环体循环体是一条或多条语句可以包括分支结构和循环结构。可以写成一行或多行。循环体中应有改变循环条件的语句,以

6、避免出现死循环。,VisualBasic程序设计教程,28,5.5.1Do/Loop语句-编程序:求n!,VisualBasic程序设计教程,29,【例5-6】在文本框中输入两个整数,求它们的最大公约数和最小公倍数。求最大公约数可用辗转相除法。该方法的基本思想是使用带余除法:(1)A除以B,得余数为R1;(2)若R10,则B为最大公约数。若R10,则B赋值给A,R1赋值给B,求余数R2;若R20,则继续以上步骤。,VisualBasic程序设计教程,30,(3)经过有限(n+1)步后,Rn+1=0。这时A和B的最大公约数是Rn。最小公倍数为A*B/Rn。该算法循环次数未知,但循环条件已知:余数

7、不为0。因此适用于Do/Loop语句编程。其循环体为:把上一个B作为新的A,把上一个余数作为新的B,求出新余数。,VisualBasic程序设计教程,31,5.5.1Do/Loop语句求最大公约数和最小公倍数PrivateSubCommand1_Click()DimAAsLong,BAsLong,RAsLongA=Val(Text1.Text)B=Val(Text2.Text)R=AModBDoWhileR0A=B:B=RR=AModBLoopMsgBox最大公约数=Max,Min=;Min,Average=;Round(Average,3)EndSub当输入23、41、35、61、12、1、

8、7、-1后,运行结果:Max=61Min=1Average=25.714,VisualBasic程序设计教程,34,5.5.2ExitDo语句ExitDo是跳出Do/Loop循环的语句跳出循环后,将执行Loop语句后面的语句。ExitDo语句同样也往往与If语句合用如求阶乘的程序片断为:N=Val(InputBox(n=)Result=1:i=1DoResult=Result*ii=i+1:IfiNThenExitDoLoopMsgBoxNPiEndSub在单击命令按钮后,若精度用缺省值0.0000001,则显示3.1415924535898。,VisualBasic程序设计教程,38,循环结

9、构中可以嵌套循环当循环体中包含了循环时,称为循环嵌套,或称为多重循环。循环体中包含的循环语句可以与外循环相同,也可以不同。嵌套一层称为二重循环。多重循环中遇到ExitFor(Do),只能跳出当前一层循环。,5.7如何实现多重循环控制,VisualBasic程序设计教程,39,【例5-9】窗体上显示3100之间的所有素数。每行显示5个。前面的例子中判断A是否为素数是一重循环。现让A分别等于3、5、7、97、99就可以了。为了每行显示5个,设置一个计数变量Count。PrivateSubCommand1_Click()DimAAsInteger,iAsInteger,CountAsIntegerC

10、ount=0素数个数计数变量Print以下数据为素数:ForA=3To99Step2Fori=2ToInt(Sqr(A)IfAModi=0ThenExitFor被整除NextiIfiInt(Sqr(A)ThenCount=Count+1:PrintA,IfCountMod5=0ThenPrint换行EndIfNextAEndSub,VisualBasic程序设计教程,40,【例5-10】在窗体上如图图案,它由“*”组成。分析:上三角形中,第I行有I个,可使用循环:ForJ=1ToI:Print*;:NextJ因每行起点不同,而且一行结束后要换行,所以在J循环的前后各有一Print。这样的行有7

11、行,故外循环使I从1至7。下三角形,操作过程与上三角相似,VisualBasic程序设计教程,41,PrivateSubCommand1_Click()DimIAsInteger,JAsIntegerClsForI=1To7PrintSpc(20-I);打印时空20-i格ForJ=1ToIPrint*;NextJPrint用于换行NextIForI=6To1Step-1PrintSpc(20-I);ForJ=1ToIPrint*;NextJPrintNextIEndSub,5.7如何实现多重循环控制-显示图案,VisualBasic程序设计教程,42,5.8.1递推法【例5-11】有一个数列,

12、前两项是1、1,第三项是前二项之和,以后每一项都是前二项之和。即为:1、1、2、3、5、8、13、21,34。要求输出该数列的前30项。该数列又称斐波那契数列。由“兔子问题”引发这是一个递推问题所谓递推关系是指一串函数之间的关系,它把每一个函数表示为前k个函数的线性组合。本题中k=2。解决递推问题必须具备两个条件:(1)有初始值,如F1=1、F2=1(2)存在递推关系。如Fn=Fn-1+Fn-2(n2)在程序中一般设置二或三个变量就可以了。程序中用F1、F2、F3表示三个数,在循环中,它们不断用新值代替旧值。这种操作称为迭代,,5.8程序举例,VisualBasic程序设计教程,43,程序代码

13、如下:PrivateSubCommand1_Click()DimF1AsLong,F2AsLong,F3AsLongDimiAsIntegerClsF1=1:F2=1PrintF1,F2,Fori=3To30F3=F1+F2PrintF3,IfiMod4=0ThenPrint每行显示4个数F1=F2:F2=F3用新值代替旧值NextEndSubF1和F2始终作为前两个数,F3作为新产生的数因第24个月兔子数已超过32767对,故变量声明为Long,VisualBasic程序设计教程,44,5.8.2穷举法【例5-12】我国古代数学家在算经中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,

14、值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”即:当时用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只?设公鸡X只,母鸡Y只,小鸡Z只,列出方程式:X+Y+Z=1005X+3Y+Z/3=1002个方程求3个未知数,无法用代数方法求解可将X、Y、Z分别为0100的每一种可能性都去试一下,如符合,则就是其中的一种购买方案。列举所有可能的方案,找出符合要求的,这样的算法称为穷举法。,VisualBasic程序设计教程,45,可测试方案分别为:0、0、0;0、0、1;0、0、100;1、0、0;1、0、1;1、0、100;100、100、0;100、

15、100、1;100、100、100事实上当X和Y确定时,Z可以用100-X-Y求得,因此可以把三重循环改为二重循环。PrivateSubCommand1_Click()DimXAsInteger,YAsInteger,ZAsIntegerPrint公鸡,母鸡,小鸡ForX=0To100ForY=0To100Z=100-X-YIf5*X+3*Y+Z/3=100ThenPrintX,Y,ZNextYNextXEndSub,事实上X和Y的循环可分别为0到20和0到33,VisualBasic程序设计教程,46,5.8.3求水仙花数【例5-13】求数100999所有满足:数X=数X个位、十位、百位的立

16、方和。如:153=1*1*1+5*5*5+3*3*3说明:该程序主要是能分出个位、十位、百位PrivateSubCommand1_Click()DimiAsIntegerDimN1AsInteger,N2AsInteger,N3AsIntegerFori=100To999N1=i100求百位N2=(i-N1*100)10求十位N3=iMod10求个位Ifi=N13+N23+N33Then计算水仙花数Printi;=;N1;3+;N2;3+;N3;3EndIfNextEndSub,VisualBasic程序设计教程,47,5.8.4验证哥德巴赫猜想【例5-14】输入一个大于等于6的偶数,将它分解为两个素数之和。对每一个大于等于6的偶数N都可表示成:N=3+(N-3)、N=4+(N-4)、N=5+(N-5)、N=(N-3)+3,即A、B的范围为3N-3由于大于2的偶数不是素数,处理前可以去掉这些数,由于3+(N-3)和(N-3)+3是一致的,故A的范围为3N/2,B=N-A。程序设计思路:当输入一个大于等于6的偶数N后,让A在3N/2的奇数范

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

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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