For…Next循环结构通常用于循环次数事先可以计算出的情况。但在实际应用中,大量问题的循环次数无法事先确定,例如,计算s=12+22+32+42+…,当s>50000时结束,这个循环操作循环的依据是当s的值小于或等于50000时执行,而不是循环次数,循环次数预先是不知道的。面对这种问题,VisualBasic提供了另外一种循环结构:Do…Loop循环。
1.前测型Do…Loop循环语句
格式:
前测型是指先判断执行条件,根据判断结果决定是否执行循环体。前测型分为“当”型(While)和“直到”型(Until)两类。
当型是指当条件成立时执行循环体,也就是说,当条件判断结果为True时执行循环体,为False时停止执行循环体。直到型就是程序一直执行,一直执行到条件成立时结束,也就是说,条件判断结果为False时执行循环体,为True时结束执行。它们两个互为反条件,写程序时可以相互转换。
2.后测型Do…Loop循环语句
格式:
后测型是指先执行循环体,循环体执行一遍后再判断条件,根据判断结果决定是否进行下一次循环。后测型也分为当型(While)和直到型(Until)两类,其执行方式与上文所述相同。
说明:
1)关键字Do和Loop成对出现,Do是循环语句的开始,Loop是循环语句的结束。在关键字Do和Loop之间的语句块是循环体,它们将被重复执行,执行的次数由<条件>决定。
2)在循环体中根据需要可设置Exit Do语句,用于提前终止循环体执行,即从Exit Do语句处跳出循环体到Loop后面的语句执行,等同于For语句中的Exit For语句。
3)Do…Loop语句能处理所有的循环结构程序,所有For循环结构都可以转换为Do…Loop循环结构。
【例4-22】用Do…Loop循环结构实现计算s:s=1+2+3+4+…+100。
按“三步法”原则分析如下。
做什么
在这个例子中,不需要用户输入任何信息,任务已经很清楚,就是计算1~100的累加和,所以窗体上不需要文本框等有关输入的控件,只需要一个“计算”按钮。
怎么做
步骤描述如下:
1)设置容器i的初值为1。
2)如果i值小于或等于100,则执行第3)步,否则执行第6)步。
3)把i值和s值相加,然后结果还是放入s中。
4)i值增1
5)返回第2)步。
6)循环体结束,输出s值。
实现
1)第1)步初始化i:
2)当上述步骤描述中第2)步成立时执行循环,而循环操作就是第3)、4)步。执行完这两个步骤后,再次返回第2)步进行判断。所以可以描述为
3)输出s值。
完整代码如图4-33所示。
从图4-33中可以看出,把For…Next语句转换为Do…Loop语句主要有3处需要改动:(www.xing528.com)
●初始化语句要从For语句中提出来,作为独立一条语句。
●For…Next语句的终止值就是Do…Loop的条件。
●Next i语句要变为循环体内的i=i+1语句,这是初学者最容易漏掉的。如果漏掉这条语句,那么循环体就无法结束了,这称为“死循环”。因为在整个循环体执行过程中i值得不到修改,它将永远保持为1,所以条件While i<=100,将永远成立,导致循环体将永远执行。
图4-33 Do…Loop循环
用前测型Until语句实现如下。
可以看出,把While型修改为Until型,只需修改判断条件为Until i>100即可。
用后测型的While语句实现如下。
用后测型的Until语句实现如下。
可以看出,把前测型改为后测型只需要把条件移动到后面即可。
那么前测型和后测型的区别在于,前测型是先判断条件,后执行循环体,所以有可能循环体一次都不被执行;而后测型是先执行循环体,后判断条件,所以无论初始条件是否满足,循环体都要执行一次。也就是说,对于后测型来说,循环体至少执行一次。比较下面两段程序:
输出结果s为0。因为循环体一次都没执行,s、i值都没有被修改。
输出结果s为1。因为先执行循环体一次后,再判断条件,所以在第一次执行循环体时,s、i值都得到了修改,s的值变为1,i的值变为2。
【例4-23】输入两个整数,用Do…Loop语句计算这两个整数以及它们之间能够被3或5整除的所有整数的和。
做什么
参考【例4-21】。
怎么做
步骤描述如下。
1)获取用户输入的数据,分别放入变量M、N中。初始化累加器变量sum为0。
2)设置变量i的初值为M。
3)如果i值小于或等于N,则执行第4)步,否则执行第7)步。
4)如果i能够被3或5整除,则计算sum+i,把结果还保存到sum中,否则不执行任何操作。
5)i值增1。
6)返回第3)步。
7)循环体结束,输出sum值。
实现
完整代码如下。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。