学习笔记整理-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 4if (i == 4) {break;} }  
    
  • break用在while语句中,通常和while(true){}搭配使用

        var n = 1;while (true) {if (n * n > 4123) {console.log(n);  // 65break;} 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的结果// 用户输入数字nvar 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 
      
          // 请用户输入数字nvar 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;// 让用户输入nvar 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
        // 让用户输入数字nvar 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.mzph.cn/news/36285.shtml

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

相关文章

设计模式(2)工厂方法模式

一、 1、介绍&#xff1a;定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断&#xff0c;根据客户端的选择条件动态实例化相关的类&#xff0c;对于客户端来说…

odoo-034 float 浮点数比较

文章目录 前提问题解决总结 前提 odoo 版本&#xff1a;13 python&#xff1a;3.6.9 问题 比较销售订单行中已送货跟已开票&#xff0c;在 tree 视图显示搜索后的结果。发现搜索条件为已送货 > 已开票时&#xff0c;结果中会包含已送货已开票的。 解决 把这两个值打印出…

LeNet中文翻译

Gradient-Based Learning Applied to Document Recognition 基于梯度的学习应用于文档识别 摘要 使用反向传播算法训练的多层神经网络构成了成功的基于梯度的学习技术的最佳示例。给定适当的网络架构&#xff0c;基于梯度的学习算法可用于合成复杂的决策表面&#xff0c;该决策…

【Vue-Router】使用 prams 路由传参失效

报错信息&#xff1a; [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

考研408 | 【计算机网络】 网络层

导图 网络层&#xff1a; 路由器功能&#xff1a;转发&路由选择 数据平面 数据平面执行的主要功能是根据转发表进行转发&#xff0c;这是路由器的本地动作。 控制平面 1.传统方法/每路由器法&#xff1a; 2.SDN方法&#xff08;Software-Defined Networking) 控制平面中的…

html实现商品图片放大镜,html图片放大镜预览

效果 实现 复制粘贴&#xff0c;修改图片路径即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品图片放大镜</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

关于青少年学习演讲与口才对未来的领导力的塑造的探析

标题&#xff1a;青少年学习演讲与口才对未来领导力的塑造&#xff1a;一项探析 摘要&#xff1a; 本论文旨在探讨青少年学习演讲与口才对未来领导力的塑造的重要性和影响。通过分析演讲和口才对青少年的益处&#xff0c;以及如何培养这些技能来促进领导力的发展&#xff0c;我…

Harmony创建项目ohpm报错

Harmony创建FA模型的项目时报如下错&#xff1a; The registry is empty - edit .ohpmrc file or use "ohpm config set registry your_registry" command to set registry.解决方法&#xff1a; File -> Settings -> Build,Execution,Deployment -> Ohpm …

docker可视化工具Portainer

1:Portainer简介 Portainer是一个docker可视化管理工具&#xff0c;可以非常方便地管理docker镜像容器。官网地址&#xff1a;https://www.portainer.io/ 注&#xff1a;现在Portainer有BE&#xff08;收费&#xff09;和CE&#xff08;免费&#xff09;版本&#xff0c;安装的…

【音视频、chatGpt】h5页面最小化后,再激活后视频停住问题的解决

目录 现象 观察 解决 现象 页面有时候要切换&#xff0c;要最小化&#xff1b;短时间或者几个小时内切换回来&#xff0c;视频可以正常续上&#xff1b;而放置较长时间&#xff0c;几个小时或者一晚上&#xff0c;切换回来后&#xff0c;视频可能卡死 观察 切换页面&#x…

【解读Spikingjelly】使用单层全连接SNN识别MNIST

原文档&#xff1a;使用单层全连接SNN识别MNIST — spikingjelly alpha 文档 代码地址&#xff1a;完整的代码位于activation_based.examples.lif_fc_mnist.py GitHub - fangwei123456/spikingjelly: SpikingJelly is an open-source deep learning framework for Spiking Neur…

【自用】终端设备(ESP32-S3)连接云服务器 HomeAssistant + MQTT 物联网平台

总览 1.流程概述 2.开始搭建&#xff01; 3. 一、流程概述 0.总体流程 二、开始搭建 1.下载 MQTTX 客户端&#xff08; 在PC上 &#xff09; https://mqttx.app/zh/downloads 2.新建 MQTTX 连接 0.点击左侧的加号&#xff0c;开始新建连接。 一共需要填写几个参数&#…

会玩这 10 个 Linux 命令,一定是个有趣的 IT 男!

Linux当中有很多比较有趣的命令&#xff0c;可以动手看看&#xff0c;很简单的。 1.rev命令 一行接一行地颠倒所输入的字符串。 运行&#xff1a; $rev如输入&#xff1a;shiyanlou shiyanlou2.asciiview命令 1.先安装aview $sudo apt-get install aview2.再安装imagema…

vue中封装自动计算比例滑块

此插件为另一位漂亮的前端同事小姐姐封装,觉得非常好用于是决定记载下来,便于复用 如图需要动态传入需要分配权重的数组,平均分配可以自动将100%平均分给数组中的值 如果手动拖拽,则会自动计算可拖动最大区域,便于最终总权重必定为100% <el-alert class"merge-alert&…

zookeeper常用命令

zookeeper常用命令 1. 下载安装2. 配置说明2.1 配置 3. zookeeper的常见命令3.1 server端启动停止等命令3.2 客户端连接等命令3.3 客户端简单常用命令3.3.1 查看目录&#xff08;查看数据结构&#xff09;3.3.2 删除目录3.3.3 创建目录3.3.4 创建目录并写入值 查看节点值3.3.5…

Apache JMeter:完全指南

Apache JMeter 是一款开源的性能测试工具&#xff0c;可以用于测试 Web 应用程序、FTP 服务器、数据库等各种类型的服务器。本文将以 JMeter 5.5 为例介绍 JMeter 的使用方法。 下载和安装 由于 JMeter 是使用 Java 开发的&#xff0c;因此在运行之前必须先安装 JDK。您可以在…

Android中tools属性的使用

参考&#xff1a; 1.Android:Tools命名空间原来是有大用处的 2.Android中tools属性的使用 3.工具属性参考文档 4. 命名空间介绍 5. 注解 6. lint 7. 资源压缩shrink-resources 目录 一、概述二、引入tools命名空间三、tools 命名空间的作用有哪些&#xff1f;四、tools 命名空间…

年薪6.5万美元|生物医学老师获美国耶鲁大学博士后职位

I老师就职于双非二本院校&#xff0c;希望通过出国研修以提升科研背景&#xff0c;在公派访学和申请导师出资的博士后之间&#xff0c;其选择了后者。最终我们落实了美国耶鲁大学的职位&#xff0c;头衔为Associate Research Scientist&#xff08;副研究科学家&#xff09;&am…

Selenium 自动化 | 案例实战篇

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

Observability:识别生成式 AI 搜索体验中的慢速查询

作者&#xff1a;Philipp Kahr Elasticsearch Service 用户的重要注意事项&#xff1a;目前&#xff0c;本文中描述的 Kibana 设置更改仅限于 Cloud 控制台&#xff0c;如果没有我们支持团队的手动干预&#xff0c;则无法进行配置。 我们的工程团队正在努力消除对这些设置的限制…