JS-----第三章 js循环

回顾

分支: if单分支,if else 双分支 if else if 多分支

​ if(范围条件){}

​ switch分支

​ switch(变量){

​ case 1:

​ break; // 可以省略

​ case 2:

​ break;

​ default: //可以省略

​ break;

​ }

本章内容

 循环的使用:

1.while(重点)

2.do..while(自己研究)

3.for (重点)

1.while循环

1.1.什么是循环

重复完成一项操作,重复做某一件事情

1.2.什么时候用循环

  1. 输出100次我能学会javascript
  2. 每天晚上给女朋友发短信
  3. 每个月收到通讯公司的缴费提醒

1.3.while循环语法:

语法:

// 固定次数的循环(输出100次我能学会javascript)
var 计数变量 = 0;
while(计数判断条件){
    //实现功能的代码块
    //计数变量的更新
}
固定次数循环四要素:
1. 计数变量 2.计数条件 3.功能代码块 4.计数变量更新
​
​
// 不定次数循环(吃包子),如果条件一直成立则代码块会被一直执行,如果条件不成立则循环结束
while(条件){
    //实现功能的代码块;
    //终止条件执行的代码块
}

执行流程:

当while后面的条件成立的时候,循环中的代码会被一直执行,直到条件不成立,循环终止。

1.3.1 固定次数循环

a. 输出10次我能学好javascript

// 输出10次我能学好js
	var i = 1;
	while(i<=10){
		document.write("第" +i+ "次:我能学好js<br/>");
		i++;
	}

	document.write("<hr/>");

	// 如何实现倒序输出
	var j = 10;
	while(j>=1){
		document.write("第" +j+ "次:我能学好js<br/>");
		j--;
	}

b.正序输出1-100个数:1,2,3,4...10

  // 输出1-100的数
            // 计算变量
            var i = 1;
            while(i<=100){
                document.write(i+"<br/>");
                i++;
            }
            document.write("循环结束");

c.倒序输出1-100个数: 100,99,98....1

 //100,99,98, : 只要计数变量大于等1,那就要一直循环输出
            //             如果计数变量小于1,则终止循环
            var i = 100;
            while(i>=1){
                document.write(i+"<br/>");
                // 更新计数变量
                i--;
            }

d.输出1-100的偶数

// 什么是偶数: 2,4,6,8,10... 偶数的特征:能被2整除 代码: num%2==0

// var i = 1;
            // while(i<=100){
            //  if(i%2==0){
            //      document.write(i+"<br/>");
            //  }
            //  i++;
            // }
            
            var i = 2;
            while(i<=100){
                document.write(i+"<br/>");
                i+=2;
            }

e.输出1-100的奇数: 1,3,5,7,9 奇数:i%2==1

// 输出1-100奇数
            var i = 1;
            while(i<=100){
                if(i%2==1){
                    document.write(i+"<br/>");
                }
                i++;
            }
            
            // 其它写法

f.求1-10的和

1+2+3+4+5+6+7+8+9+10 = 55

要素:1. 首先要有1-10个数 2.这些数依次累加存储起来

  //计数变量
            var i = 1;
            //累加和的变量
            var sum = 0;
            
            while(i<=10){
                document.write(i+"<br/>");
                // 将生成得数据累加到sum中
                sum = sum + i;
                // 计数更新
                i++;
            }
            
            document.write("1-10和:"+sum);

扩展: 输出1-100的和,输出1-100的奇数和,1-100的偶数和,1-100的3的倍数的和,100-200的和

  // 定义计数变量
            var i=1;
            // 定义累加和的变量
            var sum = 0;
            
            while(i<=10){
                if(i%2==0){
                    //document.write(i+"<br/>");
                    // 累加1-10中的偶数
                    sum =  sum+i;
                    
                    //alert(sum);
                }
                //变量更新
                i++;
            }
            // 循环结束,输出结果
            alert(sum);

1.3.2 不定次数循环

a. 吃包子,每次吃一个,直到吃饱为止

// 不定次数循环: 吃包子,每次吃一个,询问一下,是否吃饱。直到吃饱为止
            while(true){
                
                document.write("吃一个包子<br/>");
                
                var answer = prompt("请问吃饱没有","");
                
                // 结束条件:吃饱为止
                if(answer=="吃饱了"){
                    // 结束循环
                    break;
                }
                
            }

