循序渐进学编程
——For……Next循环控制结构

2018-02-17 17:36
信息记录材料 2018年10期
关键词:终值初值赋值

刘 伟

(江苏师范大学科文学院 江苏 徐州 221116)

Visual Basic程序设计语言提供了三种循环控制结构,For……Next、While……Wend和Do……Loop,分别用于解决不同特征的循环处理问题。今天我们主要讨论For……Next循环控制结构。

首先,我们需要理解什么叫循环?比如一个学生在操场上围着跑道一圈一圈的跑步,这个跑步的动作就是循环!一个人在食堂里一口一口的吃饭,吃饭的动作也是循环;一个学生静静的坐在教室里听课,这个听课的动作也是循环,……等等,现实生活中处处都是循环!所以,在计算机世界里,计算机重复执行的动作就被称为循环。

其次,我们得搞清楚循环能解决什么样的问题?比如,求5个数的和,我们可以用如下方式获得5个数,然后求它们的和:

Private Sub Form_Click()

Dim A As Integer, B As Integer, C As Integer

Dim D As Integer, E As Integer, Sum As Integer

A = InputBox("请输入第1个数")

B = InputBox("请输入第2个数")

C = InputBox("请输入第3个数")

D = InputBox("请输入第4个数")

E = InputBox("请输入第5个数")

Sum = A + B + C + D + E

Print Sum

End Sub

本程序中引入A、B、C、D、E 五个变量来保存输入的5个值,然后通过语句Sum = A + B + C + D + E求得这5个数据的和,是没有问题的,可是请大家想一想,如果求50个数据的和用这种方式行不行呢,求5000个甚至5万个数据的和还能用这样的程序吗?

所以,在计算机中,重复的或者是相似的操作都可以借助循环来实现!上面的程序中数据的输入可以转换成类似于:X = InputBox("请输入第i个数")的形式,Sum= A + B + C + D + E可以转换成Sum = Sum + X 的累加形式。

其次,我们需要考虑的问题是循环何时结束?比如在操场上跑步,可以有多种结束形式:

1)固定跑5圈,跑完5圈就结束;

2)不确定跑多少圈,跑到累了就结束;

3)跑完5000米就结束;

4)跑到天亮就结束;

……

由此我们可以得出,有的循环有固定的次数,有的循环虽然没有固定的次数,但是有明确的结束条件。而For……Next循环控制语句主要就是用于解决有固定循环次数的循环问题。其基本结构如下:

For 循环控制变量 = 初值 To 终值 [Step 步长]

语句组1

[Exit For]

语句组2

Next [循环控制变量]

几点说明:

加粗标注的部分是必不可少的控制语句,[]内的内容是可以省略的内容;

循环控制变量是某一合法的变量名;

初值 To 终值 用来决定循环控制变量的取值范围;

若Step 步长 省略,则默认的步长为1;

Exit For语句用于实现当满足一定条件时,提前退出当前For循环,执行Next之后的代码;

For和Next之间的代码叫循环体。

比如,用For……Next 循环结构输出1、2、3、……、10这10个数,程序如下:

Private Sub Form_Click()

Dim i As Integer

For i = 1 To 10 Step 1

Print i;

Next i

End Sub

1.当程序执行到For语句时,计算出初值、终值和步长,并且将初值赋值给循环控制变量。

2.判断循环控制变量的值有没有超过终值,如果没有超过终值就进入循环体执行,否则退出循环体,执行Next语句之后的代码。

3.当执行到Next语句的时候系统做如下工作:首先循环控制变量增加一个步长,然后转到第2步。

下面我们试着用For……Next循环结构输入5个数:

Private Sub Form_Click()

Dim i As Integer

For i = 1 To 5

x = InputBox("请输入一个数")

Print x;

Next i

End Sub

如果是输入5个数,输出这5个数的和呢?

首先介绍一条赋值语句: Sum = Sum + X

请大家回顾一下赋值的执行流程:先计算”=”右边表达式的值,然后赋给左边的变量。所以这条语句的功能是先计算Sum+X的值,结果放在Sum中,这条语句执行以后,Sum的新值比原值增加X,如果执行多次,就能实现累加的功能。

