JavaScript的循环结构

来源:互联网 发布:翼龙贷网网络贷款 编辑:程序博客网 时间:2024/05/21 11:32

循环结构

1循环结构的概念

先看看生活中的一些场景

(1)食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有顾客的菜都打完了。

(2)快递员送快递:查看送件地址→赶往目的地→电话告知收件人→收件人签收→交快递件,重复以上过程,直到所有需要的快递都处理完了。

以上场景都有一个共同的特点:有条件重复做一件事,每一次做的事情不同但类似。

程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环

/*计算1+2+3+.....+10*//*方案一*/var sum1  = 1+2+3+4+5+6+7+8+9+10;/*方案二*/var sum2 = 0;sum2 += 1;sum2 += 2;sum2 += 3;sum2 += 4;sum2 += 5;sum2 += 6;sum2 += 7;sum2 += 8;sum2 += 9;sum2 += 10;


但是这两种方案的描述方式都不太理想,如果是要加到10000呢?

注意观察方案二,它重复地做一件事(将一个数加到sum2中),每一次做的不同但类似。

但我们希望找到一个更好的描述的方法。

/*方案三:改造方案二*/var sum3 = 0;var n = 1;while(n <= 10){    sum3 += n;    n++;}


方案三表达的含义和方案二一样,但是表达方式要好得多,比如加到10000,只需要把条件n<=10改为n<=10000

 

2 white循环

while 是表示“当......................”,也就是当某个条件成立时,则一直重复做。(流程图)

 while(判断条件{

  执行语句;}


(调试工具查看程序运行轨迹以及变量的变化情况)

 

3 do while 循环

do-while 流程图

 

do{       

执行语句;

      }while(条件判断)

 

案例:找出所有的水仙花数

<script>    var num = 100;    while (num <= 999) {        var b100 = Math.floor(num / 100);        var b10 = Math.floor((num % 100) / 10);        var b1 = num % 10;        var sum = b100 * b100 * b100 + b10 * b10 * b10 + b1 * b1 * b1;        if(sum == num){            alert(num + "是水仙花数");        }        num++;    }</script>


 

 

 

 

案例:GDP预测

<script>    var year = 2009;    var gdp_usa = 142562.75;    var gdp_china = 49089.82;    while(gdp_usa > gdp_china){        gdp_usa *= (1 + 0.02);        gdp_china *= (1 + 0.08);        year++    }    alert(year + "年,中国("+gdp_china+")将超过美国("+gdp_usa+")");</script>


 

 

总结一下循环程序的套路:

 (1)循环的初始状态

 (2)循环条件

3)循环体(要重复做的事情)

 (4)为下次循环做准备

那如何去写循环的程序呢?回答四个问题:

(1)初始状态是怎样的?

(2)重复做的条件是什么?

(3)重复做什么?

(4)怎么过渡到下一次循环?

 

水仙花数问题

GDP预测问题

 

初始状态

var num = 100

var year= 2009;
var gdp_usa= 142562.75;
var gdp_china= 49089.82;

循环条件

num <= 999

gdp_usa >gdp_china

 

 

 

循环体

var b100 = Math.floor(num / 100);

var b10 = Math.floor((num % 100) / 10);

var b1 = num % 10;

var sum = b100 * b100 * b100 + b10 * b10 * b10 + b1 * b1 * b1;

if(sum == num){

alert(num + "是水仙花数");

}

gdp_usa *= (1+ 0.02);
gdp_china *= (1+ 0.08);

 

为下次循环做准备

num++

year++

案例:计算圆周率,π=1-1/3+1/5-1/7+.......*4,最后一项的绝对值小于10-6

分析:将公式稍微变化一下,

1-1/3+1/5-1/7+.......

变化为(+1/1+-1/3++1/5+-1/7

那么它和我们之前解决的1+2+3+4+.......+10问题就非常类似了,即都是求累加和的问题,只不过每次加的内容不同而已。

我们可以将每一项拆分为三部分:

t = 符号*1/分母

1) 初始状态是怎样的?

sum = 0

t = 1

sign = 1

denominator(分母) = 1

numerator (分子)= 1

num = sign* numerator /denominator

 

2) 重复做的条件是什么?

|t| >= 10-6

3) 重复做什么?

sum += num

4) 怎么过渡到下一次循环?

sign *= -1

denominator += 2

num = sign* numerator /denominator

var sum = 0;//累加和var denominator = 1;//分母var sign = 1;//符号var num = 1;//每一项的分数while(Math.abs(num) >= 1.0e-6){    sum += num;    denominator += 2;    sign *= -1;    num = sign/denominator;}var pi = sum *4;alert(pi);


原创粉丝点击