循环辅助语句
案例一:判断素数
三个关键点:
(1)break;提前结束
(2)标志位;因为一开始运行是没有找到的,所以标记立为false,如果找到了,标记就立为true
(3)优化:根据定义,找因子的范围定位[2,n-1],稍微分析一下,最大的因子不会超过n/2,即查找范围可缩小至[2,n/2];根据数学相关定理,判断范围可进一步缩小至[2,sqrt(n)]
var n = Number(prompt("请输入一个自然数:"));
var m = Math.ceil(Math.sqrt(n));//根据数学相关定理,查找范围可缩小至[2,sqrt(n)]
var flag = false;//设置一个找到因子的标记
for(var i = 2;i <= m/*n/2*//*n-1*/;i++){
if(n % i == 0){
flag = true;
break;//找到则提前结束
}
}
alert(flag?"不是素数":"是素数");
break:跳出所在的switch或者循环结构
案例二:对100以内不是3的倍数也不是5的倍数的数求和
常规思路:对满足条件的数累加
/* 思路一:
* 1.在[1,100]范围内每个数进行逐个判断
* 2.如果满足条件就累加
* 3.输出和
* */
var sum = 0;//累加和
for(var i = 1;i <= 100;i++){
if(i % 3 != 0 && i % 5 != 0){
sum += i;
}
}
alert(sum);
另一种思路:不满足条件的就放过
continue:结束本次循环,继续下一次循环
/*思路二:
* 1.在[1,100]范围内每个数重复步骤2,3
* 2.如果不满足条件就放过
* 3.累加
* 4.输出结果
* */
var sum = 0;
for(var i = 1;n <= 100;i++){
if(i % 3 == 0 || i % 5 == 0){
continue;//结束本次循环,继续下一次循环
}
sum += i;
}
alert(sum);
第二种思路的好处是:结构清晰
也就是我们在进行数据处理之前,先把各种不符合条件的情况先排除,然后在处理符合条件的情况(这个一般是程序的主体)
如果循环体的主体代码的执行有两个前提条件,常规思路是这么写的,如果循环体主体代码较多,该程序的可读性较差
for(...){
if(条件1){
if(条件2){
循环体主体代码(可能代码较多)
}else{
alert("错误提示2");
}
}else{
alert("错误提示1");
}
}
换成另外一个思路来描述,是这样的:
for(......){
if(!条件1){
alert("提示错误1");
continue;
}
if(!条件2){
alert("错误提示2");
continue;
}
循环体主体代码
}