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

javaScript学习第三章(流程控制小练习)

javaScript学习第三章(流程控制小练习)

我们学习了代码块,流程控制,基于这些业务,整理出来了每一个流程控制的小练习

  • if
  • if - else
  • switch
  • while
  • for

一、if 练习

需求背景

编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。

解题分析

<script>// 练习1 let num = +prompt('请输入一个整数');   console.log(num)if(isNaN(num) || num % 1 != 0) {alert("输入数字不合法,请检查")} else {if(num % 2 == 0) {console.log(`${num} 为一个偶数!~`)} else {console.log(`${num} 为一个基数!~`)}}</script>

在这里插入图片描述

二、if -else 判断

需求背景

从键盘输入小明的期末成绩:

​ 当成绩为100时,‘奖励一辆BMW’

​ 当成绩为[80-99]时,‘奖励一台iphone’

​ 当成绩为[60-79]时,‘奖励一本参考书’

​ 其他时,什么奖励也没有

解题分析

<script>// 练习1 let score = +prompt('小明的期末成绩');  // 合法性校验    0 - 100 之间if(isNaN(score) || score % 1 != 0 || score < 0 || score > 100) {alert("输入分数不合法,请检查")} else {if(score === 100) {alert("分数为100,奖励一辆BMW")} else if(score >= 80) {alert("分数为80-99,奖励一台iphone")}else if(score >= 60) {alert("分数为60-79,奖励一本参考书")} else {alert(`分数为:${score},什么奖励也没有`)}}console.log(num)</script>

在这里插入图片描述

三、if -else 综合

我们使用if -else 多重条件判断,可以运用 and 并且,|| 或条件 综合进行判断

需求背景

大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:

​ 高:180cm以上; 富:1000万以上; 帅:500以上;

​ 如果这三个条件同时满足,则:‘我一定要嫁给他’

​ 如果三个条件有为真的情况,则:‘嫁吧,比上不足,比下有余。’

​ 如果三个条件都不满足,则:‘不嫁!’

解题分析

<script>// 练习1 let height = +prompt('请输入你的身高(cm)');   let monery = +prompt('请输入财富(万元)');   let face = +prompt('请输入你的颜值');   if(isNaN(height) || isNaN(monery) || isNaN(face)) {alert("输入参数不合法~~~~")} else {// 合法参数if(height > 180 && monery > 1000 && face > 500) {alert("我一定要嫁给他")} else if(height > 180 || monery > 1000 || face > 500) {alert("嫁吧,比上不足,比下有余。")} else {alert('不嫁!')}}console.log(num)</script>

四、while 练习

我们使用while 进行已知次数的循环

需求背景

假设银行存款的年利率为5%,问1000块存多少年可以变成5000块

解题分析

<script>// 第一步 分解一年能得到多少let monery = 1000;// 一年 let year = 1;monery = monery * 0.05 * year + monery;//  console.log('存一年得:'+monery);// 传统写法1 while(monery < 5000) {monery = monery * 0.05 + monery;console.log(`当前年份为:${year},现在的金额为:${monery}`)// 更新年份year ++;}console.log(`当前年份为:${year},现在的金额为:${monery}`)// 第二种写法let monery1 = 1000;let year1 = 1;// 编写循环,计算存款的年数while(monery1 < 5000){monery1 *= 1.05 // 循环没执行一次,就相当于钱存了一年year1++}console.log(`当前年份为:${year1},现在的金额为:${monery1}`)</script>

在这里插入图片描述

do -while 部分

实际上 do - while 和while 在大于1次的时候展示的效果是一样的,如果 我们有某种需求,不论是否满足,我们都需要通知一次的场景比较适合

五、for 练习

我们进行for 有多个练习

练习1

求100以内所有3的倍数(求它们个数和总和)

解题分析
<script>//方式1let total = 0;let sum = 0;let totalCount = 0;for(let i = 0;i < 100;i ++) {if(i % 3 == 0) {total ++;sum += i;}totalCount ++;}console.log(`迭代的次数:${totalCount},满足条件的有${total}次,总数为:${sum}`)//迭代的次数:100,满足条件的有34次,总数为:1683// 优化方式 2 let count = 0;let sum1 = 0;let totalCount1 = 0;for(let i = 3; i< 100; i += 3) {count ++;totalCount1 ++;sum1 += i;}console.log(`迭代的次数:${totalCount1},满足条件的有${count}次,总数为:${sum1}`)//迭代的次数:33,满足条件的有33次,总数为:1683</script>

在这里插入图片描述

练习2

求 1000 以内的水仙花数

  • 水仙花数
    • 一个n位数(n >= 3),如果它各个位上数字的n次幂之和还等于这个数,那么这个数就是一个水仙花数
    • 153 --> 1 5 3 --> 1 125 27 --> 153
解题分析
<script>let initNum = 1000;// 起码是100以上,必须是三个数for(let i = 100;i < initNum; i ++) {// 1. 求百分位的数字let bai = parseInt(i / 100);// 2. 获取十分位上的数字 let shi = parseInt((i - bai * 100) / 10)// 3. 获取个位的数字let ge = i % 10;//console.log(`数字:${i},百分位数字:${bai},十分位数字:${shi},个位数字:${ge}`)// 如果 if( (bai ** 3) + (shi ** 3) + (ge ** 3) == i) {console.log('当前数字满足水仙花规则,数字为:',i)}}// 方案2 优化for(let num = 100; num < initNum ; num ++) {// 转为字符串  let numStr = num + '';if(numStr[0] **3 + numStr[1] **3 +numStr[2] **3  === num) {console.log('数字满足水仙花规则,数字为:',num)}}</script>

