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);
- JavaScript的循环结构
- JavaScript的循环结构
- JavaScript循环结构的概念
- JavaScript循环结构小结
- JavaScript循环结构
- JavaScript流程控制-循环结构
- 循环结构的程序设计
- 循环结构的程序设计
- 循环结构的程序设计
- 循环结构的程序设计
- 循环结构的分析
- Java的循环结构
- java的循环结构
- 循环的结构
- 循环结构的区别
- Java的循环结构
- 循环结构的程序设计
- JavaScript复习之--流程控制-循环结构
- hdu 2042 不容易系列之二
- STM32之GPIO有启发1
- 动态规划----0-1背包问题
- before伪元素和after伪元素的具体使用
- apt lock
- JavaScript的循环结构
- Uva11925
- Spring源码学习思路
- (十九)四大组件的工作过程-BroadcastReceiver
- 第十章 进程与僵尸进程 (上)
- HDU4565 So Easy!【矩阵快速幂】
- (二十)四大组件的工作过程-ContentProvider
- linux下如何解决socket的error: [Errno 98] Address already in use
- 模块化?组件化?插件化?热更新?热修复?