+ -
当前位置:首页 → 问答吧 → [solved!for 表达式顺序弄错了]菜鸟问题,逻辑混乱了。。。求 1+3+5+7+9...+99 的值

[solved!for 表达式顺序弄错了]菜鸟问题,逻辑混乱了。。。求 1+3+5+7+9...+99 的值

时间:2010-12-01

来源:互联网

本帖最后由 iab1351920 于 2010-12-01 10:52 编辑
  1. #!c:/strawberry/perl/bin/perl

  2. use warnings;
  3. use strict;  

  4. my $sum = 0;

  5. for (my $i = 1; $i < 100; $i += 2) {
  6.     $sum += $i;
  7. }

  8. print "$sum\n";
复制代码
我写的代码如上,结果是正确的,但总觉得不对劲

第一次循环:
$sum += $i;  #结果 i=3、sum=3
继续循环:
$sum = 3+5+7+9...+99

不就是少加了一个1啊,为什么结果是正确的,晕了晕了

作者: iab1351920   发布时间: 2010-12-01

回复 iab1351920


第一次循环的时候$i=1啊?怎么会是3呢

作者: orz_wohencai   发布时间: 2010-12-01

这个问题太水了
  1. Perl's C-style for loop works like the corresponding while loop; that means that this:
  2.     for ($i = 1; $i < 10; $i++) {
  3.         ...
  4.     }
  5. is the same as this:
  6.     $i = 1;
  7.     while ($i < 10) {
  8.         ...
  9.     } continue {
  10.         $i++;
  11.     }
复制代码

作者: zhlong8   发布时间: 2010-12-01

LZ可以把 print "$sum\n";  放到foreach 里面 输出看看。肯定是1的。

作者: leigh111   发布时间: 2010-12-01

本帖最后由 iab1351920 于 2010-12-01 10:54 编辑

Sorry!
看书不认真,让各位见笑了。。。
一直以为 for 语句是按“条件式一、条件式二、条件式三、之后表达式”顺序执行
google 了才知道:


QUOTE:
1)计算表达式1的值,为循环控制变量赋初值。
2)计算表达式2的值,如果其值为‘真’则执行循环体语句,否则退出循环。执行for循环后的语句。
3)如果执行了循环体语句,则在每一次执行循环体结束时,都要计算一次表达式3的值,调整循环控制变量。尔后返回2)步重新计算表达式2的值,依此重复过程,直到表达式2的值为‘假’时,退出循环。

作者: iab1351920   发布时间: 2010-12-01

残念· ·

作者: wfnh   发布时间: 2010-12-01