03-循环结构

switch选择结构(重点)

语法:

switch( 判断条件 ){
		   case expr1: 
		         // 处理代码块
		         break;
		   case expr2: 
		         // 处理代码块
		         break;
		   default: 
		         // 处理代码块
		} 

1、switch、case、default、break都是系统关键字
2、switch中没加break会把所有的case判断一遍
3、switc是不可以写判断一定范围内的数据(前提:当exp不为true)

根据输入的成绩,判断出属于A,B,C,D那个级别

var sum=parseInt(prompt("请输入成绩"));
        var str="";
        if(isNaN(sum) || sum>100 || sum<0){
            str="输入错误";
        }else{
            switch (parseInt(sum/10)){
                case 10:
                    str="S";
                    break;
                case 9:
                    str="A";
                    break;
                case 8:
                    str="B";
                    break;
                case 7:
                    str="C";
                    break;
                case 6:
                    str="D";
                    break;
                default:
                    str="E";
            }
        }

        console.log(str);
break的使用

如果:case后面不使用break终止代码,他就会继续往下走.最终输出错误的结果

 <script>
     var str = prompt('请输入ABCD中的任意一个');
  
      switch(str){
          case 'A':
          console.log('你输入的是A');
          break;
          
         case 'B':
         console.log('你输入的是B');
          break;

          case 'C':
          console.log('你输入的是C');
          break;

          case 'D':
          console.log('你输入的是A');
          break;
      }
    // 总结:break是防止穿越的,匹配到一个case则,停止向下执行
    
    </script>

脚下留心

使用switch就一定要用break
switch和if判断的区别
判断的用途
if常用语判断一定范围内的数据 a>10 b<5
switch常用语判断固定的数据

 案例:判断星期几;判断成绩;
 80-90   70-80

例:比如判断输入的是男是女var sex = ‘男’;(switch)

 switch(sex){
  case ‘男’:
     document.write(‘性别男’);
      break;
   case ‘女’:
     document.write(‘性别女’);
      break;
    default:
    document.write(‘人妖’);
}

脚下留心:如果数据是一个固定的值,用switch效率会比if判断更高

判断类型区别

if 判断是看运算符号,两个等于则判断值是否相等,三个等于则判断是否全等

switch 默认判断全等

例1: var str=1;使用if和switch的判断区别

// 判断类型的比较
  var num = '2';
//   if(num==2){
//       alert('男儿何不带吴钩');
//   }
//   // 值和类型都要相等
//   if(num===2){
//       alert('收取关山五十州');
//   }

    // switch进行匹配的时候,是完全匹配,相当于 '==='
  switch(num){
      case 2:
      alert('有意栽花花不发');
      break;

      case '2':
      alert('无心插柳柳成荫');
      break;

      default:
        alert('自古多情空余恨,此恨绵绵无绝期');
  }

练习1:用switch另一种方法书写成绩判断:

​ 100 s、90-99 a、80-89 b、70-79 c、60-69 d、0-59 回家挨揍

练习2:课堂练习写完(一个月多少天)

练习3:尝试输出1-100之间的所有整数;(进阶:偶数)

循环结构

问题

如果输出一句hello world,可以document.write(“hello world”);.

思考:现在要输出10次,应该怎么办?

写10次,…

分析:
对于我们来说这样费时费力,同时也会有很多的代码冗余,那么这个时候我们应该使用的就是js中的循环。
        如果不用循环,但是我们要是打印100次hello world呢?
while循环语句(掌握)
示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MpklHg64-1662124662720)(/1563872056403.png)]

while循环只要条件为真,就会一直不断重复执行循环体内的代码

语法:

语法
//当循环条件为true时,执行循环体,
//当循环条件为false时,结束循环。
while(循环条件){
  //循环体:需要循环执行的语句
}


注意: while循环只要条件为真,就会一直不断重复执行循环体内的代

例题

例1:输出十个hello

     // 输出十个Hello
    // 1 声明变量
    var i = 0;
    // 2条件为真,则向下执行
    while(i<10){
       console.log(i);
       document.write('Hello world'+'<br />');
       // 3 每循环一次i自加1
        i++;
    }

例2:输出1-10之间所有的数

/ 循环变量初始化
var num = 1;
// while循环
while(num <= 10){
document.write(num);
num++;
}

例3:循环表白,你爱我吗?

     //1. 输入你爱我吗? y/n 
     var res = prompt('爱我吗? y/n');

    //2. n   y
    // 条件的角度 
    while (res != 'y') {
        res =  prompt('再说一遍,你爱我吗? y/n')
    } 

