当前位置: 首页 > news >正文

学习笔记整理-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 + '只');}}
      

相关文章:

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

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

stable-diffusion-webui 界面汉化

本教程通过安装 sd-webui-bilingual-localization 插件来达到汉化目的, 项目地址为:https://github.com/journey-ad/sd-webui-bilingual-localization 一、安装插件 先进入插件安装界面 在搜索栏搜索 zh_CN Localization 中文语言包, 项目地址: https://github.com/dtlnor/st…...

问道管理:信创概念走势活跃,恒银科技斩获四连板

信创概念9日盘中走势活泼&#xff0c;截至发稿&#xff0c;新晨科技、竞业达、恒银科技等涨停&#xff0c;宇信科技涨近10%&#xff0c;中孚信息涨近9%&#xff0c;华是科技、神州数码涨超7%。 新晨科技今天“20cm”涨停&#xff0c;公司昨日晚间公告&#xff0c;近来收到投标代…...

centos 7镜像(iso)下载图文教程(超详细)

声明&#xff1a;本教程为本人学习笔记&#xff0c;仅供参考 文章目录 前言一、阿里云镜像站下载centos 7 二、清华源下载centos 7小结 前言 声明&#xff1a;本教程为本人学习笔记&#xff0c;仅供参考 本教程将提供两种方式下载centos 7 系统镜像 1、阿里巴巴开源镜像站 2、…...

使用Druid,以jdbc方式配置多数据源

文章目录 背景示例代码&#xff08;结合实际进行配置&#xff09;总结 背景 当使用Spring Boot项目并需要多数据源时&#xff0c;你可以使用Druid连接池来配置和管理多个数据源。以下是一个示例的配置和代码&#xff0c;以说明如何实现多数据源&#xff1a; 示例代码&#xf…...

RabbitMQ基础(2)——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码&#xff0c;发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…...

2. VisionOS平台概述

Unity 对VisionOS的支持将 Unity 编辑器和运行时引擎的全部功能与RealityKit提供的渲染功能结合起来。Unity 的核心功能&#xff08;包括脚本、物理、动画混合、AI、场景管理等&#xff09;无需修改即可支持。这允许游戏和应用程序逻辑像任何其他 Unity 支持的平台一样在Vision…...

MySql存储过程详解

文章目录 存储过程1 介绍 基本语法创建:调用查看删除演示: 变量相关系统变量演示: 用户自定义变量局部变量 if语法参数介绍casewhilerepeatloop游标条件处理程序存储函数 存储过程 1 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过…...

CRM 系统实施风险分析

企业实施 CRM 系统将引起各个方面的巨大变化&#xff0c; CRM 系统实施项目中&#xff0c;有不 少成功的案例&#xff0c;也存在相当的风险&#xff0c;企业只有增强风险意识并积极防范&#xff0c;才有可能提高 CRM 实施成功的概率。 1.企业内部环境带来的风险 &#xff08;…...

保持城市天际线(力扣)贪心 JAVA

给你一座由 n x n 个街区组成的城市&#xff0c;每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid &#xff0c;其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。 城市的 天际线 是从远处观察城市时&#xff0c;所有建筑物形成的外部轮廓。…...

电路综合原理与实践---T衰减与PI衰减的详细计算理论与设计仿真

电路综合原理与实践—T衰减与PI衰减的详细计算理论与设计仿真 最近要找工作在刷笔试题目&#xff0c;会刷到关于T衰减的理论计算问题&#xff0c;一直搞不明白怎么算的&#xff0c;搞明白之后给大家伙来分享一下。 基础理论可以参考&#xff1a;电阻衰减网络计算&#xff08;P…...

1. 基于UDP的TFTP文件传输

1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff09; mail&#xff1a;…...

django中使用bootstrap-datepicker时间插件

1、插件的下载 Bootstrap Datepicker是一款基 于Bootstrap框架的日期选择控件&#xff0c;可以方便地在Web应用中添加可交互的日期选择功能。Bootstrap Datepicker拥有丰富的选项和API,支持多种日期格式&#xff0c;可以自定义样式并支持各种语言。 Bootstrap Datepicker 依赖…...

《golang设计模式》第二部分·结构型模式-02-桥接模式(Bridge)

文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.1 代码2.2 类图 1. 概念 客户端调用桥接接口实现原有功能和扩展功能的组合 1.1 角色 Implementor&#xff08;实施者&#xff09;&#xff1a; 具体实施者的抽象&#xff0c;可以是一个接口。 Concrete Implementor&…...

【2023年11月第四版教材】《第4章-信息系统管理之管理要点(第四版新增章节)(第二部分)》

信息系统管理之管理要点&#xff08;第四版新增章节&#xff09;&#xff08;第二部分&#xff09; 2 管理要点2.1 数据管理能力成熟度评估模型DCMM详细表格简要表格 2.2 组织的管理成熟度2.3 能力模型2.4 智能运维能力框架2.5 安全保护等级 2 管理要点 2.1 数据管理能力成熟度…...

【算法——双指针】LeetCode 1089 复写零

千万不要被这道题标注着“简单”迷惑了&#xff0c;实际上需要注意的细节很多。 题目描述&#xff1a; 解题思路&#xff1a; 正序遍历&#xff0c;确定结果数组的最后一个元素所在的位置&#xff1b;知道最后一个元素的位置后倒序进行填充。 先找到最后一个需要复写的数 先…...

基于飞桨图学习框架实现的城市地点动态关系挖掘

李双利 飞桨开发者技术专家&#xff08;PPDE&#xff09;&#xff0c;百度研究院商业智能实验室研究实习生&#xff0c;中国科学技术大学在读博士生。 主要进行时空数据挖掘和图深度学习的相关研究工作。曾获2021年百度研究院年度优秀实习生&#xff0c;有多篇基于飞桨完成的…...

3.1 Qt样式选择器

本期内容 3.1 样式选择器 3.1.1 Universal Selector (通用选择器) 3.1.2 Type Selector (类型选择器) 3.1.3 Property Selector (属性选择器) 3.1.4 Class Selector (类选择器) 3.1.5 ID Selector (ID选择器) 3.1.6 Descendant Selector (后裔选择器) 3.1.7 Chil…...

react钩子副作用理解

useEffect(() > { fetch(‘https://api.example.com/data’) .then(response > response.json()) .then(data > setData(data)); }, []); 怎么理解这个[] 在 React 中&#xff0c;useEffect 钩子用于处理副作用&#xff0c;比如数据获取、订阅、手动 DOM 操作等。useE…...

浅谈Spring与字节码生成技术

概要 今天来谈一谈我们熟知的Spring框架和字节码技术有什么联系。 Java程序员几乎都了解Spring。 它的IoC&#xff08;依赖反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;功能非常强大、易用。而它背后的字节码生成技术&#xff08;在运行时&#xff0c;根据需要…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...