学习笔记整理-JS-04-流程控制语句

文章目录

    • 一、条件语句
      • 1. `if`语句的基本使用
      • 2. `if else if`多条件分支
      • 3. `if`语句算法题
      • 4. `switch`语句
      • 5. 三元运算符
    • 二、循环语句
      • 1. `for`循环语句
      • 2. `for`循环算法题
      • 3. `while`循环语句
      • 4. `break`和`continue`
      • 5. `do while`语句
    • 三、初识算法
      • 1. 什么是算法
      • 2. 累加器和累乘器
      • 3. 穷举法
      • 4. 综合算法题目

一、条件语句

1. if语句的基本使用

  • if语句是最简单的条件语句,也称选择语句。它通常结合else一起使用,表示如果...就...否则...

      if (测试条件) {
        // 语句块1
        // 当测试条件为真,则执行这里
      } else {
        // 语句块2
        // 当测试条件为假,则执行这里
      }
    
  • 举例1:用户输入一个数字,如果这个数字是偶数,则弹出对话框显示"偶数",否则弹出对话框显示"奇数"。

      var a = Number(prompt('请输入一个数字'));
      if (a % 2 == 0) {
        alert('偶数');
      } else {
        alert('奇数');
      }
    
  • 执行流程图

    if-2.png

  • 举例2:用户输入年龄,判断用户是否可以申领驾照。申领驾照的条件是年龄必须为18到70岁。

      var age = Number(prompt('请输入年龄'));
      if (age >= 18 && age <= 70) {
        alert('可以考取驾照');
      } else {
        alert('年龄不符合要求');
      }
    
  • 在if语句中else可以省略

      var a = Number(prompt('请输入一个数字'));
      if (a === 5) {
        alert('这是我喜欢的数字!');
      }
    
  • 单行if语句,如果if语句体中只有一行语句,可以省略大括号和换行。

      var a = Number(prompt('请输入一个整数'));
      if (a > 5) alert('这个数字大于5');
      if (a % 2 == 0) alert('这个数字是偶数');
      alert('再见');
    

2. if else if多条件分支

  • 举例:用户输入考试成绩,根据下表输出用户的成绩档次。
    成绩评价
    85~100优秀
    70~84良好
    60~69及格
    0~59不及格
      var score = Number(prompt('请输入成绩'));
      if (score >= 85) {
        alert('优秀');
      } else if (score >= 70) {
        alert('良好');
      } else if (score >= 60) {
        alert('及格');
      } else {
        alert('不及格');
      }
    
  • else if()条件分支"暗含"不符合之前所有条件,要深刻理解什么叫"否则如果"
      if (测试表达式1) {
        // 当测试表达式1为true时执行
      } else if (测试表达式2) {
        // 当测试表达式1为false时,测试表达式2为true执行
      } else if (测试表达式3) {
        // 当测试表达式1为false时,测试表达式2为false执行,测试表达式3为true时执行
      } else {
        // 当所有测试表达式都为false时执行
      }
    

3. if语句算法题

  • 判断水仙花数:水仙花数是这样的一个3位数,它的每一个数位的数字的立方和等于它本身。
    if-3
    if-4

          // 要求用户输入一个三位数
          var n = Number(prompt('请输入一个三位数'));
    
          // 对用户输入的数值,进行合法性的验证
          if (!isNaN(n) && 100 <= n && n <= 999) {
              // 当用户输入的数字是合法
              // 字符串方法
              // 把数字n变为字符串
              var n_str = n.toString();
              console.log('n_str',n_str)
              // 个位
              var a = Number(n_str.charAt(2));
              // 十位
              var b = Number(n_str.charAt(1));
              // 百位
              var c = Number(n_str.charAt(0));
              console.log(a,b,c)
    
              // 根据水仙花数的条件进行判断
              if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
                  alert('这个数字是水仙花数');
              } else {
                  alert('这个数字不是水仙花数');
              }
          } else {
              // 输入不合法
              alert('您输入的数字不合法的');
          }
    
          // 要求用户输入一个三位数
          var n = Number(prompt('请输入一个三位数'));
    
          // 对用户输入的数值,进行合法性的验证
          if (!isNaN(n) && 100 <= n && n <= 999) {
              // 当用户输入的数字是合法
              // 数学方法
              // 百位
              var a = Math.floor(n / 100);
              // 十位
              var b = Math.floor(n / 10) % 10;
              // 各位
              var c = n % 10;
    
              // 根据水仙花数的条件进行判断
              if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
                  alert('这个数字是水仙花数');
              } else {
                  alert('这个数字不是水仙花数');
              }
          } else {
              // 输入不合法
              alert('您输入的数字不合法的');
          }
    
  • 游乐园门票计算:某游乐园的门票价格如下表所示。请用户输入年龄和星期几,弹出对话框显示门票价格。星期几用阿拉伯数字0、1、2、3、4、5、6表示,
    其中0表示周日。

    年龄大于等于10岁年龄小于10岁
    平日300140
    周末500210

    if-4