例4:使用while输出1-100

   var num = 0;
    while (++num <= 100) {
      console.log(num);

    }
do…while循环(掌握)
示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8gfBngD-1662124662721)(/1563872011430.png)]

do…while和while循环差不多,只是do…while会先无条件执行一次再判断

语法
【①循环变量初始化】
do{
// 循环体内执行的代码
【③循环变量更新】 
}while(【②循环变量判断条件】);
例题

验证: do…while会先无条件执行一次,然后再判断

<script>
    
	var num = 1;
	
	while(num > 1)
	{
		document.write("while 哈哈,妹妹进来了!");
	}
	
	
	do{
		document.write("do.while 哈哈,妹妹进来了!");
	}while(num > 1);
    
</script>

循环表白你爱我吗?

      // 循环表白的案例  do...while()
      do {

        var res = prompt('爱我吗');

      } while(res != 'y')

for循环语句(重点)
示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEcUOTVI-1662124662723)(/1563871982897.png)]

for循环语法:
//1. for循环使用分号分隔
//2. for循环有2个分号,两个分号不能少
for(初始化变量1;判断语句2;变量更新3){
  //4循环体
}

执行顺序:1243 ---- 243 -----243(直到循环条件变成false)

  1. 初始化语句
  2. 判断语句
  3. 自增或者自减
  4. 循环体
详细思路分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZ3d2qmn-1662124662723)(/1567566226027.png)]

使用案例

例1: 输出1-10之间的所有数

<script>
/*
	for(变量初始化; 判断条件; 变量更新)
	{
		// 循环体内执行的代码
	}
*/

for(var num = 1; num <=10; num++)
{
	document.write(num + "<br />");
}
</script>

例2 入职薪水10K,每年涨幅5%,50年后工资多少?

		var a = 10;
    	var i=0;
		while(i<50){
			a = a + a * 0.05;
			i++;
		}
		console.log(a)
		
	// 使用for的写法
	    // var salary = 10;
    // for(var i=1;i<=50;i++){
    //   // 涨幅5%,就是明年的工资是今年的1.05倍
    //    salary= salary*1.05;
    // }
    // console.log(salary);

例3 打印100以内 7的倍数

     for(var i=1;i<=100;i++){
         if(i%7==0){
             console.log(i);
         }
     }

例4:求出最大公约数

​ 公约数:两个数字都能够整除的数字叫做公约数。

​ 最大公约数:公约数中的最大值,就是最大公约数

//提示:两个数值的公约数不会大于较小的数字;

​ 1是任何数字的公约数;

  var n = 8
    var m = 5

    // 提前准备一个变量当作最大公约数
    var gys = 1

    for (var i = m; i > 1; i--) {
      // 判断它是不是最大公约数
      if (n % i === 0 && m % i === 0) {
        // 表示 i 就是两个数字得最大公约数
        gys = i
        // 因为是倒着循环, 那么找到一个就是最大得
        // 直接结束循环
        break
      }
    }

i–的使用

for(var i=10;i>0;i--){
			循环体;
}
   // // 倒着输出1-10之间的数
    // for(var i=10;i>=1;i--){
    //     console.log(i);
    // }

练习

1.打印100以内所有偶数的和


2.提升:分别求出100以内奇数和偶数的和


3.打印出1000-2000年中所有的闰年,并以每行四个数的形式输出(扩展)

 // var num=0;  // 用于累计闰年输出的次数
    //  for(var i=1000;i<=2000;i++){
    //      if((i%4==0 && i%100!=0) || (i%400==0)){
    //          num++;   //  有闰年就自加1
    //          document.write(i+'&nbsp;&nbsp;');
    //          console.log(num);
    //          if(num==4){   // 等于4就输出换行
    //             num=0;     // 闰年输出的次数,重新归0
    //             document.write('<br />');
    //          }
           
    //      }
    //  }		

差别

break和continue(掌握)
break:

结束/中止for循环

立即跳出当前整个循环,即循环结束,开始执行循环后面的内容(直接跳传出大括号)

一般写在打印之后

continue:

结束本次循环,进行下一个循环

立即跳出当前循环,继续下一次循环(跳到i++的地方) (放打印代码前面)

一般写在打印之前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8MGdUjdy-1662124662724)(/1560391125362.png)]

双重for循环(重点)

for循环嵌套时,注意各个循环的计数器变量名不能重复,否则会变成死循环

例1:五行五列星星的打印

第一步:输出5x5的*形状

     document.write('*****<br />');
     document.write('*****<br />');
     document.write('*****<br />');
     document.write('*****<br />');
     document.write('*****<br />');

第二步:使用for重复输出5行*

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

