五、多重循環
在二重循環中,外層循環變量變化一次,內層循環變量變化整個
代碼:
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環</title>
</head>
<body>
? ? <script>
? ? ? ? // 什么是二重循環?循環里面嵌套循環
? ? ? ? // 在二重循環中,外層循環變量變化一次,內層循環變量變化整個
? ? ? ? for(let i=1;i<=3;i++){
? ? ? ? ? ? console.log('i='+i);
? ? ? ? ? ? //i為1時,j從1變化到3
? ? ? ? ? ? //i為2時,j從1變化到3
? ? ? ? ? ? //i為3時,j從1變化到3
? ? ? ? ? ? for(let j=1;j<=3;j++){
? ? ? ? ? ? ? ? console.log('j='+j);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? console.log('------------------------------------------');
? ? ? ? // 有三個班級,每個班級有3名學員,輸入每個班級每個學員的考試成績,并計算出每個班級的平均分
? ? ? ? //第一層循環,循環所有的班級
? ? ? ? for(let i=1;i<=3;i++){
? ? ? ? ? ? let sum = 0? //定義每個班級的總分
? ? ? ? ? ? alert(`請輸入第${i}個班級的學生成績`)
? ? ? ? ? ? //第二層循環,循環每個班級的所有學生
? ? ? ? ? ? for(let j=1;j<=3;j++){
? ? ? ? ? ? ? ? //將每一名學員的成績,累加給班級總分
? ? ? ? ? ? ? ? sum += parseInt(prompt(`請輸入第${i}個班級的第${j}名學員成績:`))
? ? ? ? ? ? }
? ? ? ? ? ? //計算每個班級的平均分
? ? ? ? ? ? let avg = sum / 3
? ? ? ? ? ? alert(`第${i}個班級的平均分是${avg}`)
? ? ? ? }
? ? </script>
</body>
</html>
彈窗顯示為(僅顯示第一個班級):
練習題
1.有三個班級,每個班級有四名學生,輸入所有學生的成績,并計算出每個班級的平均分
代碼:
<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習1</title>
</head>
<body>
? ? <script>
? ? ? ? // 有三個班級,每個班級有四名學生,輸入所有學生的成績,并計算出每個班級的平均分
? ? ? ? // 并統計出每個班級里面的最高分和最低分
? ? ? ? //第一層循環,循環所有的班級
? ? ? ? for (let i = 1; i <= 3; i++) {
? ? ? ? ? ? let sum = 0? //定義每個班級的總分
? ? ? ? ? ? let max = 0? //定義每個班級的最高分
? ? ? ? ? ? let min = 100? //定義每個班級的最低分
? ? ? ? ? ? alert(`請輸入第${i}個班級的學生成績`)
? ? ? ? ? ? //第二層循環,循環每個班級的所有學生
? ? ? ? ? ? for (let j = 1; j <= 4; j++) {
? ? ? ? ? ? ? ? //將每一名學員的成績,累加給班級總分
? ? ? ? ? ? ? ? let score = parseInt(prompt(`請輸入第${i}個班級的第${j}名學員成績:`))
? ? ? ? ? ? ? ? // 判斷該學員的成績是否是最高分
? ? ? ? ? ? ? ? if(max<score){
? ? ? ? ? ? ? ? ? ? max = score? //重新獲取最高分
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? // 判斷該學員的成績是否是最低分
? ? ? ? ? ? ? ? if(min>score){
? ? ? ? ? ? ? ? ? ? min = score? //重新獲取最低分
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? sum += score
? ? ? ? ? ? }
? ? ? ? ? ? // //計算每個班級的平均分
? ? ? ? ? ? let avg = sum / 4
? ? ? ? ? ? alert(`第${i}個班級的平均分是${avg},班級最高分是${max},最低分是${min}`)
? ? ? ? }
? ? </script>
</body>
</html>
彈窗顯示為(僅顯示第一個班級):
2.(1)打印直角三角形
? (2)打印倒直角三角形
? (3)打印等腰三角形
? (4)打印倒等腰三角形
代碼:
<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習2</title>
</head>
<body>
? ? <script>
? ? ? ? // 打印直角三角形
? ? ? ? /*
? ? ? ? ? ? #
? ? ? ? ? ? ##
? ? ? ? ? ? ###
? ? ? ? ? ? ####
? ? ? ? ? ? #####
? ? ? ? */
? ? ? ? console.log('----------------直角(1 2 3 4 5)------------------');
? ? ? ? // 外層循環控制行數? ?
? ? ? ? for (let i = 1; i <= 5; i++) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 內層循環控制每行的列數(每行的列數===行號)
? ? ? ? ? ? for (let j = 1; j <=i; j++) {
? ? ? ? ? ? ? ? str += '#'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? ? ? console.log('----------------直角(1 3 5 7 9)------------------');
? ? ? ? /*
? ? ? ? ? ? #
? ? ? ? ? ? ###
? ? ? ? ? ? #####
? ? ? ? ? ? #######
? ? ? ? ? ? #########
? ? ? ? */
? ? ? ? // 外層循環控制行數? ?
? ? ? ? for (let i = 1; i <= 5; i++) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 內層循環控制每行的列數(每行的列數===行號*2-1)
? ? ? ? ? ? for (let j = 1; j <=i*2-1; j++) {
? ? ? ? ? ? ? ? str += '#'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? ? ? console.log('----------------倒直角(5 4 3 2 1)------------------');
? ? ? ? /*
? ? ? ? ? ? #####
? ? ? ? ? ? ####
? ? ? ? ? ? ###
? ? ? ? ? ? ##
? ? ? ? ? ? #
? ? ? ? */
? ? ? ? // 外層循環控制行數? ?
? ? ? ? for (i=1;i<=5;i++) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 內層循環控制每行的列數
? ? ? ? ? ? for (let j = 6-i; j > 0; j--) {
? ? ? ? ? ? ? ? str += '#'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? ? ? console.log('-----------------等腰-----------------');
? ? ? ? /*
? ? ? ? ? ? @@@@
? ? ? ? ? ? @@@
? ? ? ? ? ? @@
? ? ? ? ? ? @
? ? ? ? ? ? #
? ? ? ? ? ? ###
? ? ? ? ? ? #####
? ? ? ? ? ? #######
? ? ? ? ? ? #########
? ? ? ? ? ? @@@@#
? ? ? ? ? ? @@@###
? ? ? ? ? ? @@#####
? ? ? ? ? ? @#######
? ? ? ? ? ? #########
? ? ? ? */
? ? ? ? // 外層循環控制行數? ?
? ? ? ? for (let i = 1; i <= 5; i++) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 內層第一個for,用于補充空格
? ? ? ? ? ? for (let j = 5-i; j > 0; j--) {
? ? ? ? ? ? ? ? str += ' '
? ? ? ? ? ? }
? ? ? ? ? ? // 內層第二個for,用于打印字符
? ? ? ? ? ? for (let j = 1; j <=i*2-1; j++) {
? ? ? ? ? ? ? ? str += '#'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? ? ? console.log('-----------------倒等腰-----------------');
? ? ? ? /*
? ? ? ? ? ? #########
? ? ? ? ? ? @#######
? ? ? ? ? ? @@#####
? ? ? ? ? ? @@@###
? ? ? ? ? ? @@@@#
? ? ? ? */
? ? ? ? // 外層循環控制行數? ?
? ? ? ? for (let i = 5; i >=1; i--) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 內層第一個for,用于補充空格
? ? ? ? ? ? for (let j = 5-i; j > 0; j--) {
? ? ? ? ? ? ? ? str += ' '
? ? ? ? ? ? }
? ? ? ? ? ? // 內層第二個for,用于打印字符
? ? ? ? ? ? for (let j = 1; j <=i*2-1; j++) {
? ? ? ? ? ? ? ? str += '#'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? </script>
</body>
</html>
控制臺顯示:
3.打印空心的等腰三角形
代碼:
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習3</title>
</head>
<body>
? ? <script>
? ? ? ? // 打印空心的等腰三角形
? ? ? ? /*
? ? ? ? ? ? @@@@#
? ? ? ? ? ? @@@# #
? ? ? ? ? ? @@#? #
? ? ? ? ? ? @#? ? #
? ? ? ? ? ? #########
? ? ? ? */
? ? ? ? // 外層循環,用于循環行數? ?
? ? ? ? for (let i = 1; i <= 5; i++) {
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 該循環,用于控制每行前面的空格
? ? ? ? ? ? for (let j = 5 - i; j >= 1; j--) {
? ? ? ? ? ? ? ? str += " "
? ? ? ? ? ? }
? ? ? ? ? ? // 內層循環,控制每行的列數
? ? ? ? ? ? for (let j = 1; j <= i * 2 - 1; j++) {
? ? ? ? ? ? ? ? //每行第一列和最后一列打印#號,其他地方打印空格
? ? ? ? ? ? ? ? //或是第五行,打印全部#號
? ? ? ? ? ? ? ? if (j === 1 || j === i * 2 - 1 || i === 5) {
? ? ? ? ? ? ? ? ? ? str += "#"
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? str += " "
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? </script>
</body>
</html>
控制臺顯示:
4.打印99乘法表
代碼:
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習4</title>
</head>
<body>
? ? <script>
? ? ? ? // 打印99乘法表
? ? ? ? /*
? ? ? ? ? ? 1*1=1
? ? ? ? ? ? 1*2=2 2*2=4
? ? ? ? ? ? 1*3=3 2*3=6 3*3=9
? ? ? ? ? ? ......
? ? ? ? */
? ? ? ? // 整體的形狀是:直角三角形? ?
? ? ? ? for(let i=1;i<=9;i++){
? ? ? ? ? ? let str = ""
? ? ? ? ? ? for(let j=1;j<=i;j++){
? ? ? ? ? ? ? ? str+=j+"X"+i+'='+(j*i)+'\t'
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? </script>
</body>
</html>
控制臺顯示:
5.數字等腰三角形
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習5</title>
</head>
<body>
? ? <script>
? ? ? ? // 數字等腰三角形
? ? ? ? /*
? ? ? ? ? ? ? ? 1
? ? ? ? ? ? ? 121
? ? ? ? ? ? ? 12321
? ? ? ? ? ? 1234321
? ? ? ? ? ? 123454321
? ? ? ? ? ? 第一部分:
? ? ? ? ? ? @@@@
? ? ? ? ? ? @@@
? ? ? ? ? ? @@
? ? ? ? ? ? @
? ? ? ? ? ? 第二部分:
? ? ? ? ? ? 1
? ? ? ? ? ? 12
? ? ? ? ? ? 123
? ? ? ? ? ? 1234
? ? ? ? ? ? 12345
? ? ? ? ? ? 第三部分
? ? ? ? ? ? 1
? ? ? ? ? ? 21
? ? ? ? ? ? 321
? ? ? ? ? ? 4321
? ? ? ? */
? ? ? ? //外層循環,控制行數
? ? ? ? for (let i = 1; i <= 5; i++) {
? ? ? ? ? ? // 內層循環控制每行打印內容
? ? ? ? ? ? let str = ""
? ? ? ? ? ? // 1.打印左邊的空格
? ? ? ? ? ? for(let j=1;j<=5-i;j++){
? ? ? ? ? ? ? ? str += "@"? ? ? ? ? ? ? ?
? ? ? ? ? ? }
? ? ? ? ? ? // 2.打印三角形的左側
? ? ? ? ? ? for(let j=1;j<=i;j++){
? ? ? ? ? ? ? ? str+=j
? ? ? ? ? ? }
? ? ? ? ? ? // 3.打印三角形的右側
? ? ? ? ? ? for(let j=i-1;j>=1;j--){
? ? ? ? ? ? ? ? str+=j
? ? ? ? ? ? }
? ? ? ? ? ? console.log(str);
? ? ? ? }
? ? </script>
</body>
</html>
控制臺顯示:
6.找出100以內所有的質數
代碼:
<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>二重循環練習6</title>
</head>
<body>
? ? <script>
? ? ? ? // 找出100以內所有的質數
? ? ? ? // 什么是質數?只能被1 和 自身整除的數 是質數
? ? ? ? // 第一層循環確定查找的范圍
? ? ? ? for(let i=2;i<=100;i++){
? ? ? ? ? // 定義一個count,用于記錄被整除的次數
? ? ? ? ? let count = 0
? ? ? ? ? ? // 第二層循環,確定每次比較的范圍
? ? ? ? ? ? for(let j=1;j<=i;j++){
? ? ? ? ? ? ? ? // 假設i是25,j從1到25
? ? ? ? ? ? ? ? if(i%j===0){
? ? ? ? ? ? ? ? ? ? count++
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //如果,只有兩個數能被i整除,那么i就是質數
? ? ? ? ? ? if(count===2){
? ? ? ? ? ? ? ? console.log(i);
? ? ? ? ? ? }
? ? ? ? }
? ? </script>
</body>
</html>
控制臺顯示:
在內層循環中,使用continue,break,只是作用于內層循環
代碼:
<!DOCTYPE html>
<html>
<head>
? ? <meta charset="UTF-8">
? ? <meta http-equiv="X-UA-Compatible" content="IE=edge">
? ? <meta name="viewport" content="width=device-width, initial-scale=1.0">
? ? <title>在內層循環中,使用continue,break</title>
</head>
<body>
? ? <script>
? ? ? ? /*
? ? ? ? ? ? 有5家店,每家店最多可以買3件衣服,進入一家店后,提示是否離開本店,
? ? ? ? ? ? 輸入y表示離開(會進入下一家店),輸入n表示買一件衣服,最后輸出用戶一共買了多少件衣服。
? ? ? ? */
? ? ? ? let count = 0? //定義count,保存購買衣服的總數量
? ? ? ? //外層循環,控制有多少家店
? ? ? ? for(let i=1;i<=5;i++){
? ? ? ? ? ? alert('歡迎光臨第'+i+'家店')
? ? ? ? ? ? //內層循環,控制每家店,可以買多少件衣服
? ? ? ? ? ? for(let j=1;j<=3;j++){
? ? ? ? ? ? ? ? let isLeave = prompt('是否離開(y/n):')
? ? ? ? ? ? ? ? if(isLeave==='n'){
? ? ? ? ? ? ? ? ? ? alert('成功購買了一件衣服')
? ? ? ? ? ? ? ? ? ? count++
? ? ? ? ? ? ? ? ? ? // 內層循環里面的continue,只是對內層循環起作用
? ? ? ? ? ? ? ? ? ? continue
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //內層循環里面的break,只是對內層循環起作用
? ? ? ? ? ? ? ? break;?
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? alert('您一共購買了'+count+'件衣服')
? ? </script>
</body>
</html>