JavaScript--第3章 JavaScript 基础之循环2

1. 面试题

1.1 for循环执行的顺序
1.2 break和continue的作用
1.3 分别说明每种循环的特点

2. 上次内容回顾

上一章学习了js中的分支结构:while和do-while循环

3.本章内容

本章主要讲解js中的for循环

4. 具体内容

4.1 for 循环

循环可以将代码块执行指定的次数
for循环的语法: for (语句 1; 语句 2; 语句 3)
{
被执行的代码块
}
执行顺序解析:

  • 语句 1:初值表达式 定义一个变量并赋初始值 let i=0,在循环(代码块)开始前执
  • 语句 2: 条件表达式 对初值进行条件判断i<10,定义运行循环(代码块)的条件
  • 语句 3 步长表达式 每次循环执行完 初值的自增或自减 i–在循环(代码块)已被执行之后执行
    即:for(<初始化循环变量> ; <循环条件> ; <修改循环变量的值>) { <循环体语句>; } 表达式1省略,循环变量的初始值在for语句之前由赋值语句取得也可以,但是两个“;”不能省略
    for循环的执行流程:
    在这里插入图片描述
    案例 3.1.1:
<script>            
			for (let i=0; i<5; i++){                 
						document.write("你好 哈哈哈"+i+"<br>");               
		    }               
</script> 

与以下效果相同

<script>            
		let i=0;            
		for (; i<5; ){                 
				document.write("你好 哈哈哈"+i+"<br>");                 
				i++;            
		}           
		 //注意for后面小括号中的两个“;”不允许省略        
</script>

如果将上述代码修改成i=5,观察结果执行几次,

<script>            
		for (let i=5; i<5; i++){
		                 document.write("你好 哈哈哈"+i+"<br>");               
		}               
</script>

我们可以观察到一次都没执行,因为for循环是先判断,再执行 如果再修改:将i++i或者i<5去掉,发现浏览器崩溃了,因为i的值始终不变,造成死循环了

<script>            
			for (let i=5; i<5; ){
			                 document.write("你好 哈哈哈"+i+"<br>")               
			}                                       
			/*for (let i=5; ; i++){
			                 document.write("你好 哈哈哈"+i+"<br>");               
			  }*/               
</script>

案例:实现如图所示效果
在这里插入图片描述
分析: 按照上述语法结构
1、表达式1:循环初始化:i = 0;j = 6 2、表达式2:循环条件:i<=6 3、循环操作:计算i+j 4、表达式3:循环变 量的改变:i++,j-
代码:

 <script>            
 				for(let i = 0,j = 6;i<=6;i++,j-- ){
 				                   document.write(i+"+"+j+"="+(i+j)+"<br>");             
 				}
</script>

案例3.1.2:请输出100次 我愿意

<script>            
		for (let i=0; i<100; i++){
		                 document.write("我愿意"+i+"<br>");               
		} 
</script>

案例3.1.3:请输出0-99之间的偶数

<script>            
		for (let i=0; i<100; i++){
		                //对2求余数为0就是偶数
		                if(i%2==0){
		                                    document.write(i+"<br>");                
						}
		} 
</script>

案例3.1.4:请帮助高斯解决一个问题 0-100之间所有数的和为多少
分析:实现1-100的累加,根本原理就是0+1的结果加2,所得结果加3,依次加到99.

<script>            
		let sum=0;            
		sum+=1;            
		sum+=2;            
		sum+=3;            
			...            
		sum+=100;            
		/*我们不难发现之间存在着某种规律,可以加sum+=i通过for循环             
		* 执行100次             */
</script>

通过for循环实现:

<script>    
		let sum=0;    
		for(let i=0;i<=100;i++){     
				sum+=i;    
		}    
		document.write(sum); 
</script>

结果:5050
温馨提示:我们可能在解决问题的时候 一开始不知道如何使用for循环处理,此时,可以先将功能实现,再去观察是 否可以有优化的地方 ,此时容易完成。
案例3.1.5:输入五次学生成绩 求平均值

<script>     
		let sum=0;     
		sum+= Number(prompt("请输入 第 1 次 成绩"));        
		sum+= Number(prompt("请输入 第 2 次 成绩"));        
		sum+= Number(prompt("请输入 第 3 次 成绩"));        
		sum+= Number(prompt("请输入 第 4 次 成绩"));        
		sum+= Number(prompt("请输入 第 5次 成绩"));                 
		document.write(""+sum/5);   
</script>

我们不难发现 获取成绩并累加的操作 出现了 重复代码。
重复代码可以通过for 循环执行

<script>     
		let sum=0;     
		let score=0;       
		for (let i=1;i<6;i++) {
		           score=prompt("请输入 第"+i+"次 成绩");
		           //将输入的字符串转为数字再累加
		           sum+=Number(score);
         }
          document.write(""+sum/5); 
</script> 

思考:在上面案例基础上求最大值,最小值

<script>     
		let sum=0;//总和     
		let score=0;     
		let max;//最大值
		let min;//最小值       
		for (let i=1;i<6;i++) {
		           score=prompt("请输入 第"+i+"次 成绩");
		            //将输入的字符串转为数字再累加           
		            sum+=Number(score);           
		            if(i==1){//将第一次的分数作为最大值,最小值的初始值            
		            			min=max=score;           
		            }           
		            //每次都让最小值赋值给min           
		            if(min>score){   
		                     min=score;   
		            }
		             //每次都让最大值赋值给min
		             if(max<score){
		                         max=score;
		             }       
		}           
		document.write("平均值:"+sum/5+"最小值:"+min+"最大值:"+max);   
</script> 
  

for循环嵌套