第三步:让使用for为每行输出五个*

    for (var i = 1; i <= 5; i++) {  // 输出行数的
      //输出列数的
      for (var j = 1; j <= 5; j++) {
        document.write('*');
      }
      document.write('<br />');
    }

例2:直角三角形的打印

//			*
//         	**
//         	***
//       	****
//        	*****
		
    // 输出行数
    for (var i = 1; i <= 5; i++) {
      // 控制列数的
      for (var j = 1; j <= i; j++) {
        document.write('*');  //输出每一行的星星
      }
      document.write('<br />');  // 每一行输出一个换行
    }

例3:等腰三角形的打印

    for (var i = 1; i <= 9; i++) {

      if (i % 2) {
        // 空格
        for (var k = i; k <= 9; k++) {
          document.write('&nbsp;')
        }

        // 星号, 每一个星号后面带一个空格
        for (var j = 1; j <= i; j++) {
          document.write('* ')
        }

        // 换行
        document.write('<br>')
      }

    }

例4:九九乘法表的打印

第一步:输出九行

第二步:每行输出九列

第三步:让列数和行数相等

第四步:实现数字的替换

 //		打印九九乘法表
//		1*1=1
//		1*2=2 2*2=4
//		1*3=3 2*3=6 3*3=9

     for(var i=1;i<=9;i++){  
         // 外层的for循环一次,内次的for就执行i次
         // 设置j<=i;让内层的for随着外层的i变动循环的次数
         for(var j=1;j<=i;j++){
            document.write(j+'x'+i+'='+i*j+'&nbsp;');
         }
         document.write('<br />');
     } 

一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少.


for、while、do…while的区别

1、同一个功能三种循环都可以实现

2、如果知道循环次数用for循环,不知道循环次数用while或者do…while循环

3、如果需要无条件先执行一次用do…while,否则用while

死循环

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3K1uqswE-1662124662725)(/1560394484935.png)]

无法靠自身控制结束的循环,称为死循环

但是可以利用死循环的原理,解决一些问题:

案例:篮球从5米高的地方掉下来,每次弹起的高度是原来的30%,经过几次弹起,篮球的高度是0.1米。

 不知道要循环几次的问题,利用死循环,每次判断一个条件,直到满足条件,利用break跳出循环

例1:给定条件永远成立,就一直执行

	//死循环 : 条件永远成立
	var i = 1;
	while(i<=100){
		document.write(i);
	}
	

例2:表达式指定不合适

    var n=0;
    for(var i=1;i>n;i++){
        document.write('哈哈,死循环');
    }

例3:缺少自增条件

    for(var i=0;i<10;){
        document.write('哈哈,死循环');
    }
Debug工具的使用
概念:
断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。
使用步骤
浏览器中按F12-->sources-->找到需要调试的文件-->在程序的某一行设置断点

例1:查看while中debugger的使用

  var num = 1;
  var sum = 0;
  while (num <= 3) {
    sum += num;
    num ++;
  }

例2:比较大小时的使用

    var age = 10;
    if(age>=18){
        console.log('这是大的')
    }else{
        console.log('这是小的')
    }

练习

例 1 打印100–200之间所有能被3或者7整除的数


例2.计算20的阶乘

n!=1×2×3×…×20

    //求20的阶乘
    // n! = 1*2*3....*n
    var num = 1;
    for(var i=1;i<=20;i++){
         num = num*i;
    }
    document.write(num);

例3.求100-999之间的水仙花数。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ElLp5jXf-1662124662727)(/1560395420643.png)]

提示

     水仙花数是一种特殊的三位数,它的特点就是,每个数位的立方相加的和,等于它本身。
		比如 153 就是水仙花数。因为:
		1*1*1+5*5*5 +3*3*3 = 153
		 Math.pow(4,3);    返回 4 的 3 次幂
<script>
	/*
		100~999 之内,只有 4 个水仙花数,请找出来
	 * */
	//判断任意一个三位数是不是水仙花数
	//思路 : 得到个位  十位 百位   求三个数的立方和
	//	   判断立方和 == 该数本身
	for( var num = 100 ; num <= 999 ; num++ ){
		var digit = num%10;
		var ten = parseInt(num/10)%10;
		var hund = parseInt(num/100);
		var sum = Math.pow(digit,3) + Math.pow(ten,3) + Math.pow(hund,3);
		if( sum == num ){
			document.write( num + "是水仙花数<br>" );
		}
	}
</script>

作业

1.完成一个等腰三角形打印功能

