While循环
是表示“当.....则......”,也就是当某个条件成立时,则一直重复做。
(调试工具查看程序运行轨迹以及变量的变化情况):
do while 和while的区别:dowhile 是先做一次然后再循环,while是先循环然后再做。
案例:在100到999的范围内找出哪些数是水仙花数
var num = 100;
while (num <= 999) {
var num100 = Math.floor((num % 100) / 10);
var num10 = Math.floor((num % 100) / 10);
var num1 = Math.floor((num % 10));
var sum = Math.pow(num100, 3) + Math.pow(num10, 3) + Math.pow(num1, 3);
if(sum == num ) {
alert(num+"是水仙花数");
}
num++;
}
var year = 2009;
var usa = 142562.75;
var china = 49089.82;
do{
usa = ((usa*0.02)+usa);
china = ((china* 0.08)+china);
year++;
} while (china < usa);
alert(year+"年,中国("+china+")将超过美国("+usa+"");
循环的套路:
(1) 初始状态
(2) 循环条件
(3) 循环体(要重复做的事情)
(4) 为下次循环作准备()
写程序之前回答四个问题:
(1) 初始状态是怎样的?
(2) 重复做的条件是什么?
(3) 重复做的事情是什么?
(4) 怎么过度到下一次循环?
| 水仙花数问题 | GDP预测问题 |
初始状态 | var num = 100;
| var year = 2009;
|
循环条件 | num <= 999 | usa>china |
循环体 | var num100 = Math.floor((num % 100) / 10); var num10 = Math.floor((num % 100) / 10); var num1 = Math.floor((num % 10)); var sum = Math.pow(num100, 3) + Math.pow(num10, 3) + Math.pow(num1, 3); if(sum == num ) { alert(num+"是水仙花数") | usa = ((usa*0.02)+usa); china=((china*0.08)+china);
|
为下次循环作准备 | num++ | year++ |
案例3:计算圆周率 π=(1-1/3+1/5-1/7+.....)*4
最后一项的绝对值小于10-6。
分析:将公式稍微变化一下:(+1/1)+(-1/3)+(+1/7)
我们可以将每一项拆分为:
t=符号*1/分母
1初始状态是怎样的?
sum=0;
t=1;
sign=1
deno:1
2重复做的条件是什么?
3重复做的事情是什么?
sum +=t
4怎么过度到下一次循环?
sign= -sign
deno +=2
t = sign*1/deno
<script>
var sum = 0;//累加和
var t = 1;//每一项分数
var sign = 1;//运算符号
var deno = 1;//分母
while(Math.abs(t) >= 1e-6){
sum+=t;
sign=-sign;
deno+=2;
t= sign * 1/deno;
}
var π=sum*4;
alert(π);
</script>