循环结构的概念
先来看看生活中的场景:
(1) 食堂大妈打饭:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有的顾客都把菜打完。
(2) 快递员去送快递:查看收信地址→赶往目的地→电话告知收件人→收件人签收→交快递,重复以上过程直到所有快递送完。
以上场景都有一个共同点:有条件的重复的做一件事情,每次做的不同,但是类似。
程序是为了解决生活中的问题,生活中存在这重复动作,那么程序中也应有相应的描述,这就是循环。
var num = 1;
var sum = 0;
while(num<=10){
sum +=num
num++
}
alert(sum)
上面是从1加到10的代码,简便而清晰,比如加到一万,就把条件给成<=10000
while循环
while表示:当。。。的时候。。。,也就是当某个条件成立时,则一直重复做。
(流程图)
(调试工具查看程序运行轨迹及变量的变化情况)
上方为计算所有的水仙花数的流程图。
var num = 100;
while(num<=999){
var hundreds = Math.pow(Math.floor(num/100),3) ;
var tens = Math.pow(Math.floor((num%100)/10),3) ;
var units =Math.pow(num%10,3);
var sum = units+tens+hundreds;
if(sum==num){
alert(num+"是水仙花数")
}
num++;
}
alert("打印完毕,以上全部为水仙花数")
下面是计算GDP中国超美国的代码
var china = Number(49089.82);
var USA = Number(142562.75);
var year = Number(2009);
while(USA >= china ){
china += china * 0.08;
USA += USA * 0.02;
year++;
}
alert(year+"年,中国赶超美国GDP")
总结一下循环的套路:
(1) 初始状态
(2) 循环条件
(3) 循环体(要重复做的事情)
(4) 为下次循环做准备。
如何去写循环的程序那?回答四个问题
(1) 初始状态是怎样的
(2) 重复的条件是什么
(3) 重复做什么
(4) 怎么过渡到下一次循环
| 水仙花数 | GDP预测问题 |
初始状态 | Num=100 | Var china=Number(49089.82); var USA = Number(142562.75); var year = Number(2009); |
循环条件 | Num<=999 | Usa > china |
循环体 | var hundreds = Math.pow(Math.floor(num/100),3) ;
| china += china * 0.08;
|
为下次循环做准备 | Num++ | Year++ |
案例:计算圆周率,π = (1-1/3+1/5-1/7+。。。)*4 最后一项小于10的负六次方
分析:将公式稍微变化一下,1-1/3+1/5-1/7变化为(+1/1)+(-1/3)+(+1/5)+(-1/7)那么他和我们之间就和解决之前的1+2+3.。。+10就非常类似了,即都是求累加和的问题,只不过每次加的内容不同而已。
我们可以将每一项拆分为:
T=符号*1/分母
(1) 初始状态是怎样的
Sum=0
T=1
Sign=1
Deno=1
(2) 重复的条件是什么
|t|>10-6
(3) 重复做什么
Sum += t
(4) 怎么过渡到下一次循环
Sign= -sign
Deno += 2