循环
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>");
}
还没有评论,来说两句吧...