欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    设计循环结构程序.ppt

    • 资源ID:6343973       资源大小:386.32KB        全文页数:51页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    设计循环结构程序.ppt

    第5章 设计循环结构程序,Visual Basic 程序设计教程,Visual Basic程序设计教程,2,循环结构又称重复结构。本章主要介绍:逻辑表达式For/Next语句Do/Loop语句While/Wend语句循环的嵌套使用。,Visual Basic程序设计教程,3,循环结构是根据条件来决定某段代码是否重复执行。循环结构中一种常用的流程可以表示如图:条件满足就执行a块程序段然后再进行条件判别如果满足条件,则继续执行a块程序段直到条件不满足,才执行a块后面的程序。,5.1 概述,Visual Basic程序设计教程,4,其中的a程序块段称为循环体。条件使用逻辑表达式。循环的另一种形式是把判断条件放在循环体之后。,Visual Basic程序设计教程,5,循环结构中有两个基本问题需要考虑:(1)条件必须明确,能使循环过程正常结束(2)循环体内,必要时可改变控制循环的条件改变可能导致循环结束改变也可能导致循环进入无休止的状态(死循环)。,Visual Basic程序设计教程,6,循环有两种类型:计数控制控制累计执行循环体的次数次数已到则结束循环如1+2+3+100或98+96+94+4+2事态控制由某些条件决定循环结束。如计算一系列正整数之和,遇负数停止循环。也可以在一个循环过程中同时使用这两种类型,Visual Basic程序设计教程,7,【例5-1】设计一个判断素数的程序。若不是素数,要求分解为a*b的形式控件:1个文本框和1个命令按钮事件:命令按钮的Click。首先要了解什么是素数。素数是指除了1和自身外,不能被其它整数整除的正整数。判断A是否为素数的基本方法是:将A分别除以2、3、A-1,若都不能整除,则它为素数。判断A被i整除可以采用表达式:A Mod i=0 或:A/i=A i 或:A/i=Int(A/i),5.2 判断素数,Visual Basic程序设计教程,8,Option ExplicitPrivate Sub Command1_Click()Dim A As Long,i As Integer A存放要判断的数。i取值为2A-1 Dim Flag As Boolean Flag作素数标志,False时,表示不是素数 A=Val(Text1.Text)Flag=True 先设A是素数,当A2或能被i整除时,再置为False If A 2 Then Flag=False A2,不是素数 Else i=2 Do While i=A-1 If A Mod i=0 Then Flag=False:Exit Do A能被i整除,则不是素数 i=i+1 Loop End If If Flag Then MsgBox A&是素数,信息 Else A表示成两数之积 MsgBox A&不是素数&Chr(13)&A&=&i&*&A/i,信息 End IfEnd Sub,5.2 判断素数-程序,Visual Basic程序设计教程,9,说明:程序中,也可以不设标志变量,在最后判断i是否超过终值A-1,若超过终值则表示直到循环完成,还没遇到一个能被整除的整数,即它是素数;否则它就不是素数。当A能被其中一个i整除时,A肯定不是素数,所以没有必要再测试下一个i,因此使用Exit Do退出循环。在使用Exit Do退出循环的时候,没有改变i的值,故A能被该i整除,即A可以表示成A=i*(A/i)。事实上只要判断A能否被2、3、Sqr(A)整除即可。,Visual Basic程序设计教程,10,逻辑运算使用逻辑运算符VB提供了多个逻辑运算符,有:非(Not)、与(And)、或(Or)异或(Xor)、等价(Eqv)、蕴含(Imp)。1基本格式Not为一元运算符,其它均为二元运算符。格式:Not 表达式 表达式1 逻辑运算符 表达式2(除Not外)一个逻辑表达式可用一个或多个逻辑运算符。如:A0 And B0 And C02数据类型逻辑运算的数据及结果均为布尔类型。,5.3 进行逻辑运算,Visual Basic程序设计教程,11,3运算方式4优先级,Visual Basic程序设计教程,12,5逻辑表达式举例(1)设变量Name1的值为“王小华”、变量Addr的值为“上海”,则表达式:Name1=“王小华”Or Addr=杭州 值:True 表达式:Name1=“王小华”And Addr=沪 值:False(2)写出数学表达式0 0 And x 10,Visual Basic程序设计教程,13,(3)描述Name1的值不等于“王小华”的表达式。该表达式可写为:Name1 王小华 或:Not Name1=王小华(4)X=3、Y=4、Z=5,求表达式X2 Xor YX+1的值。执行次序如图所示,最终值为False。,Visual Basic程序设计教程,14,闰年的条件是:能被4整除,但不能被100整除;或能被400整除。设变量Y存放年份,则该逻辑表达式应为:Y Mod 4=0 And Y Mod 1000 Or Y Mod 400=0,【例5-2】设计程序,要求对文本框的年份判断是否为闰年,并在标签中显示相应的信息。,Visual Basic程序设计教程,15,程序代码如下:Option ExplicitPrivate Sub Command1_Click()Dim Y As Integer If Command1.Caption=闰年判断 Then 闰年判断 Y=Val(Text1.Text)If Y Mod 4=0 And Y Mod 100 0 Or Y Mod 400=0 Then Label1.Caption=是闰年 Else Label1.Caption=不是闰年 End If Command1.Caption=清除 Else 清除 Text1.Text=:Label1.Caption=:Command1.Caption=闰年判断 Text1.SetFocus End IfEnd Sub,5.3 进行逻辑运算-闰年判断,Visual Basic程序设计教程,16,5.4.1 For/Next语句使用For/Next语句可以方便地实现计数循环For/Next由For语句、循环体、Next语句组成。格式:For 循环控制变量=初值 To 终 值 Step 步长 循环体 Next 循环控制变量,5.4 使用For/Next循环语句,Visual Basic程序设计教程,17,1执行过程(1)将初值送至循环控制变量(2)判断循环控制变量的值是否超过终值:若未超过终值,执行步骤(3);超过终值执行步骤(5)。(3)执行循环体。(4)遇到Next,使循环控制变量加上步长再送入循环控制变量中,转步骤(2)。(5)循环终止,执行Next语句后面的语句。注意:其中“超过终值”不一定是大于终值。,Visual Basic程序设计教程,18,2关于格式省略“Step 步长”则默认为“Step 1”。初值、终值、步长分别控制循环变量的起始值、终止值和增量。For和Next必须成对出现。Next后若有循环控制变量,则必须与For中的相同。建议Next后不要省略循环控制变量,以有利于阅读程序,Visual Basic程序设计教程,19,3关于循环体循环体是一条或多条语句可以包括分支结构和循环结构可以写成一行或多行。循环体中可以引用循环控制变量,也可以不引用。但不要随便修改循环控制变量的值,以防引起循环混乱。4强行终止死循环使用Ctrl+Break可以暂停程序运行再使用VB工具栏上的“结束”按钮终止程序执行。,Visual Basic程序设计教程,20,【例5-3】输入10个非负整数,求所有偶数之和。假定存放和的变量为Sum,先让Sum=0。然后可采用以下方法:将第1个数送入A,如果A是偶数,则让Sum加上A,否则Sum不变。将第10个数送入A,如果A是偶数,则让Sum增加A,否则Sum不变。最终得到的Sum就是和。由此可见,每步都做着同样的工作,即:将第i个数送入A,如果A是偶数,则让Sum增加A,否则Sum不变。,Visual Basic程序设计教程,21,Option ExplicitPrivate Sub Command1_Click()输入10个非负整数,求偶数和。Dim Sum As Long,i As Integer Dim A As Integer Sum=0 赋初值,注意位置 For i=1 To 10 A=Val(InputBox(请输入第&i&个数:,输入非负整数)If A Mod 2=0 Then Sum=Sum+A Next i MsgBox Sum=&SumEnd Sub 一个好的程序,应该为自己用于累加、累乘等的变量赋初值。,Visual Basic程序设计教程,22,【例5-4】求表达式值。x、n由键盘输入。这是一个求和的例子。它由n项构成,能表示成Sum=Sum+Item的形式第i项等于第i-1项乘以X/(i+1),即Item=Item*X/(i+1)故循环体可由Item=Item*X/(i+1)和Sum=Sum+Item构成。初值问题:Sum初值为0,Item初值应为1。,为防止溢出,Item和Sum声明为双精度型。程序运行结果:当X=6,N分别为1、2、3时,其和分别为3、9、18。,Visual Basic程序设计教程,23,Private Sub Command1_Click()Dim Sum As Double,Item As Double,i As Integer Dim N As Integer,X As Double N=Val(InputBox(请输入项数:)X=Val(InputBox(X=)Sum=0:Item=1 For i=1 To N Item=Item*X/(i+1)Sum=Sum+Item Next i MsgBox x/2!+x2/3!+.=&Sum,信息 End Sub,Visual Basic程序设计教程,24,5.4.2 Exit For语句循环中,中途退出循环,称为跳出循环。跳出For/Next循环的语句就是Exit For。跳出循环后,将执行Next语句后面的语句。Exit For语句一般往往与If语句合用。如:If A=2 Then 素数判断 For i=2 To Int(Sqr(A)If A Mod i=0 Then Exit For A能被i整除,不是素数,退出For循环 Next i If i Int(Sqr(A)Then 表示A不能被2 Int(Sqr(A)中的数整除 Print A;是素数 Else 此时表示程序运行是通过Exit For转出来的 Print A;不是素数 End IfElse Print A;不是素数End If,Visual Basic程序设计教程,25,5.5.1 Do/Loop语句对只知道循环终止条件,可采用Do/Loop循环For/Next语句可改写成Do/Loop循环,反之则不然。Do/Loop语句有五种表示形式,它们的格式为:,5.5 使用Do/Loop循环语句,Visual Basic程序设计教程,26,1执行过程(1)对格式一和二,VB将先判断条件,再执行循环体。(2)对格式三和四,先执行循环体,再判断条件。循环体至少执行一次。(3)对用While的语句,当条件满足(True)时,执行循环体。(4)对用Until的语句,当条件不满足(False)时,执行循环体。(5)格式五的循环体内必须存在Exit Do语句,否则会出现死循环。若程序运行出现死循环,同样可用Ctrl Break暂停程序执行。,Visual Basic程序设计教程,27,2关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现3关于循环体循环体是一条或多条语句可以包括分支结构和循环结构。可以写成一行或多行。循环体中应有改变循环条件的语句,以避免出现死循环。,Visual Basic程序设计教程,28,5.5.1 Do/Loop语句-编程序:求n!,Visual Basic程序设计教程,29,【例5-6】在文本框中输入两个整数,求它们的最大公约数和最小公倍数。求最大公约数可用辗转相除法。该方法的基本思想是使用带余除法:(1)A除以B,得余数为R1;(2)若R10,则B为最大公约数。若R10,则B赋值给A,R1赋值给B,求余数R2;若R20,则继续以上步骤。,Visual Basic程序设计教程,30,(3)经过有限(n+1)步后,Rn+1=0。这时A和B的最大公约数是Rn。最小公倍数为A*B/Rn。该算法循环次数未知,但循环条件已知:余数不为0。因此适用于Do/Loop语句编程。其循环体为:把上一个B作为新的A,把上一个余数作为新的B,求出新余数。,Visual Basic程序设计教程,31,5.5.1 Do/Loop语句求最大公约数和最小公倍数Private Sub Command1_Click()Dim A As Long,B As Long,R As Long A=Val(Text1.Text)B=Val(Text2.Text)R=A Mod B Do While R 0 A=B:B=R R=A Mod B Loop MsgBox 最大公约数=&B MsgBox 最小公倍数=&Val(Text1.Text)*Val(Text2.Text)/BEnd Sub 如果s在两个文本框中分别输入351和675,单击命令按钮后,得出最大公约数为27,最小公倍数为8775。,Visual Basic程序设计教程,32,【例5-7】编程:输入一批非负数,当输入负数时,表示输入结束。求这批非负数据的最大值、最小值和平均值。由于输入的个数不确定,故应采用Do/Loop语句。本题关键在于如何设置最大值、最小值的初值。,Visual Basic程序设计教程,33,Private Sub Command1_Click()Dim X As Integer,Min As Integer,Max As Integer Dim N As Integer,Average As Single N作为计数,存放项数 X=Val(InputBox(X=):Max=X:Min=X 最大最小值初值 N=0:Average=0 Do While X=0 If X Max Then Max=X If X 0 Then Average=Average/N Print Max=;Max,Min=;Min,Average=;Round(Average,3)End Sub当输入23、41、35、61、12、1、7、-1后,运行结果:Max=61 Min=1 Average=25.714,Visual Basic程序设计教程,34,5.5.2 Exit Do语句Exit Do是跳出Do/Loop循环的语句跳出循环后,将执行Loop语句后面的语句。Exit Do语句同样也往往与If语句合用如求阶乘的程序片断为:N=Val(InputBox(n=)Result=1:i=1 Do Result=Result*i i=i+1:If i N Then Exit Do Loop MsgBox N&!=&Result,Visual Basic程序设计教程,35,While/Wend语句的作用与Do While 条件/循环体/Loop相同。格式:While 条件 循环体 Wend执行过程:先计算条件的值,若条件的值为True,执行循环体,否则执行Wend语句后面的语句。While和Wend必须成对出现循环体中必须要有设法改变循环条件的语句While/Wend语句没有对应的跳出语句。,5.6 使用While/Wend循环语句,Visual Basic程序设计教程,36,【例5-8】编程:求的值。有关的级数公式为:要求逐项累加,直到最后一项0.0000001时,求。因没有确定项数,故可用Do/Loop或While/Wend可设一个变量Sign作为各项的符号,在循环中让Sign=-Sign,可以达到一次正、一次负的目的。为达到较为精确的值,变量大多声明为双精度型,Visual Basic程序设计教程,37,本例中变量Pi、Sum、Item、N、Precision分别存放、累计和、项值、项中分母值和精度。Private Sub Command1_Click()Dim Pi As Double,Sum As Double,Item As Double Dim N As Long,Precision As Double,Sign As Integer N=1:Item=1/N:Sum=0:Sign=1 Precision=Val(InputBox(“请输入精度:”,“输入数据”,“0.0000001”)While Item=Precision Sum=Sum+Sign*Item N=N+2 Item=1/N Sign=-Sign Wend Pi=4*Sum Print“=”;PiEnd Sub在单击命令按钮后,若精度用缺省值0.0000001,则显示。,Visual Basic程序设计教程,38,循环结构中可以嵌套循环当循环体中包含了循环时,称为循环嵌套,或称为多重循环。循环体中包含的循环语句可以与外循环相同,也可以不同。嵌套一层称为二重循环。多重循环中遇到Exit For(Do),只能跳出当前一层循环。,5.7 如何实现多重循环控制,Visual Basic程序设计教程,39,【例5-9】窗体上显示3100之间的所有素数。每行显示5个。前面的例子中判断A是否为素数是一重循环。现让A分别等于3、5、7、97、99就可以了。为了每行显示5个,设置一个计数变量Count。Private Sub Command1_Click()Dim A As Integer,i As Integer,Count As Integer Count=0 素数个数计数变量 Print 以下数据为素数:For A=3 To 99 Step 2 For i=2 To Int(Sqr(A)If A Mod i=0 Then Exit For 被整除 Next i If i Int(Sqr(A)Then Count=Count+1:Print A,If Count Mod 5=0 Then Print 换行 End If Next AEnd Sub,Visual Basic程序设计教程,40,【例5-10】在窗体上如图图案,它由“*”组成。分析:上三角形中,第I行有I个,可使用循环:For J=1 To I:Print*;:Next J因每行起点不同,而且一行结束后要换行,所以在J循环的前后各有一Print。这样的行有7行,故外循环使I从1至7。下三角形,操作过程与上三角相似,Visual Basic程序设计教程,41,Private Sub Command1_Click()Dim I As Integer,J As Integer Cls For I=1 To 7 Print Spc(20-I);打印时空20-i格 For J=1 To I Print*;Next J Print 用于换行 Next I For I=6 To 1 Step-1 Print Spc(20-I);For J=1 To I Print*;Next J Print Next IEnd Sub,5.7 如何实现多重循环控制-显示图案,Visual Basic程序设计教程,42,5.8.1 递推法【例5-11】有一个数列,前两项是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 程序举例,Visual Basic程序设计教程,43,程序代码如下:Private Sub Command1_Click()Dim F1 As Long,F2 As Long,F3 As Long Dim i As Integer Cls F1=1:F2=1 Print F1,F2,For i=3 To 30 F3=F1+F2 Print F3,If i Mod 4=0 Then Print 每行显示4个数 F1=F2:F2=F3 用新值代替旧值 NextEnd SubF1和F2始终作为前两个数,F3作为新产生的数因第24个月兔子数已超过32767对,故变量声明为Long,Visual Basic程序设计教程,44,5.8.2 穷举法【例5-12】我国古代数学家在算经中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”即:当时用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只?设公鸡X只,母鸡Y只,小鸡Z只,列出方程式:X+Y+Z=100 5X+3Y+Z/3=1002个方程求3个未知数,无法用代数方法求解可将X、Y、Z分别为0100的每一种可能性都去试一下,如符合,则就是其中的一种购买方案。列举所有可能的方案,找出符合要求的,这样的算法称为穷举法。,Visual Basic程序设计教程,45,可测试方案分别为:0、0、0;0、0、1;0、0、100;1、0、0;1、0、1;1、0、100;100、100、0;100、100、1;100、100、100事实上当X和Y确定时,Z可以用100-X-Y求得,因此可以把三重循环改为二重循环。Private Sub Command1_Click()Dim X As Integer,Y As Integer,Z As IntegerPrint 公鸡,母鸡,小鸡For X=0 To 100 For Y=0 To 100 Z=100-X-Y If 5*X+3*Y+Z/3=100 Then Print X,Y,Z Next YNext XEnd Sub,事实上X和Y的循环可分别为0到20和0到33,Visual Basic程序设计教程,46,5.8.3 求水仙花数【例5-13】求数100999所有满足:数X=数X个位、十位、百位的立方和。如:153=1*1*1+5*5*5+3*3*3说明:该程序主要是能分出个位、十位、百位 Private Sub Command1_Click()Dim i As Integer Dim N1 As Integer,N2 As Integer,N3 As Integer For i=100 To 999 N1=i 100 求百位 N2=(i-N1*100)10 求十位 N3=i Mod 10 求个位 If i=N1 3+N2 3+N3 3 Then 计算水仙花数 Print i;=;N1;3+;N2;3+;N3;3 End If NextEnd Sub,Visual Basic程序设计教程,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的奇数范围内循环,若A是素数,则求出B=N-A,再判断B是否为素数,若B也是素数,则输出A和B。,Visual Basic程序设计教程,48,Private Sub Command1_Click()Dim A As Long,B As Long,N As Long,i As Integer,j As Integer Do 该循环是为了必须获得一个大于等于6的偶数 N=Val(InputBox(请输入一个大于6的偶数)Print 输入的数为&N Loop While N/2 N 2 Or N Sqr(A)Then 若A是素数 B=N-A 求出B For j=2 To Sqr(B)判断B是否也为素数 If B Mod j=0 Then Exit For Next j If j Sqr(B)Then 若B也是素数 Print N&=&A&+&B 输出 Exit For 已验证,跳出A循环 End If End If Next AEnd Sub,当输入2322时,显示2322=11+2311,Visual Basic程序设计教程,49,5.8.5 数制转换【例5-15】请编写程序:将十进制正整数转换为二进制数或十六进制数;控件:两个标签两个文本框两个单选按钮两个命令按钮十进制整数转换成二进制数,采用除2取余法。十进制整数转换成十六进制数,采用除16取余法最后把这些余数以字符方式拼接起来。,Visual Basic程序设计教程,50,5.8.5 数制转换-程序 Private Sub Command1_Click()转换Dim A As Long,B As String,R As Integer B存放转换后结果,R放余数A=Val(Text1.Text):B=If Option1.Value Then 转换成二进制 Do While A 0 B=(A Mod 2)&B:A=A 2 拼接除2后的余数,获得除2后的商 Loop Text2.Text=B 将结果(二进制)放入文本框Else 转换成十六进制 Do While A 0 R=A Mod 16 除16取余 Select Case R 获得余数对应的十六进制数,即09,AF之一并拼接 Case 0 To 9:B=R&B Case 10:B=A&B Case 11:B=B&B Case 12:B=C&B Case 13:B=D&B Case 14:B=E&B Case 15:B=F&B End Select A=A 16 获得除16后的商 Loop Text2.Text=B 将结果(十六进制)放入文本框End IfEnd Sub,Visual Basic程序设计教程,51,Private Sub Command2_Click()清除 Text1.Text=:Text2.Text=Text1.SetFocusEnd SubPrivate Sub Option1_Click()修改文本框提示,即标签的Caption Label2.Caption=二进制数End SubPrivate Sub Option2_Click()修改文本框提示,即标签的Caption Label2.Caption=十六进制数End Sub在学了第9章字符函数Asc、Chr或Mid后,有关转换成十六进制的A至F这段程序可以大大简化,可以用一条语句代码完成。,

    注意事项

    本文(设计循环结构程序.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开