JavaScript-5

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

<!doctype html>
<html>
	<head>
		<title>标题</title>
		<meta charset="utf-8">
	</head>
	<body>
		<script>
			function calDate(){
				//1、输入年(year)月(month)日(day)
				var year=Number(prompt("Year:"));
				var month=Number(prompt("Month:"));
				var day=Number(prompt("Day:"));
				var totalDays=0;
				//2、从1900 到 year-1 年 共有多少天
				for(var i=1900;i<year;i++){
					//i表示从1900年开始的每一年
					if(i%4==0&&i%100!=0||i%400==0){
						totalDays+=366;
					}else{
						totalDays+=365;
					}
				}
				//3、year 年的1.1日 到 month-1月共有多少天
				for(var i=1;i<month;i++){
					//i表示的从1月开始的每一月
					switch(i){
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
							totalDays+=31;
							break;
						case 4:
						case 6:
						case 9:
						case 11:
							totalDays+=30;
							break;
						case 2:
							if(year%4==0&&year%100!=0||year%400==0){
								totalDays+=29;
							}else{
								totalDays+=28;
							}
							break;
					}
				}
				//4、累加 day 
				totalDays += day;
				//5、计算 是星期?
				var date=totalDays % 7;
				var msg="";
				switch(date){
					case 0:
						msg="日";
						break;
					case 1:
						msg="一";
						break;
					case 2:
						msg="二";
						break;
					case 3:
						msg="三";
						break;
					case 4:
						msg="四";
						break;
					case 5:
						msg="五";
						break;
					case 6:
						msg="六";
						break;
				}

				console.log(year+"年"+month+"月"+day+"日是星期"+msg);
			}
		</script>
		<button οnclick="calDate();">日期计算器</button>
	</body>
</html>

练习:
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
<!doctype html>
<html>
	<head>
		<title>标题</title>
		<meta charset="utf-8">
	</head>
	<body>
		<script>
			function printStar(){
				for(var j=1;j<=9;j++){//控制行数
					var msg="";
					for(var i=1;i<=j;i++){//控制星星个数
						msg+="*";
					}
					console.log(msg);
				}
			}
			/*打印 99乘法表*/
			function print99(){
				//循环 9行
				for(var i=1;i<=9;i++){
					var msg="";
					for(var j=1;j<=i;j++){
						msg+=(j+"*"+i+"="+(j*i)+"\t");
					}
					console.log(msg);
				}
			}
		</script>
		<button οnclick="printStar()">打印星星</button>
		<button οnclick="print99();">打印99乘法表</button>
	</body>
</html>


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 是




有一对兔子,从出生的第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)
<!doctype html>
<html>
	<head>
		<title>标题</title>
		<meta charset="utf-8">
	</head>
	<body>
		<script>
			/*1、打印 1-1000之间所有的奇数*/
			function fun1(){
				//循环条件:从1开始,到第1000次
				//循环操作:判断 条件的数值是否为奇数,如果为奇数的话,则打印输出
				/*for(var i=1;i<=1000;i++){
					if(i % 2 == 1){
						console.log(i);
					}
				}*/

				for(var i=1;i<=1000;i+=2){
					console.log(i);
				}
			}

			/*2、计算 1-1000之间所有偶数的和*/
			function fun2(){
				var sum=0;//用于累加所有偶数的和
				/*for(var i=1;i<=1000;i++){
					if(i % 2 == 0){
						sum+=i;
					}
				}*/

				for(var i=2;i<=1000;i+=2){
					sum+=i;
				}
				console.log("和为:"+sum);
			}

			/*3、打印 乘法口诀表中任意一行*/
			function fun3(){
				/*1*3=3 2*3=6 3*3=9 */
				var line=prompt("想打印第?行:");
				var result="";
				for(var i=1;i<=line;i++){
					var sum = i * line;
					result += (i+"*"+line+"="+sum+"\t");
					
				}
				console.log(result);
			}

			/*4、累加 1/1+1/3+1/5+...+1/999的和*/
			function fun4(){
				var sum=0;
				for(var i=1;i<=999;i+=2){
					sum += 1/i;
				}
				console.log(sum);
			}
			/*5、判断一个数字是否为素数*/
			function fun5(){
				var num=Number(prompt("输入一个数字:"));
				var isSu=true;//假设 默认是素数
				for(var i=2;i<=num/2;i++){
					if(num % i == 0){
						isSu=false;
						break;
					}
				}
				if(isSu){
					console.log("是素数");
				}else{
					console.log("不是素数");
				}
			}

			/*6、有一对兔子,从出生的第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总和是多少*/
			function fun6(){
				var n1=1,n2=1;
				for(var i=1;i<=10;i++){
					console.log(n1,n2);
					n1 = n1 + n2;
					n2 = n1 + n2;	
				}
			}

			/*7、递归函数:求某个月的兔子的总量*/
			function f(n){
				if(n==2 || n==1){
					return 1;
				}
				return f(n-1)+f(n-2);
			}

			/*
				递归:在函数内,又调用了自己
				递归调用的内层函数,是在外层函数还未结束时就已经开始了,外层函数的调用,就会被阻塞
				缺点:算法复杂度太高,且浪费内存
				解决:绝大部分递归,可以使用循环替代
			*/
			function fun7(n){
				if(n == 1 || n == 2){
					return 1;
				}else{
					var f1=1,f2=1,fn;
					for(var i=1;i<=n-2;i++){
						fn=f1+f2;
						f1=f2;
						f2=fn;
					}
					return fn;
				}
			}
		</script>
		<button οnclick="fun1()">打印1-1000之间所有的奇数</button>
		<button οnclick="fun2()">打印1-1000之间所有偶数和</button>
		<button οnclick="fun3()">打印乘法口诀中任意一行</button>
		<button οnclick="fun4()">打印数列的和</button>
		<button οnclick="fun5()">判断素数</button>
		<button οnclick="fun6()">打印斐波那契数列</button>
		<button οnclick="console.log(f(20));">递归调用</button>
		<button οnclick="console.log(fun7(20));">非递归调用求兔子总量</button>
	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值