3 循环结构
While(满足的条件){
当满足条件时执行的内容
}
例:输出100-1000之内的所有的水仙数
var num=100;
while(num<1000) {
var a=Math.floor(num/100);
var b=Math.floor(num/10)%10;
var c=num%10;
var res="";
if (num==a*a*a+b*b*b+c*c*c){
res=num+" 这个数是水仙花数";
alert(res);
}
num++;
}
食堂打饭的叔叔:收钱、询问菜品、打菜、将餐盘递给顾客,重复以上步骤。
水仙花数:
例:判断gdp总值
2009年时chn 49089.82
Usa 142562.75
中国的增长率是0.08
美国的增长率是0.02
假设增长率不变,什么时候中国超越美国
<script>
var year=2009;
var chn=49089.82;
var Usa=142562.75;
while(year>=2009){
var z1=0.08;
var z2=0.02;
if (chn>Usa){
alert(year+"年,中国超越美国");
break;
}
year++;
var chn=chn*(1+z1);
var Usa=Usa*(1+z2);
}
</script>
当我们拿到一个循环的问题的时候应该怎么办?
问自己4个问题:
初始状态是什么
重复的条件是什么
要重复做什么
如何过度到下次循环
例:计算圆周率()
1、初始状态:
Pi=0
Fenzi=1
Fenmu=1
2、重复的条件:
分数的绝对值大于10^-6
3、重复做什么:
将这个分数加到pi里面
4、如何过度到下次循环:
分子=分子*-1
分母=分母+2
1、循环结束之后,圆周率=pi*4
var pi=0;
var fz=1;
var fm=1;
while(Math.abs(fz/fm )>0.000001){
var fs= fz /fm;
var pi= pi +fs;
var fz= fz *(-1);
var fm= fm +2;
}
alert("圆周率为:"+pi*4);
do-while
do{
重复做的事情
}while()
例:从1加到100
var sum=0;
var num=1;
while(num<=100){//while
sum+=num;
num++;
}
alert(sum+" "+num);
do{
sum+=num;
num++;
}while(num<=100)//do-while
alert(sum+""+num);
do-while与while本质上没有区别,就是做循环的事情。唯一的区别就是do-while先做一次循环的内容然后在去判断条件。
While是先去判断条件再来做循环体里面的内容。
明确的知道循环的次数的时候用for循环更容易理解。
For(初始值;条件;过渡到下次循环){
循环体(重复做的事)
}
例:求圆周率,(随机数)面积为1的正方形中随机丢一豆子。
(用Math.random()获得随机数)
1、初始状态:
Sum=0
Num=0
2、重复的条件:
Num<10000
3、重复做的事
随机生成两个数
判断这个点是否在园内 如果在sum+1
4、下次循环做准备num++
var res=0;
var num=10000;
for(vari=1;i<=num;i++) {
var a=Math.random();
var b=Math.random();
if (Math.sqrt(a*a+b*b)<=1){
res++;
}
}
var pi=4*(res/num);
alert("圆周率:"+pi);
循环的辅助工具
例:素数判断(质数)
用户任意输入一个数,判断这个数是不是素数并打印。
1、初始条件:
Num=用户输入
i=2
假设他是素数isprice=ture
2、循环条件:
i<num
3、要重复做的事
4、判断num是否整除i如果整除了就说明不是素数:isprice=false
var num=Number(prompt("输入任意一个数"));
var isPrime=true;
for(i=2;i<num;i++){
if (num% i ==0) {
var isPrime= false;
break;
}
}
if(isPrime){
alert("输出这个素数:"+num)
}else{
alert(num+""+"这个数不是素数")}
break可以配合着循环结构使用,作用是跳出当前循环结构。
Continue:结束本次循环,直接进行下一次循环
例:对100以内即不是3倍数也不是5倍数的数求和。
var num=100;
var sum=0;
for(i=1;i<num;i++){
if (i%3!=0&& i%5!=0) {
sum=sum+i;
}
}
alert(sum) 第一种方法
var sum1=0;
for(varj=1;j<100;j++){
if(0==j%3||0==j%5){
continue;
}
sum1+=j;
}
alert(sum1); 第二种方法
循环的嵌套
请输入如下图像
********
********
********
********
Document.write(“*”)
Document.write(“</br>”)
| 星星的个数 |
第一行 | 8 |
第二行 | 8 |
第三行 | 8 |
第四行 | 8 |
var row=Number(prompt("输入行数"));
var col=Number(prompt("输入列数"));
for(i=0;i<row;i++){
for (j=0;j<col;j++) {
document.write("*");
}
document.write("</br>");
*
***
*****
*******
var row=Number(prompt("输入行数"));
var col=Number(prompt("输入列数"));
for(i=0;i<row;i++){
for(j=0;j<2*i-1;j++){
document.write("*");
}
document.write("</br>");
}
等腰三角形
*
***
*****
*******
var row=Number(prompt("输入行数"));
var col=Number(prompt("输入列数"));
for(i=0;i<row;i++){
for(z=0;z<row-i;z++){
document.write(" ");
}
for(j=0;j<2*i+1;j++){
document.write("*");
}
document.write("</br>");
}
打印出100以内的所有素数
for(var j=2;j<100;j++){
var isPrime=true;
for (vari =2;i <j;i++){
if (j% i ==0) {
varisPrime= false;
break;
}
}
if (isPrime) {
document.write(i+" ");
}
}