11.18 JS基础3
- 作业回顾与修改
发现昨天做的第二题我理解错了,要把加减乘除放在select标签里,特此修改。另外两题没毛病,只有一个常识要记住:2月份在平年里是28天,闰年里是29天。平年或者闰年和年份有关,闰年的判断标准:年份能被4整除,不能被100整除,或者能被400整除。
<body>
<input type="text" id="num1" value="" placeholder="请输入第一个数字"><br/>
<select id="op">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select><br/>
<input type="text" id="num2" value="" placeholder="请输入第二个数字"><br/>
<input type="button" id="btn" value="计算">
=<input type="text" id="result" value="0" placeholder="此处显示结果"><br/>
<script>
let n=document.getElementById("btn").onclick=function(){
//1 获取文本框1的值
let num1=parseFloat(document.getElementById("num1").value);
//2 获取文本框2的值
let num2=parseFloat(document.getElementById("num2").value);
//3 获取运算符
let op=document.getElementById("op").value;
//条件判断
let sum = 0;
switch (op){
case "+":
sum = num1+num2;
break;
case "-":
sum = num1-num2;
break;
case "*":
sum = num1*num2;
break;
case "/":
if(num2==0){
alert("除数不能为0");
document.getElementById("result").value="除数不能为0";
return;
}
sum = num1/num2;
break;
}document.getElementById("result").value=sum;
}
</script>
</body>
- 循环结构
循环结构解决的是重复相同或相似的操作问题。
<script>
//for
//while
//do...while
// for(表达式1;表达式2;表达式3){
//
//循环体
// }
//表达式1先执行一次,而且只执行一次-》给变量赋值;
//表达式2是条件判断,表达式1执行完后,去执行表达式2
//true 执行 循环体 false 循环体不执行 直接跳过循环体
//当表达式为2并执行完循环体后,我们的代码去执行表达式3 ==>变量的变化 i++
//表达式3执行完之后,继续执行表达式2
for(let i=1;i<=5;i++){
console.log("i"+i);//输出i的值
}
</script>
- 小练习:随机次数(100次以下)打印一句话
<script>
//打印随机数
//不确定字数
let n=Math.floor(Math.random()*100);//包括0不包括100
console.log(n);
for(let i=0;i<=n;i++){
console.log("hello world"+i);
}
</script>
- 猴子吃桃问题
问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将第一天剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半多一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。
编写程序求猴子第一天摘了多少个桃子。
<script>
//初次想法
let n=1;//n 第10天剩一个
let p;//p 前一天
for(let i=9;i>0;i--){
p=(1+n)*2;//第9天4个 第8天10个
n=p;
}document.write(n);
//简化
let peach=1;
for(let i=9;i>=1;i--){
peach=(peach+1)*2;
}document.write("第1天共摘了"+peach+"个桃子");
</script>
分析过程:猴子吃桃子只吃了9天,第10天还没吃。这道题用的是逆向思维,从第9天到第1天,定义循环。
for(let i= 9;i>=1;i--){
//没吃之前有几个?
sum= (sum+1)*2
}//第9天 4个桃子 即 2*(1+1)
//第8天 10个桃子 即 2*(2*(1+1)+1)
下附老师的解法:
<script>
let sum = 1;//第九天吃完之后还剩1个.[第10天早上起来还没吃]
for(let i = 9;i>=1;i--){
//没吃之前有几个?
sum= (sum+1)*2
console.log("第"+i+"天没吃之前有"+sum+"个桃子")
//4 10
}
</script>
- 小球问题
有一个弹力球,从100米的高度,落地后会弹起来.每次弹起的高度是原来高度的一半.
问,第10次落地后弹起来的高度是多少?
<script>
let height=100;
let iniHeight=100;//初始高度
let sum=0;//除了开始的100米其余的弹起落下高度之和
let path=0;//总的路程
for(let i=1;i<=10;i++){
height/=2;
if(i!=10){//i=10时其实是第11次落下,因为初始高度100不可忽视
sum+=2*height;
path=sum+iniHeight;
}
}
console.log(height);
console.log(path);
//调试
// 1次 100
// 2次 100+50+50=200
// 3次 100+50+50+25+25=250
// 4次 100+50+50+25+25+12+12
</script>
自己的还有待改进。。下图是老师的解法
<script>
//原始高度
let height = 100;
//定义变量保存每次落地时经历的路程.
let sum = height;
//i表示第几次落地
for(let i = 1;i<=10;i++){
//这个sum?
console.log("第 "+i+" 次落地时候经过的距离: "+sum+" 米")
//弹起后的高度
height = height / 2;
//计算结果(将每次弹起高度+下落高度) 累加
if(i!=10){
sum = sum + 2*height;
}
}
console.log("第10次落地后弹起的高度: " + height);
console.log("第10次落地时经过的距离: " + sum);
</script>
老师的解法有明显的优越性,在for循环中输出第i次落地时经过的距离,便于验证数值。
console.log("第 "+i+" 次落地时候经过的距离: "+sum+" 米")
其实,这种题画图会更便于理解(Ps:画的丑了点,但没毛病。。)

