前言
for循环也被成为计数循环,这种循环与while循环的语法格式不同,适用于实现已知循环次数的循环结构。
for循环适用于已知循环次数的场景,所以for循环也被称为“计数循环”。
while循环适合用于未知循环次数的场景,只能构造一个循环条件。
一、for循环 (应用)
例:输出所有的“水仙花数”。水仙花数是一个三位数,各个位的立方和等于它本身。
123=1的三次方+2的三次方+3的三次方,由于式子不成立,所以123不是“水仙花数”。
153=1的三次方+5的三次方+3的三次方,由于式子成立,所以123是“水仙花数”。
var gw,sw,bw;
for(var i=100;i<1000;i++){
gw=i%10;
sw=parseInt(i/10)%10;
bw=parseInt(i/100);
if(gw*gw*gw+sw*sw*sw+bw*bw*bw===i){
console.log(i);
}
}
例:寻找jQuery对象中包含的所有元素。
for(var i=0;i<$("li").length;i++){
// console.log($("li").eq(i).get(0));
// console.log($("li").get(i));
console.log($("li")[i]);
}
遍历:将一个包含多个内容的对象中所包含的内容一个个的寻找出来。
parseInt(str):将字符型数据转换为数值型数据,将实型数值转换为整型数值。
(1)parseInt(“123”) + 1; //124
(2)parseInt(“123abc”) + 1; //124
(3)parseInt(“123a1”) + 1; //124
(4)parseInt(“abc”); //NaN,表示非数字
(5)parseInt(15.36) //15,截断小数
NaN和NaN自己是不能判定相等的,必须使用isNaN()函数来判定。
有关循环的退出:
(1)for循环中表达式2不再成立,因此退出循环被称为“正常化出口”。
(2)for循环中表达式2依然成立,因为遇到了break而退出循环被称为“非正常化出口”。
$(".btn").click(function(){
var int=$("input[name=int]").val();
var n=parseInt(int);
if(isNaN(n)){
window.alert("请输入一个整数。");
}else{
// 判断n是否为质数
for(var i=2;i<=Math.sqrt(n);i++){ // 必须要等循环完才能判断出是否为质数
if(n%i==0){ // 当n%i!=0时并不能够说明任何问题,所以反向思考
break;
}
}
if(i>Math.sqrt(n)){ // 正常化出口
console.log(n + "是质数");
}else{ // 非正常化出口
console.log(n + "不是质数");
}
}
})
上述算法可以判断出2是不是质数,因为判断2时,for循环的表达式2(i<=Math.sqrt(n))在判断2<=Math.sqrt(2),肯定不成立,所以循环一次都没有执行,直接正常化退出。
二、“斐波那契”数列
例:寻找下列数列的规律。 1,1,2,3,5,8, 13 任意一个数的前两项和是它本身,被称为“斐波那契”数列。 前2个,即 1和1。 问题1:输出前n项,每行输出5个数。 问题2:输出第n项。 问题3:计算前n项和。 设n取值为20。 (1)在已知数列规律的前提下,至少知道前几个数字就可以按照已知的规律将数列依次排开 ==前2个,即 1和1。== (2)给出计算每一项的通项公式: ==f=f1+f2 == 第一次计算完 f=f1+f2 后,f的值就是2。 f1=f2; f2=f; f=f1+f2; (3)利用f=f1+f2计算出来的第一个数是第3项。 var f1=1,f2=1;
var f;
var t=3;
while(t<=20){
f=f1+f2;
f1=f2;
f2=f;
t++;
}
问题一:
var f1=1,f2=1;
var f;
var t=3;
document.write("<span>" + f1 + "</span>");
document.write("<span>" + f2 + "</span>");
while(t<=20){
f=f1+f2;
document.write("<span>" + f + "</span>");
if(t%5===0) document.write("<br />");
f1=f2;
f2=f;
t++;
}
问题二:
var f1=1,f2=1;
var f;
var t=3;
while(t<=20){
f=f1+f2;
f1=f2;
f2=f;
t++;
}
console.log(“第20项:” + f);
问题三:
var f1=1,f2=1;
var f;
var t=3;
var sum=f1+f2;
while(t<=20){
f=f1+f2;
sum=sum+f;
f1=f2;
f2=f;
t++;
}
console.log(“前20项和:” + sum);
三、爱因斯坦阶梯
有一个阶梯。若每步上2阶,最后剩下1阶;若每步上3阶,最后剩下2阶;若每步上5阶,最后剩下4阶;若每步上6阶,最后剩下5阶;若每步上7阶,最后一阶都不剩。问这个阶梯有多少阶。
设该阶梯共有ladder阶。
ladder%2===1(阶梯数是奇数)
ladder%3===2
ladder%5===4
ladder%6===5
ladder%7===0(阶梯数是7的倍数)
方法一:
var ladder=7;
while(ladder%2!=1 || ladder%3!=2 || ladder%5!=4 || ladder%6!=5 || ladder%7!=0){
ladder++;
}
console.log(ladder);
方法二:
var ladder=7;
while(ladder%3!=2 || ladder%5!=4 || ladder%6!=5){
ladder+=14;
}
console.log(ladder);