4. switch语句

  • switch语句的用途:当一个变量被分类讨论的情形。
    if-7
    switch-1.png
    switch-2.png

5. 三元运算符

ternary.png

二、循环语句

1. for循环语句

for.png
for-1.png

2. for循环算法题

  • 计算1+2+3+4...+99+100的和
    for-2.png

3. while循环语句

  • while循环语句也是一种循环结构,是一种"不定范围"循环,和for循环各有不同的用武之地。

  • while循环的语法

    • while语句事先先不指定循环开始、结束的范围,只要测试条件满足,就一直执行循环体。
        while (测试条件) {
      
        } 
      
  • while循环注意事项

    • while循环没有显式定义循环变量,必须自己while循环外先定义好循环变量,有时甚至可以没有循环变量。
    • 循环体内的语句,必须使循环测试条件趋势不成立,否则会死循环。
  • 更适合while循环的场景

    • 寻找最小的满足n2 > 4123的整数n
    • 小兔子拔萝卜,第1天拔1个,第2天拔2个,第3天拔3个,以此类推。请问小兔子多少天能把500个萝卜拔光?
        var n = 1;
        var sum = 0;
        while (sum < 500) {
          sum += n;
          n++;
        }
        console.log(n - 1 );
      

4. breakcontinue

  • break表示立即终止循环,它只能用在循环语句中,在for循环和while循环中都可以使用。

       for(var i = 0; i < 10; i++) {
         console.log(i);  // 0 1 2 3 4
         if (i == 4) {
            break;
          } 
       }  
    
  • break用在while语句中,通常和while(true){}搭配使用

        var n = 1;
        while (true) {
          if (n * n > 4123) {
            console.log(n);  // 65
            break;
          } 
          n++;
        }
    
  • continue用于跳过循环中的一个迭代,并继续执行循环中的下一个迭代。for循环更经常使用continue

      for(var i = 0; i < 5; i++) {
        if (i == 3) {
          continue;
        }
        console.log(i); // 0 1 2 4
      }
    

5. do while语句

  • do while循环是一种后测试循环语句。它不同于for循环和while循环每次都是"先测试条件是否满足,然后
    执行循环体",do-while循环是"先执行循环体,然后测试条件是否满足"。

  • do-while循环将循环执行条件写到了循环体的后面,这样一来,循环体一定会至少执行一次,然后再检测循环执行条件是否为true,
    决定是否继续执行循环体。

      do {
        循环体
      } while (循环执行条件)
    
  • 随机数函数得到0到1之间的小数。Math.random()

  • 得到[a, b]区间的整数,公式:

      parseInt(Math.random() * (b - a + 1)) + a
    
  • 随机生成两个变量dxdy,它们均在[-4, 4]区间随机取值,但要求dxdy不能同时为0。

       do {
         var dx = parseInt(Math.random() * 9) - 4;
         var dy = parseInt(Math.random() * 9) - 4;
       } while (dx == 0 && dy == 0)
       
       console.log(dx, dy);
    

三、初识算法