// 不定次数循环: 吃包子,每次吃一个,询问一下,是否吃饱。直到吃饱为止
            // 统计吃包子的次数
            var i = 0;
            
            while(true){
                
                document.write("吃一个包子<br/>");
                // 吃完一个累加一次
                i++;
                
                var answer = prompt("请问吃饱没有","");
                
                // 结束条件:吃饱为止
                if(answer=="吃饱了"){
                    // 结束循环
                    break;
                }
                
            }
            
            // 扩展: 统计吃了几个包子吃饱了
            document.write("一共吃了:"+i+"个包子");

2.do while 循环(自学)

语法格式

do{
    代码块;
}while(条件表达式);
​
​
先执行再判断。

区别:do while 跟while 的区别

while:先判断再执行,如果条件不满足,可以一次都不执行。

do while :先执行再判断,就算是条件不满足,也会至少执行一次。

        <script type="text/javascript">
            var i = 1;
            while(i<=10){
                document.write(i+"<br/>");
                i++;
            }
            
            document.write("<hr/>");
            // 计数变量
            var j = 1;
            do{
                document.write(j+"<br/>");
                //计数变量更新
                j++;
                
            }while(j<=10);
            
        </script>

 while和do..while的区别:

1.while先判断条件,再执行代码,do..while先执行一次,再判断条件

2.当条件不成立的时候,while的代码块一次都不执行,但是do..while至少执行一次

 var i = 11;
            // while: 先判断条件,再执行代码块
            while(i<=10){
                document.write(i+"<br/>");
                i++;
            }
            
            document.write("<hr/>");
            // 计数变量
            var j = 11;
            
            // 先执行一次代码块,再进行判断
            do{
                document.write(j+"<br/>");
                //计数变量更新
                j++;
                
            }while(j<=10);

3.for 循环 (重点)

for循环主要用于固定次数循环: 1.计数变量 2.计数条件 3.功能代码块 4.计数变量更新

语法格式:

for(变量定义1;条件2;变量更新4){
    //功能代码块3
}
​
// 变形写法
for( ; ; ){
    
}

循环四要素:

1.计数变量初始化 2.条件判断 3.功能代码块 4.计数变量更新

执行流程:

程序遇到for循环,开始进入循环模式,

第一次:

先执行"变量定义1",接着执行"条件2",条件成立,执行"功能代码块3",接着执行"变量更新4"

第二次:

在"计数变量更新4"执行之后,直接进行“条件2”的执行,注意"变量定义1"只在第一次执行,之后就不再执行。

如果"条件2"成立,则执行“功能代码块3”,如果"条件2"不成立,则for循环结束。后面的执行都按照这个次序进行。

第三次:...

第四次...

直到条件不成立,结束执行

3.1 for循环的使用

a. 输出100次我能学好javascript

 // 使用for循环输出100次我能学会js
            for(var i = 1  ; i<=100  ; i++ ){
                document.write("第"+i+"次我能学会js<br/>");
            }

b.正序输出1-100个数

c.倒序输出1-100个数

d.输出1-100的偶数

e.输出1-100的奇数

f.求1-10的和

g.求100-200的和

// 输出100-200之间的数据,求和
            var sum = 0;
            for(var i=100;i<=200;i++){
                document.write(i+"<br/>");
                sum+=i;
            }
            document.write(sum);

h.从1累加到10,求当累加的和大于20的时候,累加的那个数是几

            var sum = 0;
            for(var i=1;i<=10;i++){
                //document.write(i+"<br/>");
                sum+=i;
                if(sum>20){
                    alert(i);
                    // 结束循环
                    break;
                }
            }

i. 循环输入3个学生的成绩并求总分和平均分

分析: 1. 是一个有次数的循环,循环3次 2. 在循环过程中要进行分数的输入,prompt() 3.累加输入的分数

 //循环输入3个学生的成绩并求总分和平均分
            
            /*分析:  1. 是一个有次数的循环,循环3次 
                    2. 在循环过程中要进行分数的输入,prompt() 
                    3.累加输入的分数
            */
           // 定义累加变量
           var sum = 0;
           for (var i = 1; i <=3 ; i++) {
               // 输入分数,并转为整形
                var score = Number(prompt("请输入第"+i+"个学生的分数:",""));
                document.write("第"+i+"个同学的分数是:"+score+"<br/>");
                sum += score;
           }
           // 输出三个学生的成绩和,平均分
           document.write("总分:"+sum+" 平均分:"+(sum/3));
           
           // 扩展: 如果输入分数有误,则中断循环,并且提示错误。不输出总分平均分。

