上一节我们介绍的是 while循环语句的使用方法,今天我们看另外一个很有代表性的循环 for next 循环结构。
还举上一节的例子:
s=0
for i=1 to 10
s=s+i
next
print s
就初学者而言,for next结构没有while wend结构好理解。因为for next包含了以下信息:
1、for 语句包含了循环变量的开始值和结束值;
2、next相当于循环变量的变化;
所以看似比while循环的语句少,但对初学者而言并不好理解。
就此程序而言,最大的难点就在于for语句和next语句,因为他们是较之前所学是新的内容。本条for语句包含了以下信息:
a、i 的初始值是 1 最大边界是10,包含10(相当于<=10);b、next 也可写作 next i ,相当与增加1;
所以和上一节的第一个例子的计算结果是等同的。
可能就有朋友问了,next i 为何就是i=i+1呢?这得从 for next 的完整句式说起。
for 变量起始值 to 变量结束值 step 步长
如:
for i=1 to 10 step 1
意思就是从1到10,每次增1,而
for i=10 to 1 step -0.1
意思就是从10到1每次减少0.1。
相信大家已经看明白了step和next是向关联的,但是为何我们的例子中没有step值,为何要加1呢,这是一个惯例:如果没有生命step的值,那么next就等同于变量加1的效果。
好了,讨论了这么多,不知道大家对 for next语句是否还有疑问呢?看个例子吧。
例1、求1到100内的偶数之和。
首先我们知道偶数是2、4、6、8……98、100
所以第一个数字是2,但是每次要增加2怎么办,可以用我们的步长step来控制,可以将变量的增加来控制,所以这道题有两种解法:
cls
s=0
for i=2 to 100 step 2
s=s+i
next i
print s
end
这个例子中由于每次 i 增加2,所以被累加到 s 上的结果一定是 2、4、6、8
第二种解法:
cls
s=0
for i=2 to 100
s=s+i
i=i+1
next i
print s
end
在此例中,我们没有使用step,所以next的效果是加1,那么我们只需在循环体内将控制变量再加1,实质上就变成了每次循环 i 增加2
是否想使用我们早期使用过的while语句来试试?
cls
s=0:i=2
while i<=100
s=s+i
i=i+2
wend
print s
end
通过这个例子我们再次可以看到while语句较 for next好理解,这里看的很清楚,i 每次就是加2 ,不像for语句中使用step来增加。
例2、计算任意数M到N,每次级差为P的数列之和。
由于我们不知道m、n、p的值,那就用input 语句来输入吧。
cls
input "m,n,p";m,n,p
s=0
for i=m to n step p
s=s+i
next i
print s
end
也许你认为这样的程序就可以了,但是实际上存在 m>n 还存在 m<n 由于只说了级差为 p 并为说明p为正还是为负。所以我们按照输入的习惯需要做一个判断,就算是多此一举,你也可以通过这个程序看到更为完备的程序结构。
cls
input "m,n,p";m,n,p
s=0
if m<n and abs(p)<>0 then
for i=m to n step abs(p)
s=s+i
next
print s
elseif m>n and abs(p)<>0 then
for i=m to n step -abs(p)
s=s+i
next
print s
else
print "p=0,error"
end if
end
这个程序用到了循环、分支、和绝对值函数abs,所以,任凭你随便数p为正为负,程序将p的值根据m和n关系自动的取正数或者负数,同时不要小看了那个 and abs(p)<>0 这句话可以避免我们因为不小心输入了p为零而产生的死机。
通过这个例子希望大家了解程序的完备性,因为用户在输入数据的时候也许不会考虑那么周全,那就需要我们修改程序来完整任务了。
大家是否希望使用while语句来重写一下这个例子呢?算是留给大家的作业吧。今天我们就暂时讨论到这里,下一节我们使用循环和分支来解决一些有趣的问题,更多的内容参照qbasic教程的主页。
本文是 有图 原创,原地址 http://www.utosee.com/post/for-next-qbasic.html 转载请保留。
上一篇:while循环的使用 | 下一篇:接近圆周率的除法| 电脑技术类排行 | 网络技术类排行 | 健康生活类排行 |