1、格式
FOR <变量>=<初值>
TO <终值> STEP <增量>
循环体
WEXT <变量>
如: for i=1 to 10 step 2
print i,
next i
2、说明
(1)FOR与NEXT必须配对;
(2)FOR必须在NEXT的前面;
(3)FOR中的循环变量与NEXT的变量一致;
(4)步长为1时“ STEP 1”可省略;
(5)循环终止的条件是循环变量赋值超过终值,而不是等于终值。
(6)循环次数的计算
次数=(终值一初值)/步长+1
(7)循环变量尽量用整型变量;
(8)循环变量初值和终值、步长值均可以是正值、负值或零,也可是整数或小数;
终止条件:当步长>0时,循环变量>终值
当步长<0时,循环变量<终值
当步长=0时,永不终止
(9)循环变量主要用来控制循环、可在循环体内引用,也可不在循环体出现。
for i=1 to 100
print "a"
next i
for i=1 to 100
print i,
next i
注意:在循环体内可对循环变量赋值,但这将改变循环次数。
for i=1 to 100
print i,
i=i+1
next i
3、exit for 语句
提前终止循环
for i=1 to 100
s = s + i * i
if s > = 100 then exit for
next i
print s
end
4、应用举例
判别n是否素数。
input "n=";n
k = int(SQR(n))
f = 0
for i% = 2 to k
if n mod i% = 0 then
f = 1
exit for
endif
next i%
if f = 0 then
print n ; "是素数"
else
print n ; "不是素数"
endif
end
斐波那契数列
f(n)=1 (n<=2)
f(n)=f(n-1)+f(n-2) (n>2)
f1=1
f2=1
f3=f2+f1=2
f4=f3+f2=3
f5=f4+f3=5
......
程序如下:
f1=1
f2=1
print f1,f2,
for i% = 3 to 20
f3 = f1+f2
print f3,
f1=f2
f2=f3
next i%
print
end
猴子吃桃:每次吃掉一半多一个,直到第10天只剩一个,第一天共摘了多少个桃子?
x10 =1
程序如下:
x =1
for n%=10 to 2 step -1
x=(x+1)*2
next n%
print " 桃子的数量为:";x
end
思考:for
n%=10 to 1 step -1 或for n%=1 to 9
三、DO 循环语句
1、简单DO循环
DO
<循环体>
loop
终止循环可用: exit do
计算三门课程的平均成绩
do
input"a,b,c, =";a,b,c
if a=0 and b=0 and c=o then exit do
s=(a+b+c)/3
print "平均成绩:';s
loop
end
2、带while子句的DO循环语句
格式一:do
while <条件>
<循环体>
loop
格式二:do
<循环体>
loop while <条件>
作用:当指定条件为真是继续循环,否则结束循环。`
格式一为前测试与while...wend相同。格式二为后测试,至少应执行循环体一次。
例:求1+1/2+1/3+.......1/n
直到前后两项之差小于是1e-3为止。s=0
n=1
t=1/n
do
t1=t
s=s+t1
n=n+1
t=1/n
loop while t1-t>=1e(-3) print s
end
思考:(1)用do
while...loop 改写程序;
(2)两种格式do
循环的区别?
3、带until子句的do循环语句
格式一:do
until <条件>
<循环体>
loop
格式二:do
<循环体>.
loop until <条件>
作用:当条件为真时终止循环
求2000~2050年之间的所有闰年。
闰年的条件是:
(1)能被4整除,但不能被100整除的年份都是闰年;
(2)能被100整除,又能被400整除的年份是闰年;
程序如下:
y=2000
do while y>2050
if y mod 4=0 and y mod 100<>0 then
l=1
elseif y mod 100=0 and y mod 400=0 then l=1
else
l=0
endif
if l=1 then print y,
y=y+1
loop
end
思考: 条件可写成: (1)if
(y mod 4=0 and y mod 100<>0) or (y mod 100=0 and y mod
400=0) then l=1 else l=0
(2) if y mod 4=0 then if
(y mod 100)<>0 then l=1
elseif (y mod 400)=0 then
l=1
else
l=0
endif
人口增长平均1.5%,设现人口12.3
亿,问多少年后人口达到或超过15亿。 p=1.23e+0.9 r=0.015 n=0 do
until p>=1.5e+0.9 p=p*(1+r) n=n+1 loop print
n;"年","人口";p end
问题(1)比较下面两例:
f=1 f=1
n=6 n=6
do until n>5 do
f=f*n f=f*n
n=n+1 n=n+1
loop loop until n>5
print f print f
end end
(2)凡是用do until循环可以解决的问题,全部可用do
while解决,只需把“<条件>”取成“<反条件>” p=1.23e+0.9 r=0.015 n=0 do
while p<1.5e+0.9 p=p*(1+r) n=n+1 loop print
n;"年","人口";p end
四、循环的嵌套
一个循环体内包含另一个循环
找出100-200间的全部素数。 for
n=101 to 200 step 2 k=int(SQR(n)) i=2 f=0 while
i<=k and f = 0 if n mod i=0 then f=1 else i=i+1
wend if
f=0 then print n, next n end
例打印乘法九九表
for i=1 to 9 for
j=1 to 9
p = i*j
print p,
next j
print
next i
end 打印表格(P175)
print TAB(5);"|"
for j=1to 9
print tab(j*8);j;
next j
print
for n=1 to 75
print "-";
next n print
tab(5);"|";
print
for i=1 to 9
print i;"|";
for j=1 to 9
p=i*j
print TAB(j*8); p;
next j
print
next i
for n=1 to 75
print "-";
next n
end
注:1)内外循环不应交叉
2)内外循环的变量名不应相同
|