2、循環(huán)結(jié)構(gòu)-1 1、問題 1、控制臺(tái)中輸出一句Hello World 2、控制臺(tái)中輸出10句Hello World 3、控制臺(tái)中輸出1000句Hello World 4、將 1000 句 Hello World 改成 “你好世界!” 5、在 1000 句你好世界基礎(chǔ)上 增加 第 1 句 你好世界! … 第1000句 你好世界! 2、什么是循環(huán) 循環(huán):一遍又一遍的重復(fù)的執(zhí)行相同或者相似的代碼 生活中的循環(huán): 1、上學(xué) 2、運(yùn)動(dòng)員跑圈 3、活著 4、地球公轉(zhuǎn)和自轉(zhuǎn) 循環(huán)的特點(diǎn): 1、循環(huán)條件 指定循環(huán)的次數(shù),或者繼續(xù)執(zhí)行循環(huán)的條件 2、循環(huán)體:也成為循環(huán)操作,重復(fù)做的事情是什么 3、while 循環(huán) 語義:當(dāng) 條件 滿足的時(shí)候,去做某些事情 1、語法 while(條件){ 循環(huán)體(循環(huán)操作) }
執(zhí)行流程: 1、判斷條件,如果條件為真,則執(zhí)行循環(huán)體中的內(nèi)容,如果條件為假,則跳出循環(huán)結(jié)構(gòu) 2、執(zhí)行完循環(huán)體,再一次判斷條件, 2、練習(xí) 1、打印輸出 1 - 100 之間所有的數(shù)字 2、打印輸出 1 - 100之間所有的偶數(shù) 3、計(jì)算1 - 100 之間所有的奇數(shù)和<script> /*打印輸出 1句 Hello World*/ function fun1(){ console.log("Hello World"); } /*打印輸出 10句 Hello World*/ function fun2(){ //1、條件:10遍 ,從第1遍開始,到第10遍結(jié)束 var i=1;//循環(huán)次數(shù) //2、操作:console.log("Hello World"); while(i<=1000){ console.log("第"+i+"遍你好 世界!"); //循環(huán)次數(shù)進(jìn)行增加(自增) i++;//更新循環(huán)條件 } } /*打印1 - 100 之間所有的數(shù)字*/ function fun3(){ //循環(huán)條件:從第1遍開始,到第100遍結(jié)束 var i=1; while(i <= 100){ //循環(huán)操作:將循環(huán)條件打印輸出 console.log(i); i++; } } /*打印 1- 100之間所有的偶數(shù)*/ function fun4(){ //循環(huán)條件:從第1遍開始,到第100遍結(jié)束 var i = 1; while(i<=100){ /*循環(huán)操作: 1、判斷 循環(huán)條件值 是否為 偶數(shù) 2、如果是偶數(shù)的話打印輸出 3、循環(huán)條件的自增 */ if(i % 2 == 0){ console.log(i); } i++; } } /*計(jì)算 1- 100之間所有奇數(shù)的和*/ function fun5(){ //循環(huán)條件:從1開始到100結(jié)束 var sum = 0;//用于累加 i 的值 var i = 1; while(i<=100){ /*循環(huán)操作: 1、判斷是否為奇數(shù) 2、如果是奇數(shù)的話,將循環(huán)條件值累加 3、更新循環(huán)變量 */ if(i % 2 == 1){ sum += i; } i++; } console.log("和為:"+sum); } /*打印 1- 100之間所有非3倍數(shù)的數(shù)字(continue)*/ function fun6(){ //條件:1-100 var i = 1; while(i <= 100){ //操作:碰見3的倍數(shù)時(shí),終止打印 if(i % 3 == 0){ i++; continue; } console.log(i); i++; } } /*打印 1 - 100之間非3倍數(shù)的數(shù)字(非continue)*/ function fun7(){ var i = 1; while(i <= 100){ if(i % 3 != 0){ console.log(i); } i++; } } /*要求用戶一直不停的錄入數(shù)據(jù),并且將錄入的數(shù)據(jù)打印在控制臺(tái)上,直到輸入 exit 為止*/ function fun8(){ //循環(huán)條件:輸入 exit 為止,次數(shù):無限次 while(true){ /*循環(huán)操作: 1、用戶錄入數(shù)據(jù) 2、判斷,如果用戶錄入的是 exit,則 退出循環(huán) 3、將錄入的數(shù)據(jù)打印在控制臺(tái)上 */ var msg = 循環(huán)結(jié)構(gòu)-2 1、for 循環(huán) 1、while 打印 1 - 10 之間所有的數(shù)字 var i = 1; //1、聲明循環(huán)條件變量 while(i <= 10){ //2、循環(huán)條件判斷 console.log(i);//3、循環(huán)操作 i++;//4、更新循環(huán)變量 } 2、for 循環(huán) 目的:為了簡(jiǎn)化 while 循環(huán)的開發(fā) for(表達(dá)式1;表達(dá)式2;表達(dá)式3){ 循環(huán)操作 } 表達(dá)式1:聲明循環(huán)條件變量 表達(dá)式2:循環(huán)條件判斷 表達(dá)式3:更新循環(huán)變量 流程: 1、計(jì)算表達(dá)式1的值 即聲明循環(huán)條件(只執(zhí)行1次) 2、計(jì)算表達(dá)式2的值 即計(jì)算循環(huán)條件時(shí)否滿足,如果條件為真,則繼續(xù)向下執(zhí)行,否則退出循環(huán) 3、條件為真時(shí),執(zhí)行循環(huán)體 4、計(jì)算表達(dá)式3的值 即更新循環(huán)變量 5、計(jì)算表達(dá)式2的值 即繼續(xù)判斷循環(huán)條件,回到第2步 練習(xí) 1、打印 1 - 100 之間所有的數(shù)字 2、打印 1 - 100 之間所有的偶數(shù) 3、計(jì)算 1 - 100 之間所有奇數(shù)的和 4、定義一個(gè)函數(shù),打印乘法口訣中的任意一行 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、定義一個(gè)函數(shù),計(jì)算 1+1/3+1/5+...+1/999的和 1 : 1/1 1/3 : 1/3 1/5 : 1/5 6、兔子問題:有1對(duì)兔子,從出生后的第3個(gè)月起每個(gè)月都生1對(duì)兔子,小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子。加入兔子都不死,問某個(gè)月的兔子總數(shù)是多少? 菲波那切數(shù)列 n1 n2 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 求第n個(gè)月的兔子的總量 function f(n){ 如果 n==1 或 n == 2 ,直接返回1 否則 就返回 上個(gè)月 和 上上個(gè)月 的量的和 返回 f(n-1) + f(n-2) } 求第5個(gè)月的兔子總量: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 之間所有的數(shù)字*/ function fun1(){ //表達(dá)式1:聲明循環(huán)變量 var i=1 //表達(dá)式2:循環(huán)條件判斷 i<=100 //表達(dá)式3:更新循環(huán)變量 i++ //循環(huán)操作 打印循環(huán)條件 i 的值 for(var i=1;i<=100;i++){ console.log(i); } } function fun2(){ //表達(dá)式1:聲明循環(huán)變量 var i=1 //表達(dá)式2:循環(huán)條件判斷 i<=100 //表達(dá)式3:更新循環(huán)變量 i++ //循環(huán)操作 判斷 循環(huán)變量是否為偶數(shù),偶數(shù)則打印 /*for(var i=1;i<=100;i++){ if(i % 2 == 0){ console.log(i); } }*/ //表達(dá)式1:從 2 開始 //表達(dá)式2:到 100 結(jié)束 //表達(dá)式3:更新時(shí) +2 for(var i=2;i<=100;i+=2){ console.log(i); } } /*累加 1-100 之間所有奇數(shù)的和*/ function fun3(){ //循環(huán)為:聲明累加和的變量 var sum = 0; //表達(dá)式1:從1開始 //表達(dá)式2:到 100 結(jié)束 //表達(dá)式3:更新變量 i+=2 for(var i=1;i<=100;i+=2){ sum += i; } console.log(sum); } /*猴子吃桃問題*/ function fun4(){ var left = 1;//第10天的剩余 var total; // 前一天桃子總數(shù) for(var day=10;day>1;day--){ total = (left + 1) * 2; left = total; } console.log(total); } function fun5(){ var line = prompt("請(qǐng)輸入要打印的行數(shù):"); var str = "";//用于 追加 每次計(jì)算出的 乘法口訣的數(shù)據(jù) //條件:從 1 開始, 到line結(jié)束 for(var i=1;i<=line;i++){ //操作:打印 循環(huán)變量 * 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); } // 計(jì)算第 n 個(gè)月的兔子總量(遞歸) /* 遞歸:在函數(shù)內(nèi),又調(diào)用了自己 遞歸調(diào)用的內(nèi)層函數(shù),是在外層函數(shù)還未結(jié)束時(shí)就已經(jīng)開始了,外層函數(shù)的調(diào)用,就會(huì)被阻塞 缺點(diǎn):算法復(fù)雜度太高,浪費(fèi)內(nèi)存 解決:大部分遞歸,可以被循環(huán)所替代 */ /* 如果 n==1 或 n == 2 ,直接返回1 否則 就返回 上個(gè)月 和 上上個(gè)月 的量的和 返回 f(n-1) + f(n-2) */ function f(n){ if(n == 1 || n == 2){ return 1; } return f(n-1) + f(n-2); } /*通過 循環(huán) 解決遞歸的問題*/ 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; } /*兔子問題:菲波那切數(shù)列*/ 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 循環(huán)表達(dá)式的特殊用法 1、表達(dá)式1 允許為空 可以省略表達(dá)式1,但;不能省 for(;條件;自增){ } ex: var i=1; for(;i<=10;i++){ console.log(i); } 2、表達(dá)式2 允許為空 可以省略表達(dá)式2,但;不能省 如果省略表達(dá)式2,那么就是 "死循環(huán)" 3、表達(dá)式3 允許為空 死循環(huán) 4、三個(gè)表達(dá)式都可以省略,但;不能省 for(;;){ if(條件) break; i++; } 5、表達(dá)式1 和 表達(dá)式3 的多樣化 表達(dá)式1:允許聲明多個(gè)變量,用,隔開 表達(dá)式3:允許更新多個(gè)變量,用,隔開 4、循環(huán)嵌套 for,while,do...while都可以實(shí)現(xiàn)嵌套操作 ex: for(var i=1;i<=9;i++){ //外層循環(huán) for(var j=1;j<=9;j++){ //內(nèi)層循環(huán) } } 練習(xí): 1、在控制臺(tái)上打印輸出 "*" 2、在控制臺(tái)上打印輸出 "*****" 3、在控制臺(tái)上打印輸出 ***** ***** ***** ***** ***** 4、在控制臺(tái)上打印輸出 * ** *** **** ***** 5、在控制臺(tái)上打印輸出 * 4個(gè)空格1個(gè)* (5-行數(shù)) ** 3個(gè)空格2個(gè)* *** 2個(gè)空格3個(gè)* **** 1個(gè)空格4個(gè)* ***** 0個(gè)空格5個(gè)*<script> /*左對(duì)齊打印星星*/ function printStar(){ for(var j=1;j<=9;j++){//控制的是 行數(shù) for(var i=1,str="";i<=j;i++){ //星星數(shù)量(列數(shù) ) 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); } } /*右對(duì)齊打印星星*/ 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>新聞熱點(diǎn)
疑難解答
圖片精選