循环结构

来源:互联网 发布:unity3d ar ios 编辑:程序博客网 时间:2024/06/16 22:22

循环结构

1。循环结构的基本概念

先来看看生活中的一些场景:

(1)食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有顾客的菜都打完为止。

(2)快递员送快递:查看送件地址→赶往目的地→电话告知收件人→收件人签收→交快递件,重复以上过程,直到所有需要送的快递都处理完为止。

(3)公交司机:驾驶到一个站点→停车→开前后门→等乘客上下车→关门→继续行驶,重复以上过程,直到交接班为止。

(4)作业流程:老师布置作业→我们完成作业→检查作业→上交作业,重复以上过程,直到学期结束为止。

以上场景都有一个共同点:有条件重复地做一件事,每一次做的事情不同但类似。

程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环

案例:计算1+2+3+......+10
/*方案一*/
var sum1=1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;
/*方案二*/
var sum2=0;
sum2 += 1;
sum2 += 2;
sum2 += 3;
sum2 += 4;
sum2 += 5;
sum2 += 6;
sum2 += 7;
sum2 += 8;
sum2 += 9;
sum2 += 10;

但是这两种方案的描述方式都不太理想,如果是要加到10000呢?

注意观察方案二,它重复地做一件事(将一个数加到sum2中),每一次做的不同但是类似。

我们希望能找到一种更好的描述方法。

/*方案三:改造方案二*/
var sum3=0;
var n=1;
while(n<=10){
    sum3 += n;
    n++;
}

方案三表达的含义和方案二一样,但是表达方式要好的多,比如加到10000,只需要把n<=10改为n<=10000

 

2。while循环

while是表示“当............”,也就是当某个条件成立时,则一直重复做。

(流程图)

(调试工具查看程序运行轨迹以及变量的变化情况)

 

varnum = 1;//加数
 
varsum= 0;//结果
 
while(num<=100){
     sum += num;//sum = sum + num;
     num
++;
 }


do......while:

varnum = 1;//加数
 
varsum= 0;//结果
 
do{
     sum += num;//sum = sum + num;
     num
++;
 }while(num<=100)

 

 

varnum = 100;
while (num<=1000) {
    var a100=Math.floor(num/100);
    var a10=Math.floor((num%100) / 10);
    var a1=Math.floor(num%10);
    var result=Math.pow(a100,3) +Math.pow(a10,3) +Math.pow(a1,3);
    if (num==result) {
        alert(result+"是水仙花数");
    }
    num++;
}

 

varyear = 2009;
var china=49089.82;
var USA=142562.75;
while(USA>china){
    china *= (1+0.08);
    USA *= (1+0.02);
    year++;
}
alert(year+"年,中国("+china+")将超过美国("+USA+")");

总结循环的套路:

1)循环的初始状态

2循环条件
(3)循环体(要重复做的事)
(4)为下一次循环做准备()

如何去写循环程序?回答四个问题:

(1)初始状态是怎样的?

(2)重复做的条件是什么?

(3)重复作什么

(4)怎么过渡到下一次循环

 

 

水仙花数问题

DGP预测

 

初始状态

varnum= 100

 

varyear= 2009;
var china=49089.82;
var USA=142562.75;

循环条件

num <= 999

USA > china

 

 

 

 

循环体

var a100 = Math.floor(num/100);
var a10=Math.floor((num%100) / 10);
var a1=Math.floor(num%10);
var result=Math.pow(a100,3) +Math.pow(a10,3) +Math.pow(a1,3);
if (num==result) {
    alert(result+"是水仙花数");
}

 

 

china*= (1+ 0.08);
USA *= (1+0.02);

为下次循环做准备

num++

year++

 

案例:计算圆周率,π=1 - 1/3 + 1/5 - 1/7 + ........* 4

最后一项的绝对值小于10-6

分析:将公式稍微变化一下

变化为:((+1/1+-1/3++1/5+-1/7+ ........* 4

那么它和我们之前解决的1+2+3+.....+10问题就非常类似了,即都是求累加和的问题,只不过每次加的内容不同而已。

我们可以将每一项拆分为三部分:

t = 符号*1/分母

(1)初始状态

sum = 0;

t = 1;

sign = 1;

denominator = t;//分母

(2)重复做的条件

t>= 10-6

(3)重复做什么

sum += t;

(4)怎么过渡到下一次循环

sign = -sign;

denominator += 2;

t = sign*1/denominator;

原创粉丝点击