<script>
      // 1.完成一个三角形打印功能
      // 外层for用于控制,显示几行
      // 内层for用于控制一行显示几个*
      for(var i=1;i<=10;i++){
          // 输出一个倒三角的空格
          // 用于控制星星与边上的距离
          for(var k=10;k>=i;k--){
            document.write('&nbsp;');
          }
          // 输出的是星星
          for(var j=1;j<=i;j++){
              document.write('*');
          }
          // 实现换行的功能
          document.write('<br />');
      }
 </script>

2.九九乘法表

3 篮球从5米高的地方掉下来,每次弹起的高度是原来的30%,经过几次弹起,篮球的高度是0.1米。

  //  var count =0;
    //  var he  = 5;
    //  while(true){
    //     he*=0.3;
    //     count++;
    //     if(he<0.1){
    //         // 跳出循环
    //         break;
    //     }
    //  }
    // document.write(count);

4.有一个64个格子的盘子,第一个格子放1个芝麻,第二个格子放两个芝麻,第三个格子放4个芝麻,求64个格子一共有多少芝麻?

5.求1到20之间所有阶乘的和;

提高题

:实现隔行变色的效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
.red {background: red;}
</style>
</head>

<body>

<script>

document.write('<table width="600" border="1" cellspacing="0">');
document.write('<tr style="background: #808080;">');
document.write('<th>编号</th>');
document.write('<th>新闻标题</th>');
document.write('<th>发布时间</th>');
document.write('</tr>');
	
	for(var num = 1; num <= 10; num++)
	{
		/*
		if(num % 2 == 0)
		{
			// 偶数变色
			document.write('<tr style="background: red;">');
		}else {
			document.write('<tr>');	
		}
		*/
		
		if(num % 2 == 0)
		{
			// 偶数变色
			document.write('<tr class="red">');
		}else {
			document.write('<tr>');	
		}
		
		document.write('<td>111</td>');
		document.write('<td>111</td>');
		document.write('<td>111</td>');
		document.write('</tr>');
	}
	
	document.write('</table>');
</script>
</body>
</html>

vscode的配置

{ // vscode默认启用了根据文件类型自动设置tabsize的选项
  "editor.detectIndentation": false,
  // 重新设定tabsize
  "editor.tabSize": 2,
  "editor.fontSize": 22
  ,
  // #每次保存的时候自动格式化
  "editor.formatOnSave": true,
  // #每次保存的时候将代码按eslint格式进行修复
  "eslint.autoFixOnSave": true,
  // 添加 vue 支持
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    {
      "language": "vue",
      "autoFix": true
    }
  ],
  //  #让prettier使用eslint的代码格式进行校验
  "prettier.eslintIntegration": true,
  //  #去掉代码结尾的分号
  "prettier.semi": false,
  //  #使用带引号替代双引号
  "prettier.singleQuote": true,
  //  #让函数(名)和后面的括号之间加个空格
  "javascript.format.insertSpaceBeforeFunctionParenthesis": true,
  // #这个按用户自身习惯选择
  "vetur.format.defaultFormatter.html": "js-beautify-html",
  // #让vue中的js按编辑器自带的ts格式进行格式化
  "vetur.format.defaultFormatter.js": "vscode-typescript",
  "vetur.format.defaultFormatterOptions": {
    "js-beautify-html": {
      "wrap_attributes": "force-aligned"
      // #vue组件中html代码格式化样式
    }
  },
  "explorer.confirmDragAndDrop": false,
  "window.zoomLevel": 1,
  "files.autoSave": "off"
}

OnSave": true,
// #每次保存的时候将代码按eslint格式进行修复
“eslint.autoFixOnSave”: true,
// 添加 vue 支持
“eslint.validate”: [
“javascript”,
“javascriptreact”,
{
“language”: “vue”,
“autoFix”: true
}
],
// #让prettier使用eslint的代码格式进行校验
“prettier.eslintIntegration”: true,
// #去掉代码结尾的分号
“prettier.semi”: false,
// #使用带引号替代双引号
“prettier.singleQuote”: true,
// #让函数(名)和后面的括号之间加个空格
“javascript.format.insertSpaceBeforeFunctionParenthesis”: true,
// #这个按用户自身习惯选择
“vetur.format.defaultFormatter.html”: “js-beautify-html”,
// #让vue中的js按编辑器自带的ts格式进行格式化
“vetur.format.defaultFormatter.js”: “vscode-typescript”,
“vetur.format.defaultFormatterOptions”: {
“js-beautify-html”: {
“wrap_attributes”: “force-aligned”
// #vue组件中html代码格式化样式
}
},
“explorer.confirmDragAndDrop”: false,
“window.zoomLevel”: 1,
“files.autoSave”: “off”
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值