JavaScript的循环结构

xiaoxiao2021-02-28  127

生活中的循环场景:

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

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

3.公交司机......

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

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

<script language="JavaScript"> /*计算1+2+3..+10; * 方案一   /*  var sum = 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;     alert(sum); </script>

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

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

我们希望做到

* 方案三 var sum3 = 0; var n = 1; while(n <= 10){     sum3 += n;     n++; };

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

while循环

While循环是表示:当...则...,也就是当某个条件成立时,则一直重复做。

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

do{

}

while(  )

区别:

     do循环体内必然要执行一次

var Num = 100; while (Num <= 999) {     var Fir_Num = Math.floor(Num / 100);     var Sec_Num = Math.floor((Num % 100) / 10);     var Thr_Num = Num % 10;     var sum = Math.pow(Fir_Num, 3) + Math.pow(Sec_Num, 3) + Math.pow(Thr_Num, 3);     if(sum == Num){         alert(Num+"水仙花数") }/* alert(Num + (sum == num ? "是" : "不是") + "水仙花数");*/     Num++;}

do while 循环:

var year = 2009; var CHGDP = 49089.82; var USGDP = 142562.75;  do{       CHGDP = CHGDP * (1+0.08);       USGDP = USGDP * (1+0.02);      year++  }while(CHGDP < USGDP);  alert(year);

While循环

案例

<script> /* 初始状态 * while(循环的条件)*/ var sum =0;//累加和 var t = 1;//每一项分数 var sign =1;//分数的符号 var deno = t;//分母 while(Math.abs(t) >=1e-6){ sum +=t; sign = -sign; deno +=2; t = sign*1/deno;} var pi = sum*4; alert(pi); </script>

总结一下循环的套路:

1.初始状态,

2.循环条件

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

4.为下次循环做准备

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

 

水仙花数问题

GDP预测问题

初始状态

Num = 100

var year = 2009; var CHGDP = 49089.82; var USGDP = 142562.75;

循环条件

(Num <= 999)

 

CHGDP < USGDP

 

循环体

    var Fir_Num = Math.floor(Num / 100);     var Sec_Num = Math.floor((Num % 100) / 10);     var Thr_Num = Num % 10;     var sum = Math.pow(Fir_Num, 3) + Math.pow(Sec_Num, 3) + Math.pow(Thr_Num, 3);     if(sum == Num){         alert(Num+"水仙花数") } }  CHGDP = CHGDP * (1+0.08);  USGDP = USGDP * (1+0.02);  year++;

 

为下次做准备

Num++

year++;

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

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

那么它和我们之前解决的1+2+3+4+5...+10问题就非常类似了

和的问题,只不过每次加的内容不同而已。

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

T=符号*(1/分母)

1.初始状态是怎样的

     Sum = 0;

T = 1;

Sign= 1;

Deno = t

2.重复做的条件是什么

      |t|>=10的负六次方

3.重复什么

Sum+= t

4.怎么过渡到下一次循环

Sign = -sign

Deno += 2

T = sign * 1/deno

for循环

如果有 for- 这种语法来遍历数组就会方便很多。

案例:

for(var num =100;num<=999;num++){ var num100 = Math.floor((num%1000)/100); 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(num==sum) alert(num +"水仙花数"); }
转载请注明原文地址: https://www.6miu.com/read-60486.html

最新回复(0)