1. 什么是算法

  • 算法就是一个问题,拆解为计算机能够一步一步执行的步骤。
  • 计算机的流程控制语句:顺序执行、选择语句、循环语句
  • 优秀算法的要求
    • 正确性
    • 健壮性
    • 可读性

2. 累加器和累乘器

  • 累加器:

    • 由用户输入数字n,请计算下面算式的值
         3/2 + 4/3 + 5/4 ... + (n + 1)/n
      
          // 由用户输入数字n,计算3/2 + 4/3 + 5/4 + …… + (n+1)/n的结果
          // 用户输入数字n
          var n = Number(prompt('请输入数字n'));
          // 累加器
          var sum = 0;
          // 遍历分母就可以了,因为分母就是分子加1有关系
          for (var i = 2; i <= n; i++) {
              sum += (i + 1) / i;
          }
          alert(sum.toFixed(2)); 
      
  • 累乘器

    • 由用户输入数字n,请计算n的阶乘
         6的阶乘 = 6 * 5 * 4 * 3 * 2 * 1 
      
          // 请用户输入数字n
          var n = Number(prompt('请输入数字'));
          // 累乘器,一定注意,累乘器要从1开始,因为如果从0开始,0乘以任何数字都是0,
          var result = 1;
          // 倒着遍历,计算阶乘
          for (var i = n; i >= 1; i--) {
              result *= i;
          }
          // 显示结果
          alert(result);
      
  • 同时用到累加器和累乘器
    add

      // 用莱布尼茨级数估算圆周率
      // π = 2 * (1 + 1/3 + (1*2)/(3*5) + (1*2*3)/(3*5*7) + (1*2*3*4)/(3*5*7*9) + (1*……n)/(3*5*……2n+1))
      // 累加器,就是最后的答案,
      var sum = 0;
      // 累乘器,用来制作每一项,制作出来的这个项,要往累加器中累加
      var item = 1;
      // 让用户输入n
      var n = Number(prompt('请输入数字n'));
      // 遍历
      for(var i = 1 ; i <= n ; i++){
          // 要先制作出这一项,这一项怎么制作?要使用累乘器。item就是小车厢。
          item *= i / (2 * i + 1);
          // console.log(item);
          // 把车厢往累加器中累加
          sum += item;
      }
      // 显示结果
      alert((1 + sum) * 2); 
    

3. 穷举法

  • 计算机最突出的能力就是计算,它没有归纳总结、逻辑推理的能力。所以人们使用计算机解决问题的时候,要"扬长避短"。
    充分发挥计算机的计算优势,而不要让它进行逻辑推理。穷举法就是这样的一种算法思想。
  • 穷举法,顾名思义,是指根据题目的条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验
    证完毕。若某个情况符合题目的条件,则为本问题的一个解;若全部情况验证后都不符合题目的条件,则本题无解。
  • 寻找100以内的既能被3整除,也能被5整除的数字
        // 寻找1~100当中的既能被3整除,也能被5整除的数字
        // 穷举法,从1开始试验
        for (var i = 1; i <= 100; i++) {
            if (i % 3 == 0 && i % 5 == 0) {
                console.log(i);
            }
        }
    
  • 用户输入一个数字,在控制台显示这个数字的全部约数,
    • 例如:48的约数 1、2、3、4、6、8、12、16、24、48
        // 让用户输入数字n
        var n = Number(prompt('请输入数字'));
        // 穷举法
        for (var i = 1; i <= n ; i++) {
            if (n % i == 0) {
                console.log(i);
            }
        }
      

