首页 > 网站 > WEB开发 > 正文

Javascript基础(五)之循环结构

2024-04-27 15:03:59
字体:
来源:转载
供稿:网友

2、循环结构-1 1、问题 1、控制台中输出一句Hello World 2、控制台中输出10句Hello World 3、控制台中输出1000句Hello World 4、将 1000 句 Hello World 改成 “你好世界!” 5、在 1000 句你好世界基础上 增加 第 1 句 你好世界! … 第1000句 你好世界! 2、什么是循环 循环:一遍又一遍的重复的执行相同或者相似的代码 生活中的循环: 1、上学 2、运动员跑圈 3、活着 4、地球公转和自转 循环的特点: 1、循环条件 指定循环的次数,或者继续执行循环的条件 2、循环体:也成为循环操作,重复做的事情是什么 3、while 循环 语义:当 条件 满足的时候,去做某些事情 1、语法 while(条件){ 循环体(循环操作) }

执行流程: 1、判断条件,如果条件为真,则执行循环体中的内容,如果条件为假,则跳出循环结构 2、执行完循环体,再一次判断条件, 2、练习 1、打印输出 1 - 100 之间所有的数字 2、打印输出 1 - 100之间所有的偶数 3、计算1 - 100 之间所有的奇数和<script> /*打印输出 1句 Hello World*/ function fun1(){ console.log("Hello World"); } /*打印输出 10句 Hello World*/ function fun2(){ //1、条件:10遍 ,从第1遍开始,到第10遍结束 var i=1;//循环次数 //2、操作:console.log("Hello World"); while(i<=1000){ console.log("第"+i+"遍你好 世界!"); //循环次数进行增加(自增) i++;//更新循环条件 } } /*打印1 - 100 之间所有的数字*/ function fun3(){ //循环条件:从第1遍开始,到第100遍结束 var i=1; while(i <= 100){ //循环操作:将循环条件打印输出 console.log(i); i++; } } /*打印 1- 100之间所有的偶数*/ function fun4(){ //循环条件:从第1遍开始,到第100遍结束 var i = 1; while(i<=100){ /*循环操作: 1、判断 循环条件值 是否为 偶数 2、如果是偶数的话打印输出 3、循环条件的自增 */ if(i % 2 == 0){ console.log(i); } i++; } } /*计算 1- 100之间所有奇数的和*/ function fun5(){ //循环条件:从1开始到100结束 var sum = 0;//用于累加 i 的值 var i = 1; while(i<=100){ /*循环操作: 1、判断是否为奇数 2、如果是奇数的话,将循环条件值累加 3、更新循环变量 */ if(i % 2 == 1){ sum += i; } i++; } console.log("和为:"+sum); } /*打印 1- 100之间所有非3倍数的数字(continue)*/ function fun6(){ //条件:1-100 var i = 1; while(i <= 100){ //操作:碰见3的倍数时,终止打印 if(i % 3 == 0){ i++; continue; } console.log(i); i++; } } /*打印 1 - 100之间非3倍数的数字(非continue)*/ function fun7(){ var i = 1; while(i <= 100){ if(i % 3 != 0){ console.log(i); } i++; } } /*要求用户一直不停的录入数据,并且将录入的数据打印在控制台上,直到输入 exit 为止*/ function fun8(){ //循环条件:输入 exit 为止,次数:无限次 while(true){ /*循环操作: 1、用户录入数据 2、判断,如果用户录入的是 exit,则 退出循环 3、将录入的数据打印在控制台上 */ var msg = PRompt("请输入一句话:"); if(msg == "exit"){ alert("Good Bye!"); break;//结束循环的条件 } console.log(msg); } } </script> 3、循环中的流程控制 1、continue 终止本次循环的执行,继续开始下次循环 ex: 打印 1 - 100之间所有非3的倍数的数字 2、break 结束整个循环的运行 可以用在:不确定循环次数的时候去结束循环 ex: 要求用户 从弹框中 录入数据,录入完直接打印在控制台上,直到输入 exit 位置4、do...while 循环 1、特点 先执行循环操作,再判断循环条件 2、语法 do{ 循环操作 }while(条件); 3、while 与 do...while 之间的区别 1、while 先判断条件,再执行循环体 最少执行 0 次循环 2、do...while 先执行循环体,再判断循环条件 最少执行 1 次循环 4、练习 1、改写日期计算器为循环版本 2、猴子吃桃 猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,又多吃一个。第二天早上,将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃前一天的一半零一个。到第10天早上,发现只剩一个桃子。求:第一天摘了多少个桃子<script> function calDate(){ var year = prompt("Input a year:"); var month = prompt("Input a month:"); var day = Number(prompt("Input a day:")); var totalDays = 0; //统计 month 之前所有月的 天数 var i = month - 1;//从 month前一个月开始计算 //条件:到1月为止 while(i>=1){ switch(i){ case 11: case 9: case 6: case 4: totalDays +=30; break; case 10: case 8: case 7: case 5: case 3: case 1: totalDays += 31; break; case 2: totalDays += 28; if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){ totalDays += 1; } break; } i--; } totalDays += day; console.log("是第"+totalDays+"天"); } /*猴子摘桃*/ function calNumber(){ var day = 10;//已知第10天 var left = 1;//已知最后剩一个 var total;//前一天的剩余量 //循环条件:从第10天 算到第 2天为止 while(day >= 2){ //循环操作: //1、计算 total 是多少 //2、将total 赋值给 left 继续计算下一次的total total = (left + 1) * 2; left = total; console.log("第"+(day-1)+"天,摘了"+total+"个桃子"); day--; //天数递减 } console.log("第一天,猴子摘了"+total+"个桃子!"); } </script>

循环结构-2 1、for 循环 1、while 打印 1 - 10 之间所有的数字 var i = 1; //1、声明循环条件变量 while(i <= 10){ //2、循环条件判断 console.log(i);//3、循环操作 i++;//4、更新循环变量 } 2、for 循环 目的:为了简化 while 循环的开发 for(表达式1;表达式2;表达式3){ 循环操作 } 表达式1:声明循环条件变量 表达式2:循环条件判断 表达式3:更新循环变量

流程: 1、计算表达式1的值 即声明循环条件(只执行1次) 2、计算表达式2的值 即计算循环条件时否满足,如果条件为真,则继续向下执行,否则退出循环 3、条件为真时,执行循环体 4、计算表达式3的值 即更新循环变量 5、计算表达式2的值 即继续判断循环条件,回到第2步 练习 1、打印 1 - 100 之间所有的数字 2、打印 1 - 100 之间所有的偶数 3、计算 1 - 100 之间所有奇数的和 4、定义一个函数,打印乘法口诀中的任意一行 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 5、定义一个函数,计算 1+1/3+1/5+...+1/999的和 1 : 1/1 1/3 : 1/3 1/5 : 1/5 6、兔子问题:有1对兔子,从出生后的第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生一对兔子。加入兔子都不死,问某个月的兔子总数是多少? 菲波那切数列 n1 n2 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 求第n个月的兔子的总量 function f(n){ 如果 n==1 或 n == 2 ,直接返回1 否则 就返回 上个月 和 上上个月 的量的和 返回 f(n-1) + f(n-2) } 求第5个月的兔子总量:f(5) f(5) = f(4) + f(3) f(4) = f(3) + f(2) f(3) = f(2) + f(1) f(3) = f(2) + f(1)<script> /*打印 1-100 之间所有的数字*/ function fun1(){ //表达式1:声明循环变量 var i=1 //表达式2:循环条件判断 i<=100 //表达式3:更新循环变量 i++ //循环操作 打印循环条件 i 的值 for(var i=1;i<=100;i++){ console.log(i); } } function fun2(){ //表达式1:声明循环变量 var i=1 //表达式2:循环条件判断 i<=100 //表达式3:更新循环变量 i++ //循环操作 判断 循环变量是否为偶数,偶数则打印 /*for(var i=1;i<=100;i++){ if(i % 2 == 0){ console.log(i); } }*/ //表达式1:从 2 开始 //表达式2:到 100 结束 //表达式3:更新时 +2 for(var i=2;i<=100;i+=2){ console.log(i); } } /*累加 1-100 之间所有奇数的和*/ function fun3(){ //循环为:声明累加和的变量 var sum = 0; //表达式1:从1开始 //表达式2:到 100 结束 //表达式3:更新变量 i+=2 for(var i=1;i<=100;i+=2){ sum += i; } console.log(sum); } /*猴子吃桃问题*/ function fun4(){ var left = 1;//第10天的剩余 var total; // 前一天桃子总数 for(var day=10;day>1;day--){ total = (left + 1) * 2; left = total; } console.log(total); } function fun5(){ var line = prompt("请输入要打印的行数:"); var str = "";//用于 追加 每次计算出的 乘法口诀的数据 //条件:从 1 开始, 到line结束 for(var i=1;i<=line;i++){ //操作:打印 循环变量 * line = (变量*line) var s = i+"*"+line+"="+(i*line); str += s + "/t"; } console.log(str); } function fun6(){ var sum = 0; for(var i=1;i<=1000;i+=2){ sum += (1/i); } console.log(sum); } // 计算第 n 个月的兔子总量(递归) /* 递归:在函数内,又调用了自己 递归调用的内层函数,是在外层函数还未结束时就已经开始了,外层函数的调用,就会被阻塞 缺点:算法复杂度太高,浪费内存 解决:大部分递归,可以被循环所替代 */ /* 如果 n==1 或 n == 2 ,直接返回1 否则 就返回 上个月 和 上上个月 的量的和 返回 f(n-1) + f(n-2) */ function f(n){ if(n == 1 || n == 2){ return 1; } return f(n-1) + f(n-2); } /*通过 循环 解决递归的问题*/ function f1(n){ if(n == 1 || n == 2){ return 1; } var f1 = 1 , f2 = 1 , fn; for(var i=1;i<=n-2;i++){ fn = f1 + f2; f1 = f2; f2 = fn; } return fn; } /*兔子问题:菲波那切数列*/ function fun7(){ var n1 = 1; var n2 = 1; for(var i=1;i<=10;i++){ console.log(n1); console.log(n2); n1=n1 + n2; n2=n1 + n2; } } function testF(){ var result = f1(100); console.log("共有兔子:"+result+"只"); } </script> 3、for 循环表达式的特殊用法 1、表达式1 允许为空 可以省略表达式1,但;不能省 for(;条件;自增){ } ex: var i=1; for(;i<=10;i++){ console.log(i); } 2、表达式2 允许为空 可以省略表达式2,但;不能省 如果省略表达式2,那么就是 "死循环" 3、表达式3 允许为空 死循环 4、三个表达式都可以省略,但;不能省 for(;;){ if(条件) break; i++; } 5、表达式1 和 表达式3 的多样化 表达式1:允许声明多个变量,用,隔开 表达式3:允许更新多个变量,用,隔开 4、循环嵌套 for,while,do...while都可以实现嵌套操作 ex: for(var i=1;i<=9;i++){ //外层循环 for(var j=1;j<=9;j++){ //内层循环 } } 练习: 1、在控制台上打印输出 "*" 2、在控制台上打印输出 "*****" 3、在控制台上打印输出 ***** ***** ***** ***** ***** 4、在控制台上打印输出 * ** *** **** ***** 5、在控制台上打印输出 * 4个空格1个* (5-行数) ** 3个空格2个* *** 2个空格3个* **** 1个空格4个* ***** 0个空格5个*<script> /*左对齐打印星星*/ function printStar(){ for(var j=1;j<=9;j++){//控制的是 行数 for(var i=1,str="";i<=j;i++){ //星星数量(列数 ) str += "*"; } console.log(str); } } /*打印 99 乘法表*/ function print(){ for(var i=1;i<=9;i++){ var str=""; for(var j=1;j<=i;j++){ var result = j+"*"+i+"="+(j*i)+"/t"; str += result; } console.log(str); } } /*右对齐打印星星*/ function printStar1(){ for(var i=1;i<=5;i++){ var str=""; //输出空格 for(var j=1;j<=5-i;j++){ str +=" "; } //输出 * for(var k=1;k<=i;k++){ str +="*"; } console.log(str); } } </script>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表