1、分支结构
1、else...if结构
1、语法
if(条件1){
语句块1;
}else if(条件2){
语句块2;
}... ...else{
}
2、switch...case结构
1、场合
等值判断
2、语法
switch(变量/表达式){
case 值1:
语句块1;
break;
case 值2:
语句块2;
break;
... ...
default:
语句块n;
break;
}
3、不加break
从匹配的case块开始,一直向下执行,直到结束或碰到break位置
4、直落形式
两个case块之间没有任何内容
switch(变量){
case 1:
case 2:
case 3:
console.log("匹配到1,2,3,会执行相同的操作");
break;
}
2、循环
什么是循环:
一遍又一遍重复的执行相同或相似的代码
循环的特点:
1、循环条件
2、循环操作
1、while
1、语法
while(条件){
操作
}
2、循环的流程控制语句
1、continue
继续,终止本次循环,继续执行下次循环
2、break
破坏,结束整个循环
while(true){
switch(num){
case 1:
...
break;
case 2:
...
break;
case 3:
...
continue;
}
}
以上写法是正确的,continue 主要作用在 while循环中,而不是switch结构
switch(num){
case 1:
...
break;
case 2:
...
break;
case 3:
...
continue;
}
以上写法是错误的,continue是不能作用在switch结构中的。
2、do...while
1、语法
do{
操作
}while(条件);
执行流程:
1、先执行 循环操作
2、判断循环条件,如果条件为false,则退出循环,如果条件为true,则继续执行循环操作
2、while 循环 与 do...while循环的区别
1、while
先判断条件,后执行操作
最少一次都不执行
2、do...while
先执行操作,后判断条件
最少会执行一次循环操作
猴子吃桃问题
猴子摘下了若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天,又将剩下的桃子吃了一半,又多吃一个。以后每天都吃了前一天剩下的一半零一个。到第10天的时候,发现只剩下一个桃子。求:第一天共摘下多少个桃子。
假设:
第一天 共摘了 total 个桃子
每天剩下的桃子 left 个(默认是1)
天数 left 公式(推前一天)
10天 1 left(1)=total/2-1 ==> total=(left+1)*2
09天 4 total=(left+1)*2
08天 10 total=(left+1)*2; left=total;
07天 22
06天 46
05天 94
04天 190
03天 382
02天 766
01天 1534
==========================================
1、循环结构-for
1、while
在控制台上输出1-100之间所有的数字
//1、声明条件:从1开始
var i=1;
//2、循环结构-循环条件
while(i<=100){//条件
console.log(i);//3、操作
i++;//4、更新循环变量
}
2、for语法
for(表达式1;表达式2;表达式3){
//循环操作
}
表达式1:声明条件
表达式2:循环条件判断
表达式3:更新循环变量
for循环执行流程:
1、计算表达式1的值
2、计算表达式2的值(boolean),如果为true,则执行循环体,如果为false,则退出循环
3、执行循环体
4、计算表达式3的值
5、计算表达式2... ...
3、for语句三个表达式的特殊用法
1、表达式1 允许为空
for(;表达式2;表达式3){
}
表达式1;
for(;表达式2;表达式3){
}
2、表达式2 允许为空
如果省略的话,则为死循环
最好在循环内部补充退出条件
3、表达式3 允许为空
死循环
4、三个表达式都允许为空
for(;;){
console.log("这是死循环");
}
5、表达式1 和 表达式3 的内容可以多样化
允许编写多个表达式
4、循环嵌套
for/while/do.while 多允许相互嵌套或转化
循环嵌套:在一个循环中,又出现另一个循环
for(var i=1;i<=10;i++){
for(var j=1;j<=10;j++){
console.log(j);
}
}
5、while/do..while/for 的异同点
1、for 和 while
共同点:
先判断条件,再执行循环体
使用场合:
1、for
优先使用在确定循环次数的场合下
2、while
优先使用在不确定循环次数的场合下
2、do...while
先执行循环操作,再判断循环条件
最少 执行1次循环
场合:
1、优先适用于不确定循环次数的场合下
2、先执行循环体,根据循环体内的操作决定循环条件时,使用do...while
练习:
要求用户 弹框中分别输入 年,月,日
求:该日 是星期?
前提:1900.1.1 是星期一
求:2016.10.28
1900.1.1 - 2015.12.31 : x
2016.1.1 - 2016.9.30 :y
2016.10.28 距 1900.1.1 :x+y+28
练习:
1、控制台上 打印输出 *
2、控制台上 打印输出 *****
3、控制台上 打印输出
*****
*****
*****
*****
*****
4、控制台上 打印输出 以下内容
* 第1行 1个星星
** 第2行 2个星星
*** 第3行 3个星星
**** 第4行 4个星星
***** 第5行 5个星星
5、打印99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
.....
1*9=9 2*9=18 3*9=27 4*9=36
3、练习
1、打印输出 1-1000之间所有的奇数
2、计算 1-1000 所有偶数的和
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...
3、素数
从3 开始
3 是素数
4 不是素数
5 是素数
6 不是素数
7 是素数
8 不是素数
9 不是
10 不是
11 是
10:2-9
35:2-34/2
36: 2-36/2
36/18 = 2
36/19 = 1.0000
36/36 = 1
有一对兔子,从出生的第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总和是多少
1,1,2,3,5,8,... ...
1,1,2,3,5,8,13,21,34,55,89
斐波那契数列
var n1=1,n2=1;
n1 = n1 + n2;
n2 = n1 + n2;
console.log(n1);
console.log(n2);
n1 = n1 + n2;
n2 = n1 + n2;
console.log(n1);
console.log(n2);
求:数列中,某位上的数字时多少
假定 f(10); 想求 第10个月 兔子的总量
f(20); 想求 第20个月 兔子的总量
f(5); 想求 第5个月 兔子的总量
f(4); 想求 第4个月 兔子的总量
f(3); 想求 第3个月 兔子的总量
f(2); 想求 第2个月 兔子的总量 = 1
f(1); 想求 第1个月 兔子的总量 = 1
f(3)=f(2)+f(1)
f(4)=f(3)+f(2)
f(5)=f(4)+f(3)
...
f(100)=f(99)+f(98)