- 循环练习3题
1. for循环实现计算 2+22+222+2222+22222的和。
难度不高,关键在于发现数字之间的规律 n*10+2 10*(n*10+2)+2 10*(10*(n*10+2)+2)+2
<script>
let num1 = 2;
let sum = num1;
// console.log(num1);
for (let i = 1; i <= 4; i++) {
num1 = num1 * 10 + 2;
// console.log(num1);
sum += num1;//累加后面四个数字
}
document.write("2+22+222+2222+22222的和为" + sum + "<br/>");
</script>
2. 判断并输出500以内既能被3整除又能被5整除的整数。
这题也不难,关键在于逻辑与的使用,还有将数字定位在1到499之间。
//循环变量从1开始到499
for (let i = 0; i < 500; i++) {
//条件判断 逻辑与
if (i % 3 == 0 && i % 5 == 0) {
//满足条件就输出结果
console.log(i);
document.write("输出500以内既能够被3整除又能够被5整除的整数为" + i + "</br>");
}
}
3. 寻找所有的水仙花数 水仙花数定义:
a、一定是三位数
b、每一位的立方,加起来正好是这个数的本身,比如153=1*1*1 + 5*5*5 + 3*3*3;
for (let i = 100; i <= 999; i++) {
//以153为栗 153%10=3 153%100=53 153/100=1.53向下取整得1 53/10=5.3向下取整得5
if ((i % 10) * (i % 10) * (i % 10) + Math.floor(i % 100 / 10) * Math.floor(i % 100 / 10) * Math.floor(i % 100 / 10) + Math.floor(i / 100) * Math.floor(i / 100) * Math.floor(i / 100)
== i){
console.log(i);
}
}
我的方法稍微笨了些。。忘了用变量存储各个数字,老师的就有用。。
<script>
//循环变量从100开始到999
for(let i =100;i<=999;i++){
//i 拆开
let g =i%10;//个位
let s=Math.floor(i/10%10);//十位
let b=Math.floor(i/100);//百位
//console.log(g+", "+s+", "+b)
if(i == g*g*g + s*s*s + b*b*b)
{
//满足条件就输出结果
console.log(i);
}
}
</script>
- 今日作业:页面输入一个5位数数字; 12345 ,我们验证一下这个数字是否为回文数
<body>
<input type="text" id="num" placeholder="请输入一个5位数数字">
<input type="button" id="btn" value="验证">
<input type="text" id="result" value="">
<script>
//字符串转数组判断
// document.getElementById("btn").onclick=function(){
// let num=document.getElementById("num").value;
// let result=document.getElementById("result").value;
// let num1=num.split("");
//// console.log(num1);
//// console.log(typeof num1);
// if(num1[0]==num1[4]&&num1[1]==num1[3]){
// console.log("您输入的是回文数");
// document.getElementById("result").value="您输入的是回文数";
// }else{
// console.log("您输入的不是回文数");
// document.getElementById("result").value="您输入的不是回文数";
// }
// }
//笨办法,用取余取整把一个个数字取出来做对比
//12345 十万位1 Math.floor(12345/10000) 万位 Math.floor(12345/1000%10)
// document.getElementById("btn").onclick=function(){
// let num=parseInt(document.getElementById("num").value);
// let result=parseInt(document.getElementById("result").value);
// let num1=Math.floor(num/10000);//1
// let num2=Math.floor(num/1000)%10;//2
// let num3=Math.floor(num/100)%10;//3
// let num4=Math.floor(num%100/10);//4
// let num5=num%10;//5
// if(num1==num5&&num2==num4){
// console.log("您输入的是回文数");
// document.getElementById("result").value="您输入的是回文数";
// }else{
// console.log("您输入的不是回文数");
// document.getElementById("result").value="您输入的不是回文数";
// }
// }
//字符串 稍微改进的方法
document.getElementById("btn").onclick = function () {
let num = document.getElementById("num").value;
if (num > 99999 || num < 10000 || isNaN(num)) {
document.getElementById("result").value = "您输入的不是五位数数字,请重输";
} else {
let result = document.getElementById("result").value;
if (num[4] == num[0] && num[1] == num[3]) {
console.log("您输入的是回文数");
document.getElementById("result").value = "您输入的是回文数";
} else {
console.log("您输入的不是回文数");
document.getElementById("result").value = "您输入的不是回文数";
}
}
}
</script>
</body>
今日感想:今天遇到的多是逻辑题,考验脑袋。。立马动手效果可能不是很好,出来的多是有瑕疵的笨办法,思考一下,画个图也许会理解更透彻些。(Ps:今天基金亏到不想说话。。医疗,说好的年底飞起呢?可能还是敲出来的代码更温暖些,起码手暖和了)
18:27:43 2021-11-18
posted on 2021-11-18 18:26 heyiyang1312 阅读(5) 评论(0) 收藏 举报
浙公网安备 33010602011771号