在这里插入图片描述

练习3

获取用户输入的大于1的整数(暂时不考虑输错的情况)

然后编写代码检查这个数字是否是质数,并打印结果

质数

  • 一个数如果只能被1和它本身整除,那么这个数就是质数

  • 1既不是质数也不是合数

解题思路

如果我们的值为9,拆分值计算

编写代码检查9是否是质数

  • 检查9有没有1和9以外的其他因数
    如果有,说明9不是质数
    如果没有,说明9是质数

    • 获取所有的可能整除9的数(1-9)
      2 3 4 5 6 7 8

    • 检查这一堆数中是否有能整除9的数

  • 代码

     // for (let i = 2; i < 9; i++) {//     if(9 % i !== 0){//         // 如果9 % i !== 0 成立,说明9不能被i整除//         // 9 不能被 i 整除 能不能说明9是质数? 不能 //         // 9 必须不能被所有的i整除,才能说明9是质数//         // alert("9是质数")//     }// }
<script>// 获取用户输入的数值let num = +prompt("请输入一个大于1的整数:")// 用来记录num的状态,默认为true,num是质数
let flag = truefor(let i=2; i<num; i++){
if(num % i === 0){// 如果num能被i整除,说明num一定不是质数   // 当循环执行时,如果从来没有进入过判断(判断代码没有执行),则说明9是质数// 如果判断哪怕只执行了一次,也说明 9 不是质数  flag = false}
}if(flag){alert(`${num}是质数!`)}else{alert(`${num}不是质数!`)}let num = +prompt('输入一个大于1的整数');let result = false;for(let i = 2 ; i < num; i ++) {if(num % i == 0) {result = true;break;}}console.log(`输入数字${num} , ${result ? '不是质数' : '是质数'}`)</script>

在这里插入图片描述
ge-20250519203057072.png&pos_id=img-DVu40Jj1-1747663856902)

在这里插入图片描述

六、循环嵌套

  • 九九乘法口诀
  • 质数判断

练习1

<script>document.write("<hr>");// 高度是 9 for(let i = 1; i <=9 ; i ++) {for(let j = 1; j < i+1; j ++) {document.write(`<span> ${j} * ${i} = ${i * j} </span>`);}document.write("<br>");}
</script>

在这里插入图片描述

练习2

质数判断

<script>document.write("<hr>");// 高度是 9 for(let i = 2; i <= 100 ; i ++) {let flag = false;for(let j = 2 ; j < i; j ++) {// 进入判断代表不是质数if (i % j == 0) {flag = true;}}if(!flag) {document.write(`<p> 数字${i} 是质数 </p>`);}}
</script>

在这里插入图片描述

七、break和continue练习

  • 利用break 提前跳出,优化质数判断

方案1

<script>// 开始一个计时器console.time('质数练习')for (let i = 2; i < 1000; i++) {let flag = truefor (let j = 2; j < i; j++) {if (i % j === 0) {flag = false// 进入判断说明i一定不是质数,后续检查没有执行的必要break}}if (flag) {//console.log(i)}}// 停止计时器console.timeEnd('质数练习')console.time('质数练习方式2')for (let i = 2; i < 1000; i++) {let flag = falsefor (let j = 2; j < i; j++) {if (i % j === 0) {flag = truebreak}}if (!flag) {//console.log(i)}}// 停止计时器console.timeEnd('质数练习方式2')</script>

方案2

<script>// 开始一个计时器console.time('质数练习')for (let i = 2; i < 100; i += 2) {let flag = truefor (let j = 2; j <= i ** .5; j++) {if (i % j === 0) {flag = false// 进入判断说明i一定不是质数,后续检查没有执行的必要break;}}if (flag) {//console.log(i)}}// 停止计时器console.timeEnd('质数练习')</script>

相关文章:

  • Spring的后置处理器是干什么用的?扩展点又是什么?
  • Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制
  • React集成百度【JSAPI Three】教程(001):快速入门
  • Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
  • 养生指南:解锁健康生活新方式
  • BGP综合实验
  • Nginx基础知识
  • java基础-关键字:static、单例模式
  • QPS与TPS区分及压测指标解读
  • 渗透测试核心技术:漏洞挖掘与利用
  • ai agent(智能体)开发 python高级应用8:crawl4ai 对用 LLMExtractionStrategy 和 python的 re 如何选择
  • 存储地图上的各种形状的文件格式.SHP文件介绍
  • python学习day2(未写完,明天继续补充)
  • AI大模型:技术演进、核心原理与产业解析
  • AutoMouser - 单次AI调用铸就高效自动化脚本
  • Xshell实战:远程连接VMware CentOS7虚拟机与高效运维指南——从零配置到自动化操作,解锁Xshell的核心价值
  • 湖北理元理律师事务所观察:债务服务中的“倾听者价值”
  • 系统架构设计-案例分析总结
  • 人工智能、机器学习与深度学习:全面介绍与对比分析
  • 【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行人物移动(包括配置、代码详细实现过程)
  • 人民日报评论员观察:稳企业,全力以赴纾困解难
  • 江苏省人民检察院副检察长丁海涛调任省委政法委副书记
  • 半年不到再换岗:伊春市委常委、政法委书记方春彪任伊春森工集团党委书记
  • 长三角议事厅·周报|新能源汽车产业需寻求“第二增长曲线”
  • 无人机企业从科技园区搬到乡村后,村子里变得不一样了
  • 聚焦中华文明精神标识,多校专家学者跨学科对话交流