条件语句
if语句是条件语句, 也称为选择语句. 它通常结合else一起使用, 表示如果…就…否则…
if (测试条件) {
// 语句块1
// 当测试条件为真, 则执行这里
} else {
// 语句块2
// 当测试条件为假, 则执行这里
}
案例1: 输入一个数字, 如果这个数是偶数, 则弹出对话框显示’偶数’, 否则弹出对话框显示’‘奇数’’
let a = Number(prompt('请输入一个数字'));
if (a % 2 == 0) {
alert('偶数')
} elsse {
alert('奇数')
}
案例2: 输入年龄, 判断用户是否可以申领驾照. 申领驾照的条件是年龄为18到70岁
let age = Number(prompt('请输入年龄'));
if (age >= 18 && age <= 70){
alert('可以考取驾照')
} else {
alert('年龄不符合要求')
}
在if语句中else可以省略
let a = Number(prompt("请输入你喜欢的数字"));
if (a > 5) {
alert("这是我喜欢的数字!");
}
if (a % 2 == 0) {
alert("这是偶数");
}
alert("88");
单行if 语句 : 如果if语句体中只有一行语句, 可以省略大括号和换行
var a = Number (prompt('请输入一个整数'));
if(a > 5) alert('这个数字大于5');
if(a % 2 == 0) alert('这个数字是偶数');
alert('再见');
案例1:
let score = Number(prompt("请输入考试成绩"));
if (score == 100) {
alert("膜拜学霸");
} else if (score >= 95) {
alert("再接再厉");
} else if (score >= 80) {
alert("考的不错");
} else if (score >= 60) {
alert("及格啦");
} else if (score < 60) {
alert("去重读");
}
案例2: 计算BMI肥胖指数, 返回对应指数结果
let weight = Number(prompt("请输入体重"));
let height = Number(prompt("请输入身高"));
let BMI = weight / (height * height);
if (BMI > 32) {
alert("非常肥胖");
} else if (BMI > 28) {
alert("肥胖");
} else if (BMI > 24) {
alert("过胖");
} else if (BMI > 18.5) {
alert("正常");
} else {
alert("过廋");
}
案例1: 判断水仙花数
水仙花数是指: 它的每个数位的数字的立方和等于它本身
// 要求用户输入一个三位数
let n = Number(prompt("请输入一个三位数"));
// 对用户输入的数值, 进行合法性的验证
if (!isNaN(n) && n >= 100 && n <= 999) {
// 当用户输入的数字合法时
// 方法一 : 数学方法(复杂)
/* let a = Math.floor(n / 100);
let b = Math.floor(n / 10) % 10;
let c = n % 10; */
// 方法二 : 字符串方法
let n_str = n.toString();
let a = Number(n_str.charAt(0));
let b = Number(n_str.charAt(1));
let c = Number(n_str.charAt(2));
// 根据水仙花数的条件进行判断
if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) { // Math.pow(a, 3) 意为a 的 3 次方
alert("这个数是水仙花数");
} else {
alert("这个数字不是水仙花数");
}
} else {
alert("输入的数字不合法");
}
案例2: 游乐园门票计算
用户输入年龄和星期几, 弹出对话框显示门票价格,
条件 | 年龄大于等于10岁 | 年龄小于10岁 |
---|---|---|
平日 | 300 | 140 |
周末 | 500 | 210 |
// 用户输入星期几
let day = Number(prompt("请输入星期几"));
// 用户输入年龄
let age = Number(prompt("请输入年龄"));
// 思路: 使用if else嵌套逻辑, 先判断星期几, 再判断年龄, 最后输出
if (day == 0 || day == 6) {
// 在周末
if (age >= 10) {
// 判断年龄
alert("500全票");
} else {
alert("210儿童票");
}
} else {
// 不在周末
if (age >= 10) {
// 判断年龄
alert("300全票");
} else {
alert("140儿童票");
}
}
除了if语句之外, JS还提供了另外一种选择语句: switch语句
switch语句的用途: 当一个变量被分类讨论的情形
案例1:
let year = Number(prompt("请输入年份"));
// 输入一个月份, 判断该月份一共有几天
// 获取数据
let Month = Number(prompt("请输入月份"));
switch (Month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert("这个月有31天");
break;
case 4:
case 6:
case 9:
case 11:
alert("这个月有30天");
break;
case 2:
let runnian =
(year % 100 != 0 && year % 4 == 0) ||
(year % 400 == 0 && year % 100 == 0);
// 三元表达式写法: runnian ? alert('29天') : alert('28天')
switch (
runnian // switch嵌套的应用, 两个条件的场景建议用三元运算符
) {
case true:
alert("这个月有29天");
break;
case false:
alert("这个月有28天");
break;
}
break;
default:
alert("请输入正确的月份");
}
用途: 根据某个条件是否成立, 在两个不同值中选择变量的值
let age = 24;
let type = age >= 18 ? '成年人' : '未成年人';
alert(type); // 成年人
条件表达式 ? 表达式1 : 表达式2
问号前是判断的条件, 问号后面用冒号隔开两个表达式, 当条件表达式为真时调用表达式1, 为假时调用表达式2.
循环语句
作用: 简化程序.
for 的圆括号中有三个表达式:
- 表达式var i = 1; 表示定义一个"循环变量" i, 并赋值为1;
- 表达式i <= 10; 表示继续执行循环的条件, 只要这个条件为真, 则会一直执行;
- 表达式i++用来更新循环变量, 使循环变量的值越来越趋向终点
for (let i = 1; i <= 10; i++) {
console.log(i);
}
for循环步骤解析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YlQ6ZqmX-1650025592531)(C:\Users\lcm\Desktop\三元表达式.png)]
- 首先会执行语句①,
- 然后判断语句②是否满足, 如果满足则进入循环体, 执行语句③, 如果不满住则退出循环
- 语句体中的语句执行完毕后, 执行语句④
- 再次判断语句②是否满足, 如果满足则进入循环体, 执行语句③, 如果不满足则退出循环
根据for循环执行机理, 必须要会准确遍历for循环
练习1:
for (let i =2; i < 12; i += 3) {
i += 4;
console.log(i) //输出结果: 6
} // 13
练习2:
for (var i = 1; i < 10; i++) {}
console.log(i); // 输出在循环体外, 打印结果为10
练习3:
for (var i = 10; i < 4; i++) {
console.log(i); // 没有输出结果, 原因是i在第二步就没有满足条件,在循环体内不做输出
}
练习4:
// 使用for循环语句在控制台逐行输出18, 14, 10, 6, 2, -2, -6
for (let i = 18; i >= -6; i -= 4) {
console.log(i);
}
练习5:
// 使用for循环语句在控制台逐行输出0, 0.2, 0.4, 0.6, 0.8, 1
for (let i = 0; i <= 1; i += 0.2) {
console.log(Number(i.toFixed(1))); //.toFixed() 方法 把浮点数值转化为保留自定义长度的字符串类型的小数.括号数字表示保留多少位小数
}
案例1: 计算1~100所有数的和
// for循环算法题
// 创建累加器sum, 初始值是0
// 遍历1到100的值, 每遍历一个数字要把这个数字加到sum中去
for (var sum = 0, i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
案例2: 1~100中哪个数字除以3余1, 除以4余2, 除以5余3? 运用穷举法
// 穷举法
// 请问1~100中哪个数字除以3余1, 除以4余2, 除以5余3?
for (i = 1; i <= 100; i++) {
if (i % 3 == 1 && i % 4 == 2 && i % 5 == 3) {
console.log(i);
}
/*
三元表达式写法
let n = i % 3 == 1 && i % 4 == 2 && i % 5 == 3;
n ? console.log(i) : "";
*/
}
while语句也是一种循环结构, 是一种"不定范围"循环, 和for循环各有不同的用武之地
几乎所有变成语言, 都同时提供for循环和while循环
while语句事先不指定循环开始, 结束的范围, 只要测试条件满足, 就一直执行循环体
while循环没有显示定义循环变量, 必须自己在while循环外先定义好循环变量, 有时甚至可以没有循环 变量
循环体内的语句, 必须睡循环测试条件趋于不成立, 否则会死循环
案例1:
// 输出1,2,3,4....100
var i = 1;
while(i<100){
i++;
console.log(i)
}
案例2:
// 累加1-100的和
let sum = 0;
let i = 1;
while (i <= 100) {
sum += i;
i++;
}
console.log(sum);
案例3:
// 寻找满足n的平方大于456789的最小整数
// 穷举法, 从1开始
let n = 1;
while (n * n <= 456789) {
n++;
}
console.log(n);
// 小兔子拔萝卜, 第一天拔1个, 第二天拔2个, 第三天拔3个, 以次类推, 请问小兔子多少天能500个萝卜拔完?
let d = 1,
sum = 0;
while (sum < 500) {
sum += d;
d++;
}
// 这里有一个"出一错误"
console.log(d - 1);
break案例
let n = 1;
while (true) {
if (n * n > 456789) {
console.log(n);
break;
}
n++;
}
continue案例
// contiinue 跳过当前迭代, 进入下一个循环
for (let i = 0; i < 5; i++) {
if (i == 2 || i == 3) {
//表示跳过2和3
continue;
}
console.log(i); //输出结果是0, 1, 4
}
案例1
// do while 循环是后判断的循环形式, 能至少执行一次循环体
do {
console.log("★");
} while (false);
// 输出1, 2, 3.....100
let n = 1;
do {
console.log(n);
n++;
} while (n <= 100);
案例2
得到[a, b]区间的整数, 注b>a
公式:
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);
// 只要出循环, 就保证dx和dy不都是0
console.log(dx, dy);
猜数字案例, 猜到正确数字退出循环
// 随机一个数字, 2~99之间
let answer = parseInt(Math.random() * 98) + 2;
let min = 1,
max = 100;
// 不断重复执行, 需要使用死循环
while (true) {
// 询问用户猜测的数字
let n = Number(prompt("请猜测数字" + min + "~" + max));
// 判断用户输入的数字和answer的关系
if (n > answer) {
alert("你输入的数字太大了");
max = n;
} else if (n < answer) {
alert("你输入的数字太小了");
min = n;
} else {
alert("猜对了!");
break;
}
}
console.log(dx, dy);
初识算法
什么是算法
累加器和类乘器
// 由用户输入数字n, 计算3/2 +4/3 + 5/4 + ...... +(n+1)/n的结果
// 用户输入输在n
let n = Number(prompt("请输入数字n"));
// 累加器
let sum = 0;
// 遍历分母就可以了, 因为分子就是i分母就是
for (let i = 2; i <= n; i++) {
sum += (i + 1) / i;
}
alert(sum.toFixed(2));
// 计算阶乘
// 请用户输入数字n
let n = Number(prompt("请输入数字"));
// 类乘器, 一定注意, 累乘器要从1开始, 因为如果从0开始, 0乘以任何数都为0
let result = 1;
// 倒着遍历, 计算阶乘
for (var i = n; i >= 1; i--) {
result *= i;
}
alert(result);
// 穷举法
// 寻找1~100当中的既能被3整除, 也能被5整除的数字
for (let i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0) {
console.log(i);
}
}
// 寻找约数
// 让用户输入数字n
let n = Number(prompt("请输入数字"));
// 穷举法
for (let i = 1; i <= n; i++) {
if (n % i == 0) {
console.log(i);
}
}
// 寻找水仙花数
for (let i = 100; i < 1000; i++) {
// 水仙花数要拆数位
// a, b, c分别表示百位, 十位, 个位
let i_str = i.toString();
let a = i_str.charAt(0);
let b = i_str.charAt(1);
let c = i_str.charAt(2);
if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == i) {
console.log(i);
}
}
// 循环嵌套
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
console.log(i, j);
}
}
// 寻找100以内的质数
// 穷举法
outer: for (let i = 2; i <= 100; i++) {
// 内层循环开始从2开始尝试除i, 如果能够整除, 说明它不是质数, 就可以筛选下一个数字了
for (let j = 2; j < i; j++) {
if (i % j == 0) {
continue outer; // 给外层循环命名, 并调用
}
}
console.log(i);
}