4.循环控制关键字

4.1. break: 直接结束循环

4.2. continue: 跳过当前循环后面的代码不执行,直接进行下一次循环

 //控制循环执行的关键字:break,continue
	//break:当在循环的过程中,满足了某个条件,执行了break
	//      会让循环直接终止
	//continue:当在循环的过程中,满足了某个条件,执行了continue
	//        那么本轮循环continue后面的代码不会被执行,直接进入下次循环
	
	/*
	for(var i=1;i<=10;i++){
		//document.write(i+"<br/>"); //12345
		if(i==5){
			//退出循环
			break;
		}
		document.write(i+"<br/>");  // 1234
	}*/

	for(var i=1;i<=10;i++){
		//document.write(i+"<br/>"); //123456789 10
		if(i==5){
			//执行了continue,则本轮循环continue后面的代码会被跳过,
			//直接进入下次循环
			continue;
		}
		document.write(i+"<br/>"); //1234 678910
	}
//题目:循环输入3个学生的分数求总分平均分
	//要求:1.如果所有的分数都是正常的(0-100),则计算总分和平均分并输出
	//     2.如果有任何一个分数输入错误,则终止循环,提示错误,并且不能输出总分和平均分
	var sum = 0;
	// 定义变量,来记录输入的过程中是否有误
	var error = false;
	for(var i=1;i<=3;i++){
		// 输入分数
		var score= Number(prompt("请输入第"+i+"个学生的分数:",""));
		// 判断分数是否合法
		if(score<0 || score>100){
			error = true;
			// 中断循环
			break;
		}
		// 分数合法则累加分数
		sum+=score;
	}

	//判断错误变量的状态
	if(error==true){
		document.write("分数输入有误,无法计算")
	}else{
		document.write("总分:"+sum+" 平均分:"+sum/3);
	}

 

//统计80分以上的学生比例,用continue实现
	//5个学生:90,76,89,23,45  2/5 = 40%

	// 记录80分以上的人数
	var count = 0;
	for(var i=1;i<=5;i++){
		var score = Number(prompt("请输入第"+i+"个学生的分数:",""));

		//正向思维:大于80累加人数
		/*if(score>=80){
			//计数累加
			count++;
		}*/

		//逆向思维:小于80不加人数
		if(score<80){
			continue;
		}

		count++;
	}

	document.write("80分以上的人数:"+count+" 所占比例:"+(count/5)*100+"%");

5.循环嵌套

a. 输出2010-2020年的每一年的十二个月份

2010年 1月 2月 3月 4月...

2011年 1月 2月 3月 4月...

...

2020年 1月 2月 3月 4月...

  // 外层输出年份
            for (var i = 2010; i <=2020; i++) {
                document.write(i+"年:");
                
                /*document.write("1月 ");
                document.write("2月 ");
                document.write("3月 ");
                document.write("4月 ");
                document.write("5月 ");
                document.write("6月 ");
                document.write("7月 ");
                document.write("8月 ");
                document.write("9月 ");
                document.write("10月 ");
                document.write("11月 ");
                document.write("12月 ");*/
                // 内层循环输出12个月份
                for(var j = 1;j<=12;j++ ){
                    document.write(j+"月 ");
                }
                
                document.write("<br/>");
            }

b. 输出5行5列的星星

 

// 外层循环控制行数
            for(var i=1;i<=5;i++){
                // 内层循环控制输出的内容
                for(var j=1;j<=5;j++){
                    document.write("*");
                }
                document.write("<br/>");
            }

c. 输出三角形的星星

 // 外层循环控制行数
            for(var i=1;i<=5;i++){
                // 内层循环控制输出的内容
                // j跟随i进行变化
                for(var j=1;j<=i;j++){
                    document.write("*");
                }
                document.write("<br/>");
            }

d.输出九九乘法表

 

  // 外层循环控制行数
             for(var i=1;i<=5;i++){
                // 内层循环控制输出的内容
                for(var j=1;j<=i;j++){
                    document.write(i+"*"+j+" ");
                }
                document.write("<br/>");
             }

总结

3种循环结构

while do while for

可以通过循环解决一些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值