循环流程

阅读(395) 标签: 循环流程, for语句,

集算器中,循环代码主要通过for命令来实现。for语句将重复执行以其为主格的代码块,有如下几种格式:

for 循环

无条件循环,主格的值依次为当前循环计数,通常需要用break命令跳出循环。

无条件循环,或者死循环,是最简单的循环结构,如:

 

A

B

C

1

=demo.query("select * from EMPLOYEE")

[]

 

2

for

=A1(A2)

 

3

 

if B2.STATE=="Texas"

 

4

 

 

>B1=B1|B2

5

 

if B1.len()==10

 

6

 

 

break

上面的例子中,A2执行无条件循环;在B2中根据A2中的循环次数,每次获得一条员工记录。在后面的代码中,将Texas州的员工信息保存在B1中,当获取到前10Texas州的员工资料后,在C6中用break语句跳出循环。使用break语句时,也可以用break C命令,跳出以C为主格的循环体。

执行结束后,B1中的结果如下:

需要注意的是,使用无条件循环时,需要确保break语句能够正常执行,否则将使得程序在执行时无法结束。

for A

循环序列A的成员,主格的值依次为当前A的成员。

在集算器中,循环序列中的每个成员,是最为常用的,如:

 

A

B

1

=demo.query("select * from EMPLOYEE")

0

2

=A1.select(STATE=="Texas")

 

3

for A2

=age(A3.BIRTHDAY)

4

 

>B1=max(B1,B3)

例子中,A2中选出了所有在Texas的员工。A3执行循环,循环每一位Texas员工,在循环时,计算出每位员工的年龄,并在B1中存储最大年龄。循环完毕时,就可以在B1中获得所有Texas员工的最大年龄:

对于比较简单的循环语句,有时候,可以用序列的循环函数来实现,如:

 

A

1

=demo.query("select * from EMPLOYEE")

2

=A1.select(STATE=="Texas")

3

=A2.max(age(BIRTHDAY))

A3中的结果和上面的例子是相同的:

for n

n遍,主格的值依次为当前循环计数。

 

除了循环一个序列中的所有成员以外,指定次数的循环也很常用。

如,有一张1000mm*800mm,且厚度为0.1mm的纸,如果将它对折10次,那么最终的长宽尺寸和厚度是多少:

 

A

B

C

1

1000

800

0.1

2

for 10

>A1=A1/2

>C1=C1*2

3

 

if B1>A1

=B1

4

 

 

>B1=A1

5

 

 

>A1=C3

上面的例子中,循环对折10次,每次对折后,长度减半,厚度加倍。如果折叠后纸张的宽度超过了长度,那么长宽尺寸交换。执行后,A1B1C1中,纸张的长度、宽度和厚度如下:

   

语句for n也可以看做for to(1,n)的简写。即从1开始,一直循环到n

for a, b, s

ab执行循环,每次步进为s,即循环数列to(a,b).step(s)中的各个成员,s缺省时计为1

有的时候,需要执行的循环不一定从1开始,或者循环时,使用的步进值不是1,那么可以使用for a, b, s执行循环,如:

 

A

B

1

for 1,100,2

>A2=A2+A1

2

 

 

A2中计算100以内所有奇数的和,结果如下:

如果一个n 位数,它的每个位上的数字的 n 次幂之和等于它本身,那么就称其为水仙花数。下面的例子用来找出所有的3位水仙花数:

 

A

B

C

D

1

[]

 

 

 

2

for 100,999

=A2\100

=(A2\10)%10

=A2%10

3

 

=power(B2,3)

=power(C2,3)

=power(D2,3)

4

 

if B3+C3+D3==A2

>A1=A1|A2

 

A2的循环代码中,只循环所有的3位数,程序执行后,可以在A1中看到计算结果:

for x

x为真时循环,主格的值为x计算值。

通过指定循环条件,可以控制循环何时结束。如2.2.1小节的问题,也可以使用指定循环条件的for语句来执行:

 

A

B

C

1

=demo.query("select * from EMPLOYEE")

[]

 

2

for B1.len()<10

=A1(#A2)

 

3

 

if B2.STATE=="Texas"

 

4

 

 

>B1=B1|B2

for x循环的主格中,格值为每次计算循环条件的结果,为true或者false。这时不能用主格中的值来获得循环次数,因此在B2中获取员工记录时,使用了#C来获得当前的循环次数,#C中,C为循环体的主格。代码执行后,结果与2.2.1 for循环中相同。

循环的嵌套

在循环体中,可以继续使用循环语句,这就是嵌套循环,也叫多重循环。如:

 

A

B

C

D

1

[]

 

 

 

2

for 2,1000

for A1

if A2%B2==0

next A2

3

 

>A1=A1|A2

 

 

在例子中,A1中存储找到的质数序列;A2循环从21000的整数;在B2中循环质数列表,一旦发现当前A2中的数会被某个质数整除,就用next A2命令获取A2中的下个数;如果当前质数列表中所有数都不能整除A2中的数,说明找到了新的质数,将其添加到A1的序列中。其中,D2中的next C命令指定跳过以为主格的循环体剩下的代码,直接进入下轮循环。执行后,A1中,1000以内的质数序列如下:

使用next命令时,也可以不指定主格C,跳过next命令格所在的最内层次的循环。

如下面的百鸡问题:公鸡每只值5钱,母鸡每只值3 钱,而3 只小鸡值1 钱。用100钱买100 只鸡,问:这100 只鸡中,公鸡、母鸡和小鸡各有多少只?解答如下:

 

A

B

C

D

1

[]

 

 

 

2

for 100

if 5*A2>100

break

 

3

 

for 100-A2

=100-A2-B3

=5*A2+3*B3+C3/3

4

 

 

if D3>100

next A2

5

 

 

else if D3<100

next

6

 

 

>A1=A1|[[A2,B3,C3]]

 

在代码中,A2循环公鸡的总数;在B2中判断,如果公鸡的总价已经超过100,说明公鸡的总数已经太多了,此时在C2中用break命令终止循环。B3中继续循环母鸡可能的总数。在D4中,如果发现当前鸡的总价已经超过了100,说明在当前母鸡总数已经太多了,可以用next A2,增加公鸡的总数,重新尝试。在D5中,当前鸡的总价还小于100,可以继续增加母鸡的总数来尝试,这里的next命令会跳过当前最内层的循环代码,即以B3为主格的循环。A1中得到的结果如下: