JS中for循環嵌套


for 循環

for語句也是一種前測試循環語句,但它具有在 執行循環之前初始化變量 和 定義循環后要執行的代碼的能力

for循環中專門提供了位置來放置循環的三個表達式

定義一個循環需要做實現這三步:

1、初始化表達式

2、條件表達式

3、更新表達式

語法:

 for(①初始化表達式;②條件表達式;③更新表達式){ 循環體語句; }

 

for循環執行過程:

1、執行初始化表達式,初始化變量;(初始化表達式只執行一次)

2、執行條件表達式(Boolean值),判斷是否執行循環

  • 如果表達式值為true則執行循環體,
  • 如果表達式值為false則退出循環;

 4、執行更新表達式,更新表達式執行完之后,則繼續執行第2步

如此循環往復,直到條件表達式的值為false。

 注意:

  1、for語句的三個表達式可以不寫,也可以寫在外面(兩個分號;是必不可少的,無論寫不寫表達式)

  2、在for循環的變量初始化表達式中,也可以不使用var 關鍵字。變量的初始化可以在外面定義;

  3、如果for循環中不寫任何表達式只寫兩個分號; 那么此時for循環就是一個死循環,會一直執行下去

實例:

1、要求用戶輸入班級人數,之后依次輸入每個學生的成績,最后打印出該班級的總成績和平均成績。

思路分析:

彈出輸入框輸入班級總人數 num

依次輸入學生成績(保存到變量 score),使用 for循環,彈出的次數和班級總人數有關。

加算成績,求總成績sum,再求平均成績avg

最后彈出結果

注意:prompt 輸出的是字符串類型的值,想參與數值運算需要

var num = prompt('請輸入班級總人數:');//請輸入班級總人數
var sum = 0;//求和變量
var avg = 0;//求平均值的變量
for(var i = 1;i<=num;i++) {
   var score = prompt('請輸入第' + i + '位學生成績');
   sum = sum + parseFloat(score);
}
avg = sum/num;
alert('總成績為:' + sum);
alert('平均成績為:' + avg);

 

for循環的嵌套

所謂for循環的嵌套就是一個大的for循環里面嵌套着一個或是多個小的for循環。

1、嵌套for 循環語法結構:

 

for(外層初始化變量 ; 外層的條件表達式 ; 外層的更新表達式) {
       for(里層的初始化變量 ; 里層的條件表達式 ; 里層的操作表達式) {
            // 執行語句
    }   
}

 

2、里層循環可看做是是外層循環的執行語句

3、外層循環執行一次,里面循環就會執行全部

 

通過for循環來判斷條件輸出內容。for循環嵌套的實質就是

外層for循環控制循環的高度(行數);

內層for循環控制循環的寬度(列數);

可以通過幾個例子來理解for循環嵌套

 

實例一:


 首先如果我們希望實現圖一這種效果,除了可以使用多次重復的相同代碼輸出,還可以使用更加簡便的for循環來實現結果。

實現代碼:

<script> document.write("★★★★★★<br />"); document.write("★★★★★★<br />"); document.write("★★★★★★<br />"); document.write("★★★★★★<br />"); document.write("★★★★★★<br />"); document.write("★★★★★★<br />"); </script>

等價於:

外層的for循環,定義一個變量 i(初始變量),在這里面 i 的初始值為0,0小於6為真(執行條件表達式並判斷)進入循環輸出一次★,然后再進行一次自增 i 的值變為1(更新表達式);

執行完畢變量 i ++自增(更新表達式)之后,再執行第二步比較 i 與 6 的大小。 當 i 自增到 6時,6 < 6結果為false,所以最后循環停止之后共在頁面輸出了5次,最終 i 的結果為 6。

這個for循環可以執行從0~5 共6次(for循環執行了幾次,圖形的高度就是多少,外層循環決定了圖形的高度)

for(var i = 0 ; i < 6 ; i++){ document.write("★★★★★★<br />"); }

使用for循環嵌套實現效果:

外層循環每執行一次,內部循環就執行從0~4,共 5 次。所以每一行的寬度是5。

外部循環共執行了6次,所以最后形成的是6*5的圖形。

 注意:內部for循環決定的是圖像的寬度

for(var i = 0 ; i < 6 ; i++){ document.write("<br />"); for(var aa = 0 ; aa < 5 ; aa++){ document.write("* "); } }

 

實例二:


 使用for循環嵌套實現三角形圖形效果。如下圖所示:

 分析如何實現這個圖形(aa與i的關系是 aa=i+1):

 實現代碼:

