流程控制语句
条件判断语句
if语句 :
if(条件表达式){语句..}
语句: 条件表达式为true
则执行, 为false
则不执行, (条件表达式的返回值只有true与false)if(条件表达式){语句1}else{语句2}
: 条件表达式为true
则执行语句1, 为false
则执行语句2
小练习: 判断输入的数值,是偶数还是奇数
let num = prompt("请输入整数:")
let m = parseInt(num)
// 把取整后的值与取整前的值进行比较, 如果小于取整前的值则一定为小数,也可以对1取模看是否有余数
if(m < num || isNaN(m) ) {
alert("不能输入小数或非法数字")
}else {
if(m % 2 == 0) {
alert(`${m} 是偶数`)
}else {
alert(`${m} 是奇数`)
}
}
switch语句 :
switch(表达式) { //switch后的表达式与case后的表达式全等, 则执行case后的代码
case 表达式 :
代码...
break
case 表达式 :
代码...
break
case 表达式 :
代码...
break
default 表达式 : //default: 所有case都不满足, 执行default
代码...
break
}
switch语句执行当比较为true时, 会从当前case处开始执行后续代码, 需要加上break来打断后续代码的执行, switch语句与if语句的功能是重复的
循环语句
while 循环 :
// 初始化表达式
let a = 0;
// 条件表达式
while(a < 5) {
console.log(a);
// 循环表达式
a++;
}
小练习: 在年利率5%的情况下, 存1000元, 多少年后可以存到5000元
let a = 1000
let b = 0 //计数器: 记录循环执行了几次
while(a < 5000) {
//a = a + 50 //利息固定(单利)
a = a + a * 0.05 //一年的收益(本金加利息,复利的情况下)
b++
}
alert("需要" + b + "年") //33
while(条件表达式){循环体}, 条件表达式为true , 则循环体会一直执行
do…while 循环 :
// 初始化表达式
let a = 0;
// 条件表达式
do {
console.log(a);
// 循环表达式
a++;
}while(a < 5)
do{循环体}while(条件表达式), 先执行循环体, 在对条件表达式进行判断, 因此确保程序最少可以执行一次, (在程序执行多次的情况下, 与while循环没有区别)
for 循环 :
for(let a = 0; a < 10; a++) {
console.log(a);
}
/*for(①: let a = 0; ②: a < 10; ③: a++) {
④: 语句...
}
执行流程:
① 执行初始化状态, 初始化变量
② 执行条件表达式, 判断循环体是否执行(true执行, false终止)
③ 执行更新表达式, 对初始化变量进行修改
④ 重复② ,直到判断为false为止*/
初始化变量在循环语句中, 只会执行一次
小练习:
求100以内3的倍数, 打印个数与总和
let b = 0
let result = 0
//方法一:
// for(let a = 1; a <= 100; a++) {
// if (a % 3 === 0) {
// b++;
// result = result + a
// }
// }
//方法二
for(let i = 3; i <= 100; i += 3) {
b++
result = result + i
}
console.log(`3的倍数一共有${b}个, 总和为${result}`);
求1000以内水仙花数的个数,
(水仙花数: 一个n位数(n>=3), 如果它各个位上的数字的n次幂之和还等于这个数, 那么就是水仙花数)
//方法一:
// for(let a = 100; a<1000; a++) {
// // 获取百位数
// let bai = parseInt(a / 100);
// // 获取十位数
// let shi = parseInt((a - bai*100)/10)
// // 获取个位数
// let ge = a % 10
// if(bai ** 3 + shi ** 3 + ge ** 3 === a){
// console.log(a)
// }
// // console.log(a, ge);
// }
//方法二:
for(let a = 100; a < 1000; a++ ) {
let str = a + ""
if(str[0] ** 3 + str[1] ** 3 + str[2] ** 3 === a) {
console.log(a)
}
}
判断输入的数值是否为质数
let num = +prompt("请输入一个大于一的整数: ")
if (isNaN(num) || num < 1) {
alert("请输入大于一的整数")
} else {
let flag = true;
for (let i = 2; i < num; i++) {
if (num % i == 0) {
flag = false;
}
}
if (flag = true) {
alert(`${num}是质数`)
} else {
alert(`${num}不是质数`)
}
}
循环嵌套 :
// 外层循环控制图形高度
for(let a = 0; a < 5; a++) {
// 内层循环控制图形宽度
for(let b = 0; b < 5; b++) {
document.write("*  ")
}
document.write("<br>")
}
外层循环执行一次, 内层循环执行一个循环周期
小练习:
打印99乘法表
for(let a = 1; a <= 9 ; a++) {
for(let b = 1; b <= a; b++) {
// 外层循环执行一次, 内层循环执行一个循环周期
document.write(`${b} x ${a} = ${a * b}      `)
}
document.write("<br>")
}
打印100以内所有的质数
for(let a = 2; a < 100; a++) {
let flag = true //flag这个变量也必须进入循环, 不然为true的只有 a=3(只打印了一次a++后的值)
for(let b = 2; b < a; b++) {
if(a % b == 0) {
flag = false;
}
document.write(" ")
}
if(flag) {
document.write(a)
}
}
break与continue
break: 终止switch与循环语句, 多个循环嵌套时, 会终止最近的循环
continue: 用来跳过当次循环, 然后继续执行
优化质数练习:
//for(let a = 2; a < 100000; a++) {
//偶数一定不是质数, 因此从3开始循环, 每次执行更新 a + 2
for(let a = 3; a < 100000; a+=2) {
let flag = true //flag这个变量也必须进入循环, 不然为true的只有 a=3(只打印了一次a++后的值)
//for(let b = 2; b < a; b++) {
//对a进行开放, 缩小查找距离, (类似于二分查找)
for(let b = 2; b <= a ** .5; b++) {
if(a % b == 0) {
flag = false;
break; //进入此判断, 说明不是质数, 没必要在继续循环判断, 因此这次终止循环
}
document.write(" ")
}
if(flag) {
document.write(a)
}
}