4. 综合算法题目

  • 循环嵌套
    • 请寻找1~100的所有质数
        质数:只能够被1和它本身整除的数字,最小的质数是2
        比如:2、3、5、7、11、13、17、19、23、29 ...
      
        // 寻找100以内的质数
        // 穷举法
        outer: for (var i = 2; i <= 100; i++) {
            // 内层循环开始从2开始到小于这个数字的每一个数字都尝试除i,如果能够整除,说明它不是质数,就可以筛选下一个数字了
            for (var j = 2; j < i; j++) {
                if (i % j == 0) {
                    // 说明数字i不是质数,因为它找到了除1和它自身之外的约数了,测试下一个数字了
                    // continue表示放弃这个数字,开始迭代下个数字,continue它负责的是它所在的最内层的for循环
                    // 要给外层for循环加上label,然后在continue的后面加上这个label,
                    // 这样就表示立即开始迭代外层for循环的下一个数字了,而不是内层for循环
                    continue outer;
                }
            }
      
            // 能够遇见这条语句的数字i,一定是质数,否则就被continue略过了
            console.log(i);
        }
      
    • 有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何
        // 鸡兔同笼的问题
        // 方法1:
        // 假设小鸡有a只,兔子有b只
        for (var a = 0; a <= 35; a++) {
            for (var b = 0; b <= 35; b++) {
                if (a + b == 35 && 2 * a + 4 * b == 94) {
                    console.log('小鸡有' + a + '只,兔子有' + b + '只');
                }
            }
        }
      
        // 方法2:
        // 假设小鸡有a只,那么兔子有35 - a只
        for (var a = 0; a < 35; a++) {
            var b = 35 - a;
            if (2 * a + 4 * b == 94) {
                console.log('小鸡有' + a + '只,兔子有' + b + '只');
            }
        }
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/73085.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫的requests(学习于b站尚硅谷)

目录 一、requests  1. requests的基本使用  &#xff08;1&#xff09;文档  &#xff08;2&#xff09;安装  &#xff08;3&#xff09;响应response的属性以及类型  &#xff08;4&#xff09;代码演示 2.requests之get请求  3. requests之post请求  &#x…

面试八股文Mysql:(1)事务实现的原理

1. 什么是事务 事务就是一组数据库操作&#xff0c;这些操作是一个atomic&#xff08;原子性的操作&#xff09; &#xff0c;不可分割&#xff0c;要么都执行&#xff0c;要么回滚&#xff08;rollback&#xff09;都不执行。这样就避免了某个操作成功某个操作失败&#xff0…

centos7 nginx1.18.0离线升级至1.25.1

centos7 nginx1.18.0离线升级至1.25.1 项目背景 系统&#xff1a;centos 7 nginx版本&#xff1a; 1.18.0 最近护网行动查出来 有关Nginx的几个安全漏洞&#xff0c;解决方案只需要更新Nginx版本到最新即可。 Nginx升级过程 1. 下载新版本nginx 下载地址&#xff1a;https:…

学习笔记整理-JS-06-函数

一、函数基本使用 1. 什么是函数 函数就是语句的封装&#xff0c;可以让这些代码方便地被复用。函数具有"一次定义&#xff0c;多次调用"的优点。使用函数&#xff0c;可以简化代码&#xff0c;让代码更具有可读性。 2. 函数的定义和调用 和变量类似&#xff0c;函…

选择最适合自己的笔记本

选择最适合自己的笔记本电脑 一、了解笔记本品牌一线品牌准一线品牌二线品牌三线品牌 二、笔记本入手渠道笔记本入手渠道 三、根据需求选择机型使用需求1.日常使用2.商务办公、财务3.轻度剪辑、ps4.代码5.创意设计6.游戏 四、笔记本电脑配置如何选1.cpu2.显卡&#xff08;GPU&a…

MSP432自主开发笔记6:定时器多通道捕获多条编码器线脉冲数

所用开发板&#xff1a;MSP432P401R 今日在此更新一下编码器测速的定时器捕获写法&#xff0c;之前学习时竟然忘记更新了~~ 本文讲如何用定时器的通道来 捕获编码器的脉冲信号数量&#xff0c;不提供速度路程的计算方式&#xff0c; 文章提供源码&#xff0c;测试工程下载&a…

Jmeter 参数化的几种方法

目录 配置元件-用户自定义变量 前置处理器-用户参数 配置元件-CSV Data Set Config Tools-函数助手 配置元件-用户自定义变量 可在测试计划、线程组、HTTP请求下创建用户定义的变量 全局变量&#xff0c;可以跨线程组调用 jmeter执行的时候&#xff0c;只获取一次&#xff0…

