找回密码
 注册
Simdroid-非首页
查看: 144|回复: 7

[基础概念] While语句不能嵌套吗?

[复制链接]
发表于 2009-2-15 10:07:16 | 显示全部楼层 |阅读模式 来自 河南安阳
  1. f[x_, y_] := Sin[x + y];
  2. x = 1; y = 1;
  3. While[x <= 10,
  4. While[y <= 10, Print["x=", x, " y=", y, " f[x,y]=", f[x, y]]; y++];
  5. x++]
复制代码

运行结果却是这个样子的
  1. x=1 y=1 f[x,y]=Sin[2]

  2. x=1 y=2 f[x,y]=Sin[3]

  3. x=1 y=3 f[x,y]=Sin[4]

  4. x=1 y=4 f[x,y]=Sin[5]

  5. x=1 y=5 f[x,y]=Sin[6]

  6. x=1 y=6 f[x,y]=Sin[7]

  7. x=1 y=7 f[x,y]=Sin[8]

  8. x=1 y=8 f[x,y]=Sin[9]

  9. x=1 y=9 f[x,y]=Sin[10]

  10. x=1 y=10 f[x,y]=Sin[11]
复制代码

这是为什么,x++的语句似乎没有执行啊
发表于 2009-2-15 10:58:08 | 显示全部楼层 来自 山西太原
Simdroid开发平台
执行完之后你看看y的值就知道怎么回事了。While和For不同的地方在于
  1. For[i=1,i<=10,i++]
复制代码
每次执行之前For要对迭代子重新赋值,但是While不会。第一次执行完之后y的值已经变成了11,下一次执行内层While循环的时候y还是11,不满足继续的条件,后面的自然不会执行喽。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-2-15 11:11:05 | 显示全部楼层 来自 河南安阳
那这个问题就是不能用while来完成是吧。
我尝试着用For和Do语句来运行都可以用的。只是不明白为什么While就不行了,听你这么一说就明白了,谢谢了
回复 不支持

使用道具 举报

发表于 2009-2-15 11:24:15 | 显示全部楼层 来自 山西太原
可以倒是可以,只要在内层While跳出后紧跟着将y重新赋值为0就行了,不过那就和For完全一样了
回复 不支持

使用道具 举报

 楼主| 发表于 2009-2-15 12:03:47 | 显示全部楼层 来自 河南安阳
也是,我过去一直有种感觉,就是这些循环的语句差不多都一样,只要有一个就可以起到几个的作用了,一直不太明白细微处的区别
回复 不支持

使用道具 举报

发表于 2009-2-16 10:50:10 | 显示全部楼层 来自 美国
  1. f[x_, y_] := Sin[x + y];
  2. x = 1;
  3. While[x <= 10, y = 1;
  4. While[y <= 10, Print["x=", x, " y=", y, " f[x,y]=", f[x, y]]; y++];
  5. x++]
复制代码
就是需要在进行内循环前面对你们的变量先赋值。
回复 不支持

使用道具 举报

发表于 2009-2-16 11:05:58 | 显示全部楼层 来自 江苏无锡
Why we have to use "While" ?
So simple function and be realized on whatever neat style.


  1. Table[Print[Row[{"x=", x, " y=", y, "  f[x,y]=", "f[", x, ",", y, "]"}]], {x, 1, 10}, {y, 1, 10}];

复制代码
回复 不支持

使用道具 举报

发表于 2009-2-16 14:46:16 | 显示全部楼层 来自 山西太原
只是为了讲授原理嘛,别的语言里可没法这么用
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-24 18:22 , Processed in 0.039351 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表