学习笔记整理-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('奇数');}
-
执行流程图
-
举例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位数,它的每一个数位的数字的立方和等于它本身。
// 要求用户输入一个三位数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岁 平日
300 140 周末
500 210
4. switch
语句
switch
语句的用途:当一个变量被分类讨论
的情形。
5. 三元运算符
二、循环语句
1. for
循环语句
2. for
循环算法题
- 计算
1+2+3+4...+99+100
的和
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. break
和continue
-
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
-
随机生成两个变量
dx
和dy
,它们均在[-4, 4]区间随机取值,但要求dx
和dy
不能同时为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,请计算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);
- 由用户输入数字n,请计算n的阶乘
-
同时用到累加器和累乘器
// 用莱布尼茨级数估算圆周率// π = 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);}}
- 例如:48的约数 1、2、3、4、6、8、12、16、24、48
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 + '只');}}
- 请寻找1~100的所有质数
相关文章:

学习笔记整理-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日盘中走势活泼,截至发稿,新晨科技、竞业达、恒银科技等涨停,宇信科技涨近10%,中孚信息涨近9%,华是科技、神州数码涨超7%。 新晨科技今天“20cm”涨停,公司昨日晚间公告,近来收到投标代…...

centos 7镜像(iso)下载图文教程(超详细)
声明:本教程为本人学习笔记,仅供参考 文章目录 前言一、阿里云镜像站下载centos 7 二、清华源下载centos 7小结 前言 声明:本教程为本人学习笔记,仅供参考 本教程将提供两种方式下载centos 7 系统镜像 1、阿里巴巴开源镜像站 2、…...
使用Druid,以jdbc方式配置多数据源
文章目录 背景示例代码(结合实际进行配置)总结 背景 当使用Spring Boot项目并需要多数据源时,你可以使用Druid连接池来配置和管理多个数据源。以下是一个示例的配置和代码,以说明如何实现多数据源: 示例代码…...

RabbitMQ基础(2)——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计
目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码,发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…...
2. VisionOS平台概述
Unity 对VisionOS的支持将 Unity 编辑器和运行时引擎的全部功能与RealityKit提供的渲染功能结合起来。Unity 的核心功能(包括脚本、物理、动画混合、AI、场景管理等)无需修改即可支持。这允许游戏和应用程序逻辑像任何其他 Unity 支持的平台一样在Vision…...

MySql存储过程详解
文章目录 存储过程1 介绍 基本语法创建:调用查看删除演示: 变量相关系统变量演示: 用户自定义变量局部变量 if语法参数介绍casewhilerepeatloop游标条件处理程序存储函数 存储过程 1 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过…...
CRM 系统实施风险分析
企业实施 CRM 系统将引起各个方面的巨大变化, CRM 系统实施项目中,有不 少成功的案例,也存在相当的风险,企业只有增强风险意识并积极防范,才有可能提高 CRM 实施成功的概率。 1.企业内部环境带来的风险 (…...

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

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

1. 基于UDP的TFTP文件传输
1)tftp协议概述 简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输 特点: 是应用层协议 基于UDP协议实现 数据传输模式 octet:二进制模式(常用) mail:…...

django中使用bootstrap-datepicker时间插件
1、插件的下载 Bootstrap Datepicker是一款基 于Bootstrap框架的日期选择控件,可以方便地在Web应用中添加可交互的日期选择功能。Bootstrap Datepicker拥有丰富的选项和API,支持多种日期格式,可以自定义样式并支持各种语言。 Bootstrap Datepicker 依赖…...
《golang设计模式》第二部分·结构型模式-02-桥接模式(Bridge)
文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.1 代码2.2 类图 1. 概念 客户端调用桥接接口实现原有功能和扩展功能的组合 1.1 角色 Implementor(实施者): 具体实施者的抽象,可以是一个接口。 Concrete Implementor&…...

【2023年11月第四版教材】《第4章-信息系统管理之管理要点(第四版新增章节)(第二部分)》
信息系统管理之管理要点(第四版新增章节)(第二部分) 2 管理要点2.1 数据管理能力成熟度评估模型DCMM详细表格简要表格 2.2 组织的管理成熟度2.3 能力模型2.4 智能运维能力框架2.5 安全保护等级 2 管理要点 2.1 数据管理能力成熟度…...

【算法——双指针】LeetCode 1089 复写零
千万不要被这道题标注着“简单”迷惑了,实际上需要注意的细节很多。 题目描述: 解题思路: 正序遍历,确定结果数组的最后一个元素所在的位置;知道最后一个元素的位置后倒序进行填充。 先找到最后一个需要复写的数 先…...

基于飞桨图学习框架实现的城市地点动态关系挖掘
李双利 飞桨开发者技术专家(PPDE),百度研究院商业智能实验室研究实习生,中国科学技术大学在读博士生。 主要进行时空数据挖掘和图深度学习的相关研究工作。曾获2021年百度研究院年度优秀实习生,有多篇基于飞桨完成的…...

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 中,useEffect 钩子用于处理副作用,比如数据获取、订阅、手动 DOM 操作等。useE…...

浅谈Spring与字节码生成技术
概要 今天来谈一谈我们熟知的Spring框架和字节码技术有什么联系。 Java程序员几乎都了解Spring。 它的IoC(依赖反转)和AOP(面向切面编程)功能非常强大、易用。而它背后的字节码生成技术(在运行时,根据需要…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...