循环

来源:互联网 发布:荒潮 知乎 编辑:程序博客网 时间:2024/05/21 08:00

1循环结构的概念
先开看看生活中的一些场景:
(1)食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有顾客的菜打完了。
(2)快递员送快递:查看送件地址→赶往目的地→电话告知收件人→收件人签收→交快递件,重复以上过程,直到所有需要送的快递处理完了。
(3)公交司机……
(4)作业流程……
以上场景都有共同的特点:有条件重复地做一件事,每一次做的事情不同但类似
程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环

var sum = 0;var num = 1;while(num <= 10){    sum += num;    num++;}alert(num);

飙到的含义方式要好的多,比如加到10000,只需要吧num<10改成num<10000.
2while循环
While是表示“当……则……”,也就是当某个条件成立时,则一直重复做。(流程图)
(调试工具查看程序运行轨迹以及变量的变化情况)
Do…while循环
Do{重复内容,
为下次循环做准备
}while(条件)

这里写图片描述
这里写图片描述

year = 2009;var usa = 142562.75;var china = 49089.82;while(china < usa){    usa = usa +(usa * 0.02);    china = china + (china * 0.08);    year++;}alert(year);

总结一下循环的套路
(1)初始状态
(2)循环条件
(3)重复内容(循环体 要重复做的事情)
(4)为下次循环做准备
这里写图片描述
4循环辅助语句
Break:跳出所在的switch或者循环结构
案例

/*解决思路:* 1.提示并接收判断的数n的输入* 2.在[2,n-1]之间寻找因子* 3.如果找到则设置找到的标志,提前结束循环* 4.根据标志输出相应的结果* */var n = Number(prompt("请输入一个自然数"));var m = Math.ceil(Math.sqrt(n));var found = false;//找的因子的标记for(var i=2;i<=m;i++){    if(n%i == 0){        found = true;        break;    }}if(found == false){    alert("这个数是素数");}else{    alert("这个数不是素数");}/** 三个关键点:* 1.break;提前结束循环* 2.标记位;* 3.优化:*   根据定义,找因子的范围为[2,n-1],*   稍微分析一下,最大的因子不会超过n/2,*   即超找范围可缩小至[2,n/2]*   根据数学相关定理,判断范围可进一步缩小至[2,sart(n)]* */Continue:结束本次循环,开启下一次循环。常规思路:/*对100以内既不是3的倍数也不是5的倍数的数求和* 思路一:* 1.在[1,100]范围内每个数逐个判断* 2.如果满足条件就累加* 3.输出和* */var sum = 0;for(var n=1;n<=100;n++){    if(n%3 != 0 && n%5!=0){        sum = sum + n;    }}alert(sum);另一种思路:不满足就放过:/*对100以内既不是3的倍数也不是5的倍数的数求和 * 思路一: * 1.在[1,100]范围内每个数逐个判断 * 2.如果不满足条件就放过 * 3.输出和 * */ var sum = 0; for(var n=1;n<=100;n++){ if(n%3 == 0 || n%5==0){    continue;//结束本次循环 }     sum = sum + n; }alert(sum);

第二种思路的好处是:结构清晰
也就是我们在进行数据处理之前,先把各种不符合条件地情况排除,然后在处理符合条件的情况(这个一般是程序的主体)
如果循环体的主体代码的执行有两个前提条件,常规思路是这么写的,循环体主体代码较多,该程序可读性较差
换另外一个思路来描述,是这样的
for(……){
If(!条件1){
alert(“错误提示1”);
continue;
}
If(!条件2){
alert(“错误提示2”);
continue;
}
}
5循环的嵌套
为什么有循环的嵌套
因为一件事情的内容在重复做。而且这个事情要反复做。
什么时候用循环的嵌套:
两者没有制约关系
两者有制约关系
一般有行数列数并且两者之间存在关系的时候用循环的嵌套
比如等腰三角形的输出

 //1.定义一个等腰三角形的行数//    var num = 10;    //2.每一行的空格数为总行数减去当前是第几行    //3.每一行的星星为当前行num*2-1    //3.循环条件行数小于等于10;for(var i=1;i<=10;i++){    for(var j=10-i;j>0;j--){        document.write("_")    }    for(var a=1;a<=i*2-1;a++){        document.write("*");    }    document.write("<br>");}
原创粉丝点击