PromQL实现Actuator获取的JVM指标的Full GC次数监控

Spring Boot 版本需要2.0.0或更高版本。 添加Micrometer Prometheus registry依赖: <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId> </dependency>在application.properties中开…

linux-删除KVM虚拟机

1.查看主机 #virsh list 2.关闭主机 #virsh shutdown 虚拟机名称 3.删除主机定义 #virsh undefine 虚拟机名称 4.删除KVM虚拟机文件 #find / -name 虚拟机名称 #rm -rf 虚拟机文件

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息&#xff0c;但默认HTTP协议只支持请求响应模式&#xff0c;这样做可以简化Web服务器&#xff0c;减少服务器的负担&#xff0c;加快响应速度&#xff0c;因为服务器不需要与客户端长时间建立一个通信链接&#xff0c;但…

原生js发送ajax请求---ajax请求篇(一)

在原生js中我们使用的是XMLHttpRequest对象来发送ajax请求 主要步骤就是&#xff1a; 1.创建XMLHTTPRequest对象 2.使用open方法设置和服务器的交互信息 3.设置发送的数据&#xff0c;开始和服务器端交互 4.注册事件 5.更新界面 &#xff08;1&#xff09; get方式 //步骤一…

教你如何为博客网站申请阿里云的免费域名HTTPS证书

如何为博客网站申请阿里云的免费域名HTTPS证书 文章目录 如何为博客网站申请阿里云的免费域名HTTPS证书前置条件&#xff1a;步骤1 例如阿里云控制台&#xff0c;选择SSL证书步骤2 申请购买免费证书步骤3 创建证书步骤3.1 证书申请步骤3.2 DNS域名验证 步骤4 等待证书审核成功&…

善于用兵的人,军队粮草取自敌人

善于用兵的人&#xff0c;军队粮草取自敌人 【安志强趣讲《孙子兵法》第8讲】 【原文】 善用兵者&#xff0c;役不再籍&#xff0c;粮不三载&#xff1b;取用于国&#xff0c;因粮于敌&#xff0c;故军食可足也。 【注释】 役不再籍&#xff1a;役&#xff0c;兵役&#xff1b;…

一周开发问题回顾(2023年08月07日-2023年08月13日)

一周开发问题回顾2023年08月07日-2023年08月13日 1. Arrays.asList()与 new ArrayList()的区别1.1 Arrays1.1.1补充 ArrayList(Arrays.asList(array)) 1.2 ArrayList()1.2.1 创建ArrayList的几种方法 2.Mysql中group by的使用方式3.画图4. 时间倒排5. 工厂策略设计模式6.List注…

Observable设计模式简介

Observable设计模式存在于许多Java API和响应式编程中。下面介绍Java中永恒的Observable模式。 Observable设计模式用于许多重要的Java API。一个众所周知的示例是使用ActionListenerAPI执行操作的JButton。在这个例子中&#xff0c;我们ActionListener在按钮上进行了监听或…

2.Model、ModelMap和ModelAndView的使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…

汽车制造业上下游协作时 外发数据如何防泄露?

数据文件是制造业企业的核心竞争力&#xff0c;一旦发生数据外泄&#xff0c;就会给企业造成经济损失&#xff0c;严重的&#xff0c;可能会带来知识产权剽窃损害、名誉伤害等。汽车制造业&#xff0c;会涉及到重要的汽车设计图纸&#xff0c;像小米发送汽车设计图纸外泄事件并…

电子拣货标签2代系统简介

CK_Label_v2 一、革新点 无线 容易安装和移动 按键及指示导引系统 128*64点阵屏幕&#xff0c;自带LED背光 红绿两色高亮LED灯光指示 长电池寿命&#xff0c;常规使用3年以上 二、特点与效益 提升作业速度与品质 简易快速部署 实现无纸化标准化作业 缩短操作人员培训时…