//打印三行五列     
for(let i=0;i<3;i++){
      for(let j=0;j<5;j++){ 
            document.write(i+"--"+j+"&nbsp;&nbsp;&nbsp;&nbsp;");
      }
      document.write("<br />");
} 

案例3.1.6:打印九九乘法表

<script>    
	//控制行数    
	for(let i=1;i<=9;i++){
	   //控制列数
	   for(let j=1;j<=i;j++){
	         document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;");
	   }
	   document.write("<br>");
	   }
</script> 

在这里插入图片描述
案例3.1.7:羽毛球拍15元,球3元,水2元。200元每种至少一个,有多少可能。羽毛球拍最多买13个 球最多买66个 水最多买100个

<script type="text/javascript">
     //可能结果数量        
     let n = 0;        
     //羽毛球拍最多买13个        
     for(i=1;i<=13;i++){         
     //球最多买66个
                  for(x=1;x<=66;x++){             
                  //水最多买100个 
                                 for(y=1;y<=100;y++){                
                                  //总钱数                    
                                  let money=i*15+x*3+y*2;                   
                                  if(money==200){
                                                         document.write("球拍"+i+"球"+x+"水"+y+"<br>");                        
                                                         n++;                   
                                   }               
                                  }           
                  }        
}        
	document.write("总共有"+n+"中结果");;
</script>

结果:
在这里插入图片描述
案例3.1.8:括号里面只能放加或减,如果要使等式成立,括号里面应该放什么运算符 12()34()56()78()9 = 59;
分析:括号里面只能放加减,此时如果括号里面放+看成乘以1,如果放-看成乘以-1,以此让1到-1两个数字循环

<script>
	//第1个符号      
	for (a=-1;a<2;a=a+2) { 
			//第2个符号
			 for (b=-1;b<2;b=b+2) { 
			 		//第3个符号
			 		 for (c=-1;c<2;c=c+2) {
			 		                   //第4个符号                     
			 		                   for (d=-1;d<2;d=d+2) { 
					 		                   //判断结果等于59满足条件                            
					 		                    if (12+a*34+b*56+c*78+d*9==59) {
					 		                                                     alert(a+","+b+","+c+","+d);                            
					 		                     }                                             
			 		                 }                
			        }            
			 }        
	}
</script>

在这里插入图片描述
所以结果是+,-,+,

4.2 for in循环

案例 4.2.1 :对象属性的遍历

 <script type="text/javascript">
       var obj = { 
                    w: "wen",              
                    j: "jian",              
                    b: "bao"         
         }         
        for(var v in obj){
                    document.write("property:"+v+":"+obj[v]+"<br>");         
       }    
 </script> 

结果分析:v取对象的属性名,通过属性名可以取属性值
在这里插入图片描述

4.2.2 程序调试

设置断点-----单步调试-----观察变量
在这里插入图片描述

4.3 break 关键字

break 语句用于跳出循环。
案例4.3.1:

<script type="text/javascript">
     for (i=0;i<10;i++){ 
             if (i==3){            
              	break;         
              }         
     		document.write(i+"<br />");    
       } 
</script>

在这里插入图片描述
案例4.3.2:循环录入五次学生成绩并求平均值 如果成绩为负 则停止录入并提示 录入错误

<script>
     let sum=0;//总和     
     let score=0;       
     for (let i=1;i<6;i++) {
                score=prompt("请输入 第"+i+"次 成绩");
                if(score<0){
                             document.write("成绩不能为负");
                             break;//分数小于0结束循环
                 }           
                 //将输入的字符串转为数字再累加
                 sum+=Number(score);
                 if(i==5){            
                 			document.write("平均值:"+sum/5);
                 }
   } 
</script>

案例4.3.3:折纸:折多少次和珠穆朗玛峰一样高,一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰 高度8848米

<script type="text/javascript">     
			//纸的厚度    
			let depth = 0.0001;     
			//无循环条件          
			for(i=1;;i++){            
					//折一次厚度是原来2倍               
					depth=depth*2;               
					//循环到珠峰的高度结束循环               
					if(depth>8848){                   
							alert(i);                  
						   break;               
					}           
			} 
</script>

在这里插入图片描述
for循环标签的用法,请看案例
案例4.3.4:要求打印九九乘法表时只打印到第四行。

<script>    
		//控制行数    
		for(let i=1;i<=9;i++){ 
		    //控制列数     
		    for(let j=1;j<=i;j++){
		          //遇到i=5第五行时中断循环     
		           if(i==5){ 
		                 break ;      
		           }      
		    	   document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;");
			}         
		 	document.write("<br>");    
		}   
</script>

在这里插入图片描述
从结果可以看出,break只能中端内层循环,不能终止外层循环,所以我们有两种解决方案,第一种:
将中断操作放在外层,中断外层循环:

<script>
    //控制行数    
    for(let i=1;i<=9;i++){
         if(i==5){ 
               break ;      
        }     
        //控制列数     
        for(let j=1;j<=i;j++){ 
     			//遇到i=5第五行时中断循环            
     			document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;");     
     	}         
     	 document.write("<br>");         
 	}  
</script> 

第二种方案使用标签:

<script>
    //控制行数,设置外层循环标签名,标签名称随意    
    waiceng:for(let i=1;i<=9;i++){
              //控制列数     
              for(let j=1;j<=i;j++){
                    if(i==5){ 
                          //按照标签名中断循环
                     		 break waiceng;      
                      }      
               		document.write(j+"*"+i+"="+i*j+"&nbsp;&nbsp;");     
               }          
               document.write("<br>");    
     } 
 </script>

4.4、 continue

continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
案例4.4.1:

猜你喜欢

转载自blog.csdn.net/woshishq1210/article/details/95353081
今日推荐