一、Do循环结构
Do循环可以分为前测型循环和后测型循环两种结构。
1.前测型循环结构
语法格式:
图8-3 前测当型循环
图8-4 前测直到型循环
说明:当型循环是当循环条件为True时进入循环;直到型则是循环条件为False进入循环。
2.后测型循环结构
语法格式:
图8-5 后测当型循环
图8-6 后测直到型循环
说明:前测型循环是先判断循环条件,循环体执行次数≥0;后测型循环是先执行循环体,循环体执行次数≥1。
【例8.1】单击窗体,要求在窗体上显示6行星号。
方法一:前测型当型循环。
将上面的代码改为前测型直到型循环、后测型当型循环和后测型直到型循环。
方法二:前测型直到型循环。
方法三:后测型当型循环。
方法四:后测型直到循环。
注意:
(1)以上循环语句都包含:变量初始化;判断条件;循环体语句和修改变量这四个步骤。在循环体中,至少要有一条语句使得循环趋向于结束,使循环语句在有限的时间内执行完毕,否则将会出现“死循环”。
(2)Do、Loop及While、Until都是关键字。“语句块”是需要重复执行的一个或多个语句,即循环体。“循环条件”是一个逻辑条件。
(3)While是条件为True时执行循环,而Until则是在条件变为True之前重复。
(4)Do While|Until...Loop循环先判断条件,然后在条件满足的时才执行循环体,否则不执行。
(5)Do Loop循环和While循环一样,如果条件总是成立,循环也可能陷入死循环,Do在这种情况下,可以用Exit Do语句跳出循环,一个Do循环可以有一个或多个Exit Do语句,并且Exit Do可以出现在循环体的任意地方结束循环,并把控制转移到Do循环后面的语句,用Exit Do语句只能从它所在循环中退出。
(6)Do循环可以嵌套,其规则与For...Next循环相同。
二、Do循环编程实例
【例8.2】我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。
分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n直接利用标准对数函数求得,也可利用循环求得。程序如下:
图8-7 例8.2运行结果
【例8.3】编写一个程序,实现当单击鼠标后如下显示:
(www.daowen.com)
图8-8 例8.3运行结果
【例8.4】编写一个程序计算一只猴子采一堆桃子,第一天吃了一半不过瘾又多吃了一个。这样每天都是吃掉一半后多吃一个,结果到第10天发现只剩下1个桃子,求猴子第一天共采了多少个桃子?
分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为Xn,那么它是前一天的桃子数的Xn-1的一半减1,即Xn=(Xn-1+1)*2。“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。
图8-9 例8.4运行结果
【例8.5】编写一个程序计算1+2+......+n,其中n由滚动条来选定(1≤n≤500)。
图8-10 例8.5运行结果
【例8.6】使用Do循环输出100~200之间不能被3整除的数,运行界面如图8-11所示。
图8-11 例8.6运行结果
【例8.7】设计采用欧几里德算法求解两个自然数的最大公约数的程序。
算法分析:“欧几里德算法”。
①输入两个自然数m、n;
②求m除以n的余数r;
③m←n;
图8-12 例8.7程序流程
④n←r;
⑤若r≠0,则重复执行②③④(循环),否则转⑥;
⑥输出m和n的最大公约数m。
界面设计:利用文本框来接收数据和显示结果,利用命令按钮的单击事件完成最大公约数的计算。
Private Sub Command1_Click()
Dim m As Integer,n As Integer,r As Integer
图8-13 例8.7运行结果
【例8.8】设计一个小程序,能够实现接收若干的专家的考评打分,输入-1表示打分结束,最后计算出平均考评分。
界面设计:
由于要接收的数据是无法预知其个数,所以不适合利用文本框来接收数据,所以采用输入函数InputBox,结合循环实现;利用窗体的单击事件完成总分和平均分的计算,并在窗体上显示结果。
图8-14 例8.8程序流程
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。