所以输入5个数,并输出这5个数的和的程序修改如下:

Private Sub Form_Click()

Dim i As Integer, x As Integer

Sum = 0 ‘Sum 的初始值为0

For i = 1 To 5

x = InputBox("请输入一个数")

Print x;

Sum = Sum + x ‘累加求和

Next i

Print

Print "这些数的和="; Sum

End Sub

为了在输入的过程中能够清晰的知道当前输入的是第几个数,x = InputBox("请输入一个数")可以修改为:x = InputBox("请输入第" & i & "个数")。

请大家想一想,如果要求输入100个数,并输出这100个数的和,应该怎么修改程序呢?

只要把For循环的终值改为100就可以了。由于输入100个数比较慢,我们可以借助随机函数随机生成100个[1,9]范围内的数据进行测试,因为100个数一行显示不完,所以我们按每行输出20个的形式输出,代码修改如下:

Private Sub Form_Click()

Dim i As Integer, x As Integer

Randomize

Sum = 0 ‘Sum 的初始值为0

For i = 1 To 100

x = Int(9 * Rnd + 1)

Print x;

If i Mod 20 = 0 Then Print

Sum = Sum + x

Next i

Print

Print "这些数的和="; Sum

End Sub

总结:通过这个例题我们可以看出,即使是求1000个10000个甚至更多数据的和,只要修改For语句的终值就可以了,不需修改其他代码。像这类重复处理的问题,不借助于循环结构,几乎无法实现问题的解。

接下来我们再看一个例题,求1+2+3+……+100的值。

通过观察我们可以发现,这是一个累加求和的问题,所以就得用到累加公式:Sum=Sum+X,这里的X不是一个随机数,而是有规律的一列数,1、2、3、……、100,对于这种初值为1,终值为100,步长是1的问题,很容易联想到用For循环的循环控制变量i依次取得1、2、3、……、100,然后累加i即可。代码如下:

Private Sub Form_Click()

Dim i As Integer, Sum As Integer

Sum = 0

For i = 1 To 100

Sum = Sum + i

Next i

Print "1+2+3+...+100="; Sum

End Sub

For循环的循环控制变量,不仅可以从小到大变化,也能从大到小变化,只要将步长设置为负数就可以。比如上例,可以将For语句修改为:

For i = 100 To 1 Step -1 ,其他代码不变,求得的就是100+99+98+……+1的和。

思考:求1+2+3+……+n的值。

与上例相比,唯一的变化是终值变为了n,n需要从键盘获得一个初始值。程序修改为:

Private Sub Form_Click()

Dim i As Integer, Sum As Integer

Dim n As Integer

n = Val(InputBox("请输入一个正整数"))

Sum = 0

For i = 1 To n

Sum = Sum + i

Next i

Print "1+2+3+...+"; n; "="; Sum

End Sub

解决了1+2+3+……+n的问题,那么如何求1×2×3×……×n的值。(n!)

类似1×2×3×……×n这样的表达式,我们称为累乘,如果引入一个变量F保存累乘的结果,则只需要将累加表达式转换成F = F * i 即可。这里必须考虑到F的初始值应该为1。所以只要把上面的程序做如下修改即可。

Private Sub Form_Click()

Dim i As Integer, F As Long

Dim n As Integer

n = Val(InputBox("请输入一个正整数"))

F = 1

For i = 1 To n

F = F * i

Next i

Print n; "!="; F

End Sub

总结:本文主要讨论了For循环语句结构,For循环主要用于解决有固定循环次数的问题,通过初值、终值和步长就能计算出循环次数。只要循环控制变量不在循环体内被重新赋值,循环的次数就是确定的((终值-初值)/步长+1)。

猜你喜欢
终值初值赋值
具非定常数初值的全变差方程解的渐近性
一种适用于平动点周期轨道初值计算的简化路径搜索修正法
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
欧元区4月服务业PMI和综合PMI均创六年最佳
算法框图问题中的易错点
0.3%,欧元区11月份综合PMI终值环比增长
利用赋值法解决抽象函数相关问题オ
学生为什么“懂而不会”