JS基础五
来源:互联网 发布:linux epoll socket 编辑:程序博客网 时间:2024/06/11 18:21
1.循环结构
循环结构的概念:
生活中的一些场景:
食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,知道所有顾客的菜都打完了。
快递员送快递:查看送件地址→赶往目的地→电话告知收件人→收件人签收→交快递,重复以上过程,直到所有需要送的快递都处理完。
公交司机。。。
作业流程。。。
以上场景都有一个共同的特点:有条件的重复的做一件事,每一次做的事情不同但类似。
程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也该有相应的描述,这就是循环。
/*计算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
While是表示“当……则……”,也就是当某个条件成立时,则一直重复做某件事。(流程图)
(调试工具查看程序运行轨迹以及变量的变化情况)
var cha =49089.82;
var usa = 142562.75;
var year = 2009;
while(cha<usa){
/*cha += 49089.82*0.8;
usa += 142562.75*0.2;*/
cha *= (1+0.08);
usa *= (1+0.02);
year ++;
}
alert(year+"年超过美国");
水仙花数:
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){
document.write(num+"是水仙花数"+"<br>");
}
num ++;
}
循环的套路:
初始状态
循环条件
循环体(需要重复做的事情)
为下次循环做准备()
如何去写循环的程序?回答四个问题:
初始状态是怎样的?
重复做的条件是什么
重复做什么
怎么过渡到下一次循环
水仙花数问题
GDP预测问题
初始状态
Num = 100
var year = 2009;
var cha = 49089.82;
var usa = 142562.75;
循环条件
Num <= 999
cha<usa
循环体
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){
document.write(num+"是水仙花数"+"<br>");
}
cha *= (1+0.08);
usa *= (1+0.02);
为下次循环做准备
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……+10的问题就非常类似。都是求和的问题,只不过每次加的内容不同而已。
我们可以将每一项拆分为:
t = 符号*1/分母
初始状态是怎样的?
sum = 0;
t = 1;
sign = 1;
deno = 1;
重复做的条件是什么
|t|>=10-6
重复做什么
sum += t;
(4)怎么过渡到下一次循环
sign = -sign;
deno = t;
t = sign*1/deno;
do while循环
var sum3 = 0;
var n = 1;
do{
sum3 += n;
n++;
}while(n <= 10);
alert(sum3);
先循环体,在判断循环条件
循环辅助语句
break:跳出所在的switch或者循环结构。
案例:素数的判断
var n =Number(prompt("输入一个数:"));
var found = false;
for(var i = 2; i<Math.sqrt(n);i++){
if(n%i == 0){
found = true;
// alert(n+"不是质数");
break; //找到则提前结束
}
}
alert(found?"不是质数":"是质数");
continue:结束本次循环,开启下一次循环。
案例:
对100以内既不是3的倍数也不是5的倍数的数求和
常规思路:对满足条件的数累加
var sum = 0;
for(var i = 1; i<=100; i++){
if(i%3 != 0 && i%5 != 0){
sum += i;
}
}
alert(sum);
另一种思路:不满足条件的就放过
var sum = 0;
for(var i = 1; i<=100; i++){
if(i%3 == 0 || i%5 == 0){
continue; //结束本次循环
}
sum += i;
}
alert(sum);
这种思路的好处:结构清晰,也就是我们在进行数据处理之前,先把各种不符合条件的情况先排除然后再处理符合条件的情况(这个一般是程序的主体)
如果循环体的在主体代码的执行有两个前提条件,常规思路代码如下,循环体主体代码较多,该程序的可读性较差
if(条件1){
if(条件2){
alert(”错误提示1”);
}
主体代码(可能代码较多)
}else{
alert(”错误提示2”);
}
换另一个思路来描述,如下:
for(……){
if(!条件1){
alert(“错误提示2”);
continue;
} if(!条件2){
alert(“错误提示2”);
continue;
}
循环体主体代码;
}
循环的嵌套:
为什么有循环的嵌套?
因为一件事情的内容需要重复做,而且这个事情要反复做
什么时候用循环的嵌套:
一般有行数有列数并且两者之间存在关系的时候用循环的嵌套。
比如直角三角形的输出:
for(var i =1;i<=9; i++){
for(var n = 1;n<=i; n++){
document.write("*"+" ");
}
document.write("<br>");
}
- JS基础五
- JS基础加强五_数组操作
- js笔记五:数组基础篇
- 微信小程序 Node.js (基础五) EventEmitter
- node.js学习(五、基础js语法)
- week10---11月13日 JS基础(五)
- js五种数据类型,以及相关的基础方法
- javaScript基础(五)之js的运算符
- js(五)
- 基础五
- 【Node.js基础篇】(五)使用mime模块来响应css、js文件的请求
- js基础
- js基础
- js基础
- js基础
- JS基础
- js基础
- js基础
- C语言的内存四区
- angular 4 实战开发--安卓兼容问题(1)
- 数组 二维数组
- git 服务器搭建,在自己服务器上搭建私有仓库
- CodeForces
- JS基础五
- List集合的介绍与应用
- 感受异或的神奇
- java 基础(类与对象1)
- Keylogger Gym
- IO多路复用之epoll
- makefile--工程管应用理器的简单
- OSPF
- HashSet