您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > VB6教程第5章循环结构
浙江蜗牛网络-VB论坛:第5章循环结构在前面,我们学习了顺序结构和分支结构,本章我们将要介绍结构化程序3种基本结构的最后一种——循环结构。退出浙江蜗牛网络-VB论坛:循环概述5.2For循环5.3While循环5.4Do循环5.5循环的嵌套5.6循环的退出浙江蜗牛网络-VB论坛:循环概述在实际工作中,常遇到一些操作过程不太复杂,但又需要反复进行相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。这些问题的解决逻辑上并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味且冗长的程序。例如,计算1~100所有奇数的平方和,如果用顺序结构来解决这个问题,我们就会给出下面的程序:浙江蜗牛网络-VB论坛:()Dims&,x%s=0x=1s=s+x^2x=x+2s=s+x^2x=x+2s=s+x^2……x=x+2'x的值累加到99s=s+x^2Print1~100之间所有奇数的平方和=;sEndSub浙江蜗牛网络-VB论坛:由上面的例子不难看出,程序的绝大部分是在反复执行两条语句x=x+2和s=s+x^2,不同的是x的值在变化。程序当然非常简单易懂,但缺乏最基本的编程技巧。要想方便地解决这类问题,最好的办法就是用循环语句。所谓循环就是重复地执行一组语句。我们用循环语句解决上面的问题,程序非常简短:浙江蜗牛网络-VB论坛:()Dims&,x%s=0Forx=1To99Step2s=s+x^2NextxPrint1~100所有奇数的平方和=;sEndSub浙江蜗牛网络-VB论坛:在此程序中,第4、5、6条语句构成了一个循环,在循环过程中第5句被反复执行了50次,从而计算出了1~100所有奇数的平方和。通过上面的对比可知,循环结构非常适合于解决处理的过程相同、处理的数据相关,但处理的具体值不同的问题。我们把能够处理这类问题的语句称为循环语句。VB提供了三种不同风格的循环语句,它们分别是:(1)For…Next语句;(2)While…Wend语句;(3)Do…Loop语句。我们将对这3种循环语句逐一介绍。浙江蜗牛网络-VB论坛:循环For循环的一般格式如下:For循环变量=初值To终值[Step步长][循环体]Next[循环变量]说明:浙江蜗牛网络-VB论坛:.格式中各项的说明循环变量:亦称为循环控制变量,必须为数值型。初值、终值:都是数值型,可以是数值表达式。步长:循环变量的增量,是一个数值表达式。一般来说,其值为正,初值应小于终值;若为负,初值应大于终值。但步长不能是0。如果步长是1,Step1可略去不写。循环体:在For语句和Next语句之间的语句序列。Next后面的循环变量与For语句中的循环变量必须相同。浙江蜗牛网络-VB论坛:.执行过程For循环语句的执行过程如下:(1)系统将初值赋给循环变量,并自动记下终值和步长。(2)检查循环变量的值是否超过终值。如果超过就结束循环,执行Next后面的语句;否则,执行一次循环体。(3)执行Next语句,将循环变量增加一个步长值再赋给循环变量,转到(2)继续执行。以上执行过程用流程图描述,如图5-1所示。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:这里所说的“超过”有两种含义,即大于或小于。当步长为正值时,循环变量大于终值为“超过”;当步长为负值时,循环变量小于终值为“超过”。我们通过分析下面的程序来进一步理解For语句的执行过程。Forn=1To10Step3Printn,Nextn浙江蜗牛网络-VB论坛:具体执行情况如下:第几次循环n与终值比较执行循环体否1110执行2410执行3710执行410=10执行51310停止执行上面程序的执行结果为:14710浙江蜗牛网络-VB论坛:.注意事项For语句和Next语句必须成对出现,缺一不可,且For语句必须在Next语句之前。循环次数由初值、终值和步长确定,计算公式为:循环次数=Int((终值-初值)/步长)+1浙江蜗牛网络-VB论坛:【例5.1】求N!(N为自然数)。分析:由阶乘的定义,我们可以得出N!=1*2*…*(N-2)*(N-1)*N=(N-1)!*N,也就是说,一个自然数的阶乘,等于该自然数与前一个自然数阶乘的乘积。浙江蜗牛网络-VB论坛:程序如下:PrivateSubForm_Click()DimI%,f&,n%n=InputBox(输入一个自然数:,输入提示,10)f=1ForI=1Tonf=f*INextIPrintn;!=;fEndSub程序的执行过程如图5-2所示。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:程序如下:PrivateSubForm_Click()DimI%,n%,p#n=InputBox(请输入n的值(1-32767))p=1ForI=1Tonp=p*(4*I*I)/((2*I-1)*(2*I+1))NextIp=2*pPrintn=;n;时,π=;pEndSub浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:循环前面我们介绍了For…Next循环,它适合于解决循环次数事先能够确定的问题。对于只知道控制条件,但不能预先确定需要执行多少次循环体的情况,我们可以使用While循环。While语句格式如下:While条件[循环体]Wend浙江蜗牛网络-VB论坛:.While语句说明“条件”可以是关系表达式或逻辑表达式。While循环就是当给定的“条件”为True时,执行循环体,为False时不执行循环体。因此While循环也叫当型循环。2.执行过程While循环的执行过程(如图5-5所示):(1)执行While语句,判断条件是否成立。(2)如果条件成立,就执行循环体;否则,转到(4)执行。(3)执行Wend语句,转到(1)执行。(4)执行Wend语句下面的语句。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:结合下面的程序段,我们做进一步的说明:x=1Whilex5Printx,x=x+1Wend该程序段的执行结果是:1234浙江蜗牛网络-VB论坛:.While循环的几点说明(1)While循环语句本身不能修改循环条件,所以必须在While…Wend语句的循环体内设置相应语句,使得整个循环趋于结束,以避免死循环。(2)While循环语句先对条件进行判断,然后才决定是否执行循环体。如果开始条件就不成立,则循环体一次也不执行。(3)凡是用For…Next循环编写的程序,我们都可以用While…Wend语句实现。反之,则不然。浙江蜗牛网络-VB论坛:【例5.5】假设我国现有人口12亿,若年增长率为1.5%,试计算多少年后我国人口增加到或超过20亿。人口计算公式为:p=y(1+r)ny为人口初值,r为年增长率,n为年数。程序如下:PrivateSubForm_Click()Dimp!,r!,I%p=12r=0.015I=0浙江蜗牛网络-VB论坛:=p*(1+r)I=I+1WendPrintI;年后,我国人口将达到;p;亿EndSub单击窗体,程序运行结果如图5-7所示。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:循环与前面介绍的While循环相比,Do循环具有更强的灵活性,它可以根据需要决定是条件满足时执行循环体,还是一直执行循环体直到条件满足。Do循环有两种语句格式。格式1:Do{while|until}条件[循环体]Loop浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:格式2:Do[循环体]Loop{while|until}条件浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:【例5.7】求两自然数m,n的最大公约数。设计思想:(1)m除以n得到余数r;(2)若r=0,则n为要求的最大公约数,算法结束;否则执行(3);(3)n→m,r→n,再转到(1)执行。程序如下:PrivateSubcommand1_Click()Dimm%,n%,r%m=Val(Text1.Text)浙江蜗牛网络-VB论坛:=Val(Text2.Text)r=mModnDoUntilr=0m=nn=rr=mModnLoopPrint它们的最大公约数是;nEndSub程序运行结果如图5-12所示。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:循环的嵌套在一个循环体内又包含了一个完整的循环,这样的结构称为多重循环或循环的嵌套。在程序设计时,许多问题要用二重或多重循环才能解决。我们前面学过的For循环、While循环、Do循环都可以互相嵌套,如在For…Next的循环体中可以使用While循环,而在While…Wend的循环体中也可以出现For循环等。二重循环的执行过程是外循环执行一次,内循环执行一遍,在内循环结束后,再进行下一次外循环,如此反复,直到外循环结束。浙江蜗牛网络-VB论坛:【例5.8】打印九九乘法表。分析:打印九九乘法表,只要利用循环变量作为乘数和被乘数就可以方便的解决。程序如下:PrivateSubForm_Click()Dimi%,j%,str$PrintTab(35);九九乘法表Fori=1To9Forj=1To9str=i&×&j&=&i*j浙江蜗牛网络-VB论坛:((j-1)*9+1);str;NextjPrintNextiEndSub程序运行结果如图5-13所示。浙江蜗牛网络-VB论坛:浙江蜗牛网络-VB论坛:
本文标题:VB6教程第5章循环结构
链接地址:https://www.777doc.com/doc-2854200 .html