for(var i = 0 ; i < 6 ; i++){ document.write("<br />"); for(var aa = 0 ; aa < i + 1 ; aa++){ document.write("* "); } }

 

上面的例子是實現正着的三角形,那么又該如何實現下面這種倒着的三角圖形呢?

 實現原理(aa與i的關系是 aa=5-i):

 實現代碼:

for(var i = 0 ; i < 5 ; i++){ document.write("<br />"); for(var aa = 0 ; aa <5-i ; aa++){ document.write("* "); } }  

 或者

for(var i = 1;i<=6;i++){ document.write('<br />'); for(var aa=i;aa<=6;aa++) document.write('* '); }

 

實例三:


輸出九九乘法表

 根據外層循環控制高度,內層循環控制寬度這個規律來分析九九乘法表的結構:

乘法表共有9層,所以外部循環的變量 i的條件表達式是:i < 9;

創建內部循環來控制內部循環的寬度,第一行寬度是1,第二行寬度是2,第三行寬度是3……

之后內一行的列數(寬度)隨着行數的增加而增加一列,所以內部循環的變量aa的條件表達式是:aa <=1;(或是 aa < i+1;)

實現代碼:

     for(var i= 0 ; i <=9 ; i++){ for(var aa = 1 ; aa <i+1 ; aa++){ document.write(aa+"*"+i+"="+i*aa); } document.write("<br />"); }

做到這一步之后,來看一下效果(這個效果和我們預想中的好像還有些差距,它不夠美觀,每行的公式都擠在一起。):

 實現更加美觀的乘法表:

在循環代碼輸出中添加span元素,定義body主體部分的寬度,將span元素改為inline-block行內塊元素,設置其固定寬度,使乘法表的每個公式排列整齊。

<head>
<style> body{ width:2000px;
    } span{ display:inline-block; width:80px;
    }
</style>
</head>
<body> 
<script>
for(var i= 0 ; i <=9 ; i++){ for(var aa = 1 ; aa <i+1 ; aa++){ document.write("<span>"+aa+"*"+i+"="+i*aa+"</span>"); } document.write("<br />"); } </script>
</body>

 

實例四:


 打印一個1~100之間的質數

質數(prime number)又稱素數,有無限個。一個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數;否則稱為合數。

根據算術運算法據,每一個比1大的整數,要么本身是一個質數,要么可以寫成一系列質數的乘積;而且如果不考慮這些質數在乘積中的順序,那么寫出來的形式是唯一的。最小的質數是2。

創建外部循環,定義一個初始變量 i=2,查找2~100內的所有數,並創建一個布爾值,用以保存結果,默認 i 是質數。

創建內部循環,獲取2~i之間所有數,使用 if 分支判斷 i 是否是質數。

在這里判斷 i 是否是質數的方法。外部循環循環一次,返回一個i值。內部循環里面查找一遍所有小於i,又大於2,且又不是i本身的數,賦值給aa。

再用 i 模以 aa (質數除了1和它本身余數都不為0),如果進入判斷則證明 i 不是質數,修改 flag 值為 false。

for(var i = 2 ; i <= 100 ; i++){
    // 創建一個布爾值,用來保存結果,默認i是質數    
        var  flag  = true;
    // 判斷 i 是否是質數
    // 獲取2— i 之間的所有數
        for(var aa = 2; aa<i ; aa++){
        // 判斷 i 是否能被aa整除
            if(i % aa == 0){
            // 如果進入判斷則證明 i 不是質數,修改flag值為false;
            flag = false;
            }
        }
        if(flag){
        document.write(i);
        // 如果是質數,則打印 i 的值
    }}

輸出結果:

 

實例五:


 質數求和:

基本框架和例四是相同的,判斷並查找2~100之間的質數。

一個數從1開始除,一直除到它本身,如果是質數,就應該有兩個因數(1和自身)。通過bb是否為2來判斷 i 是否是質數。

如果是質數那么就執行 sum += i  求得1~100內所有質數的和。

    var sum = 0;
    for(var i = 2 ; i<=100 ; i++){
        var bb = 0;
        for(var aa=1 ; aa<= i ; aa++){
        if(i % aa == 0){
            bb += 1;
            }    
        }
        if(bb == 2){
            sum += i;
        }
    }document.write(sum);

最終結果是1060

 當然除了這種方法還有很多方法去判斷是否是質數求取質數之和,感興趣的話可以自己去研究搗鼓一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM