js循环结构while

时间:2022-12-13 13:41:07

 循环结构

先来看看生活中的场景:

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

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

(3)公交司机.........

(4)作业流程......

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

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

-案例:

/* 计算1+2+3+4.......+10*/
    /* 方案一 */
    varsum =1+2+3+4+5+6+7+8+9+10;
    /*方案二*/
    varsum2 = 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++;
    alert(sum3)
}

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

5.2while循环

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

(流程图)

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

一、while(条件){

循环体

}

二、do{

循环体

}while(条件)

Whiledo……while的区别是

While是先判断在做,如果条件错误,那么它一次都不会执行。

Do……while是先做在判断,如果条件错误,那么它至少会执行一次。

 js循环结构while

案例:10以内相加

var sum3 = 0;
var n = 1;
do{
    sum3 += n;
    n++;
}while(n<=10);
alert(sum3);

1000以内水仙花数

js循环结构while 

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

GDP预测

 js循环结构while

var usaGdp = 142562.75;
var chinaGdp = 49098.82;
var year = 2009;
while( chinaGdp <= usaGdp){
    usaGdp *=(1 + 0.02);
    chinaGdp *=(1 + 0.08);
    year++;
}
alert(year+"年,中国("+chinaGdp+")将反超美国("+usaGdp+")");

总结循环的套路

(1)初始状态

(2)循环条件(要重复做的事情)

(3)循环体

(4)为下次循环做准备()

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

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

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

(3)重复做什么

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

 

水仙花数问题

GDP预测

初始状态

var  num =10

var usaGdp = 142562.75;
var chinaGdp = 49098.82;
var year = 2009;

循环条件

num<=999

chinaGdp <= usaGdp

循环体

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

  usaGdp *=(1 + 0.02);
  chinaGdp *=(1 + 0.08);

为下次循环做准备

num++

year++

案例计算圆周率,π=1-1/3+1/5-1/7+......*4

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;

t = sign*1/deno

 

/*初始状态 */

while(/*循环的条件*/){
    /*重复做的事情*/
    /*为下一次循环做准备*/
}

for(开始值;循环条件;步长){

/*重复做的事情*/
    

}