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

news2024/11/25 9:58:21

文章目录

    • 一、条件语句
      • 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 + '只');
            }
        }
      

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python根据已有列计算其他列

根据已有列计算其他列 1、根据已有列新增列2、根据已有列修改其他列 读取数据源 import pandas as pd # 读取智能大师号码信息 path1 r../excelFile-j/flower.csv df_data pd.read_csv(path1) # df_data 内容1、根据已有列新增列 方式一&#xff1a;根据单列 df_data["…

Python遥感开发之分段读取和保存遥感数据

Python遥感开发之分段读取和保存遥感数据 1 分段读取数据2 实现分批读取数据以及进行计算3 实现分批保存成TIF文件&#xff08;所有完整代码&#xff09;4 分段TIF整合到一个TIF5 生成一个空白TIF&#xff08;每个像元值为0的TIF&#xff09; 前言&#xff1a;当遇到批量读取大…

DIP: Spectral Bias of DIP 频谱偏置解释DIP

On Measuring and Controlling the Spectral Bias of the Deep Image Prior 文章目录 On Measuring and Controlling the Spectral Bias of the Deep Image Prior1. 方法原理1.1 动机1.2 相关概念1.3 方法原理频带一致度量与网络退化谱偏移和网络结构的关系Lipschitz-controlle…

DCMM数据管理成熟度之数据治理-数据治理沟通

​01 标准原文 1 概述 数据治理沟通旨在确保组织内全部利益相关者都能及时了解相关政策、标准、流程、角色、职责、计划的最新情况,开展数据管理和应用相关的培训,掌握数据管理相关的知识和技能。数据治理沟通旨在建立与提升跨部门及部门内部数据管理能力,提升数据资产意识,…

读发布!设计与部署稳定的分布式系统(第2版)笔记31_版本问题

1. 在软件与外部环境之间的许多交汇点上&#xff0c;版本控制基本上处于混乱状态 1.1. 不应该为了更新自身系统的API&#xff0c;而让服务消费者被迫与你同时发布新版本 1.2. 多数服务新版本的发布应该具有兼容性 2. 分层的“约定”栈 2.1. 连接握手和持续时间 2.2. 请求组…

华为在ospf area 0单区域的情况下结合pbr对数据包的来回路径进行控制

配置思路&#xff1a; 两边去的包在R1上用mqc进行下一跳重定向 两边回程包在R4上用mqc进行下一跳重定向 最终让内网 192.168.10.0出去的数据包来回全走上面R-1-2-4 192.168.20.0出去的数据包来回全走 下面R1-3-4 R2和R3就是简单ospf配置和宣告&#xff0c;其它没有配置&#…

Python爬虫(十一)_案例:使用正则表达式的爬虫

本章将结合先前所学的爬虫和正则表达式知识&#xff0c;做一个简单的爬虫案例&#xff0c;更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器&#xff0c;我们就可以进行对爬取到的全部网页源代码进行筛选了。 下面我们一起尝试一下爬取内涵段子网站&#xff1…

《C语言深度解剖》.pdf

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;深入理解C语言 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 C语言深度解剖.pdf 提取码:yunx

使用cloud-int部署nginx

参考 azure创建虚拟机,创建虚拟机注意入站端口规则开放80端口&#xff0c;高级中使用自定义数据&#xff0c;初始化虚拟机&#xff0c;安装nginx 连接CLI&#xff0c;验证是否安装成功 访问虚拟机IP查看是否部署成功 参考文档&#xff1a; https://learn.microsoft.com/zh-cn…

代码随想录算法训练营之JAVA|第二十八天|122. 买卖股票的最佳时机 II

今天是第28天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 122. 买卖股票的最佳时机 IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 第一想法 题目理解&#xff1a;找到一个升序的段&#xff0c;然后累加每一个升序的段头尾的…

ORCA优化器浅析——CXform base class for all transformations

CXform CXforml类作为所有transformation的基础类&#xff0c;其包含了pattern成员m_pexpr。主要是在exploration和implementation expression流程中使用&#xff0c;主要调用Transform函数。其还包含返回相关xforms的集合函数&#xff0c;比如PbsIndexJoinXforms等。 class …

Centos7多台服务器免密登录

准备四台服务器: docker0 docker1 docker2 docker3 在docker0服务器上生成公钥和私钥 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

2023年03月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;字符长方形 给定一个字符&#xff0c;用它构造一个长为4个字符&#xff0c;宽为3个字符的长方形&#xff0c;可以参考样例输出。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 输入只有一行&#xff0c; 包含一个字符。 输出 该字符构成的长方形…

Mysql主从分离

一、前言 某个应用场景中&#xff0c;在操作数据库这部分&#xff0c;往往是数据库的读取往往大于数据库的写入&#xff0c;当读取数据达到数据库的瓶颈时&#xff0c;性能下滑&#xff0c;影响数据的写入&#xff0c;导致整个应用的不可用。为了解决这个问题&#xff0c;这时&…

java热插拔组件 SPI机制

文章目录 前言一、热插拔(spi机制)是什么&#xff1f;二、使用步骤1.利用java META-INF2.利用google spi3. 测试效果 总结 前言 在项目中,如果想要增加项目的灵活性,健壮性, 高逼格,那么你要对于java中的一些机制有了解; 例如: java中的spi机制spring中的spring.factories 等…

QtCreator ui设置界面 Layout 的属性 layoutStretch

layoutStretch 用于控制Layout在被用户进行缩放时。里面控件的缩放比例。如一个水平布局里面有两个控件 一个 QLineEdit 和 QPushButton。首先将两个控件的尺寸策列的水平策略都设置为Expanding。此时在将包含这两个控件的水平布局的 layoutStretch 进行如下设置。 运行程序就…

权衡与选择:如何巧妙管理项目需求的优先级

在项目管理领域&#xff0c;处理和管理需求可能是最具挑战性的环节之一。每一个项目都充满了各种需求&#xff0c;从业务需求到技术需求&#xff0c;从用户需求到系统需求。而如何有效地为这些需求排列优先级&#xff0c;不仅会影响项目的进度和资源分配&#xff0c;还会直接关…

Azure创建第一个虚拟机

首先&#xff0c;登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角&#xff0c;点击“虚拟机”按钮&#xff0c;并点击创建&#xff0c;创建Azure虚拟机。 在虚拟机创建页面中&#xff0c;选择所需的基本配置&#xff0c;包括虚拟机名称、操作系统类型和版…

threejs纹理的使用

实现地板的效果&#xff0c;需要导入3张图片&#xff0c;第一种样式&#xff0c;第二种&#xff0c;木板间的间隙&#xff0c;第三种&#xff0c;木板的粗细图片。先注册一个物体属性&#xff0c;在物体属性上加上图片&#xff0c;注册代码如下图&#xff1a; const floorMat …

乡村振兴指数与其30余个原始变量数据(2000-2022年)

乡村振兴是当下经济学研究的热点之一&#xff0c;对乡村振兴进行测度&#xff0c;是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据&#xff0c;供大家使用。 数据来源&…