当前位置: 代码迷 >> PB >> PB经典内嵌话语
  详细解决方案

PB经典内嵌话语

热度:52   发布时间:2016-04-29 07:08:27.0
PB经典内嵌语句
integer sum=0,j,k,s=1
for j=1 to 5
    for k=1 to j 
        s=s*k
        next k
    sum=sum+s
next j


在自学PB的时候这段代码不是很明白,请帮忙详细分析下!谢谢!
------解决方案--------------------


next后面的j 和k 是不是有点多余啊,
直接这样写

integer sum=0,j,k,s=1
for j=1 to 5
  for k=1 to j  
    s=s*k
  next 
  sum=sum+s
next 
表示
1!+2!+3!+4!+5!
------解决方案--------------------
   next后面的j 和k 也不能完全说是多余,在这里应该就像step为1一样可以写,也可不写吧,但写上显得更清楚明白一些。
    下面是for...next语句的定义:

for-next循环指由for语句、next语句的循环三者构成的循环,它是一般格式为:

for [循环变量]=[循环变量初值] to [循环变量终值]
  step [循环变量增量]
     循环体
   next [循环变量]
  FOR语句称为"循环起始语句"或"循环说明语句",它的作用是确定循环变量的值如何变化,从而控制循环的次数。
 "循环变量初值"、"循环变量终值"和"循环变量增量"可以是常数、变量或表达式。
  NEXT语句是"循环终端语句",它的作用是标志循环结构的范围,在FOR语句和NEXT语句之间的语句的语句组就是循环体。每次循环执行到NEXT语句时,循环变量按步长增值。
  请注意:
   1.FOR语句与NEXT语句必须成对出现,缺一不可;
   2.FOR语句必须在NEXT语句之前;
   3.FOR语句中的"循环变量"与NEXT语句中的"循环变量"必须是同一变量。
   4.如果步长为1,则"STEP"可以省略。

  其他应该很清楚了,一楼正解

------解决方案--------------------
上面的分析是错误的,再分析一下: 
你的程序有问题, integer sum=0,j,k,s=1,定义为整型,结果溢出,得不到正确结果,所以改为:
long sum=0,j,k,s=1

for k=1 to j  
  s=s*k
  next k
上面这段是内循环,
for j=1 to 5
  {内循环}
  sum=sum+s
next j
上面这段是外循环
当j=1时,
内循环变为:
for k=1 to 1  
  s=s*k
  next k
所以,s=1*1=1!
外循环的语句就是:sum=sum+1!=1!
省略步长,则步长为1,所以下一循环:j=2
当j=2时,
内循环变为:
for k=1 to 2  
  s=s*k
  next k
经过两次循环,内循环结束,s=1!*1*2=2!
外循环的语句就是:sum=1!+2!
同样的进行,
当j=3时,
内循环变为:
for k=1 to 3  
  s=s*k
  next k
经过两次循环,内循环结束,s=2!*1*2*3=12
外循环的语句就是:sum=1!+2!+12
当j=4时,
内循环变为:
for k=1 to 4  
  s=s*k
  next k
经过两次循环,内循环结束,s=12*1*2*3*4=288
外循环的语句就是:sum=1!+2!+12+288
当j=4时,
内循环变为:
for k=1 to 5  
  s=s*k
  next k
经过两次循环,内循环结束,s=12*1*2*3*4*5=34560
外循环的语句就是:sum=1!+2!+12+288+34560=34863





------解决方案--------------------
不好意思,再次更正:
上面的分析是错误的,再分析一下:  
你的程序有问题, integer sum=0,j,k,s=1,定义为整型,结果溢出,得不到正确结果,所以改为:
long sum=0,j,k,s=1

for k=1 to j   
  s=s*k
  next k
上面这段是内循环,
for j=1 to 5
  {内循环}
  sum=sum+s
next j
上面这段是外循环
当j=1时,
内循环变为:
for k=1 to 1   
  s=s*k
  next k
所以,s=1*1=1!
外循环的语句就是:sum=sum+1!=1!
省略步长,则步长为1,所以下一循环:j=2
当j=2时,
内循环变为:
for k=1 to 2   
  s=s*k
  next k
  相关解决方案