javascript中的while循环和for循环

循环结构

1.1循环结构的概念

先来看看生活中的一些场景:

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

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

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

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

<script>

    /*计算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;

</script>

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

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

我们希望能找到一种更好的描述方式

/*方案三:改造方案二*/

    var sum3 = 0;

    var n = 1;

    while(n <= 10){

        sum += n;

        n++;

}

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

1.2while循环

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

打开调试工具,在watch窗口分别查看sum、n以及n<=10的值,可以从指示器看到循环的执行过程,检测变量的变化。

do……while循环和while循环的区别在于,前者是先执行后判断(先斩后奏),后者则是先判断再执行,如果条件不满足,前者也会执行依次。所以do……while至少会执行依次。

案例:输出所有水仙花数

<script>

    /*

     * (1)获取输入的三位数

     * (2)计算三位数的各位数并求立方和

     * (3)判断立方和与该数是否相等,如果相等就打印该数是水仙花数,否则就打印不是水仙花数

     * */

    //var narNum = Number(prompt("请输入一个三位数"));

    var narNum = 100;

    while (narNum <= 999) {

        var hundreds = Math.floor(narNum / 100);

        var decade = Math.floor(narNum / 10) % 10;

        var theUnit = narNum % 10;

        var sum = hundreds * hundreds * hundreds + decade * decade * decade + theUnit * theUnit * theUnit;

        if(sum == narNum){

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

        }

        narNum++;

    }

</script>

案例:GDP预测

<script>

    var usGDP = 142562.75;

    var chinaGDP = 49089.82;

    var year = 2009;

    do{

        usGDP = usGDP*1.02;

        chinaGDP = chinaGDP*1.08;

        year++;

    }while(usGDP >= chinaGDP);

    alert(year+"年中国("+chinaGDP+")赶超美国("+usGDP+")");

</script>

总结一下循环的套路

(1)初始状态

(2)循环条件

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

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

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

(1)初始状态是怎样的

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

(3)重复做什么

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

 

水仙花数问题

GDP预测

初始状态

narNum = 100

var year = 2009;

var usGDP = 142562.75;

var chinaGDP = 49089.82

循环条件

narNum <= 999

usGDP >= chinaGDP

循环体

var hundreds = Math.floor(narNum / 100);

var decade = Math.floor(narNum / 10) % 10;

var theUnit = narNum % 10;

var sum = hundreds * hundreds * hundreds + decade * decade * decade + theUnit * theUnit * theUnit;

if(sum == narNum){ alert(narNum+"是水仙花数");}

usGDP = usGDP*1.02;

chinaGDP = chinaGDP*1.08;

 

为下次循环作准备

narNum++;

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+……+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;

1.3for循环

for循环是比较常用的一个循环结构,能用while和do……while写的循环都可以用for循环来写,它把初始条件和为下次循环做准备的条件放在了for后面对括号中。

格式:for(初始条件;循环条件;为下次循环做准备){重复做的内容}

找出所有水仙花数的案例,用for循环来写

for(var num=100; num<=999; num++){

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

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

        var theUnit = num % 10;

        var sum = Math.pow(hundreds,3) + Math.pow(decade,3) + Math.pow(theUnit,3);

        if(sum == num){

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

        }

    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值