当前位置: 首页 > 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>
http://www.xdnf.cn/news/523243.html

相关文章:

  • 华为ODgolang后端一面面经
  • uniapp自用辅助类小记
  • Fiddler无法抓包的问题分析
  • 全新的开源监控工具CheckCle
  • 【D1,2】 贪心算法刷题
  • kotlin Android AccessibilityService 无障碍入门
  • 【电动汽车充电系统核心技术全解:从can通讯高压架构到800V超充未来】
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
  • vscode怎么关闭自动定位文件
  • Python测试单例模式
  • 互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发
  • TDengine 2025年产品路线图
  • ip与mac-数据包传输过程学习
  • 网络-MOXA设备基本操作
  • 【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明
  • 如何快速隔离被攻击的服务器以防止横向渗透
  • 服务器的基础知识
  • 【SpringBoot】从零开始全面解析SpringMVC (三)
  • UE5 GAS框架解析内部数据处理机制——服务器与客户端
  • Feature Toggle 不再乱:如何设计一个干净、安全、可控的特性开关系统?
  • DS1302实时时钟模块
  • windows网站篡改脚本编制
  • 低功耗:XILINX FPGA如何优化功耗?
  • 入职软件开发与实施工程师了后........
  • MySQL故障排查与生产环境优化
  • 仿腾讯会议——音频服务器部分
  • 图像分割(2)u-net代码实战——基于视网膜分割
  • 【Hadoop】--HA高可用搭建--3.2.2
  • 【520快乐】写一个网页送上520祝福
  • 智慧电力赋能金融机构,用数据守住“电力生命线