循环结构
while结构
代码结构
while(条件 true/false){
循环体:重复执行代码
注意:循环变量自增
}
结构解析
判断条件是否成立,如果成立,执行循环体代码,重新判断条件是否成立
如果不成立,跳出循环,执行大括号之后的代码
条件语句可以是:
- 关系表达式
- 布尔类型的值
- 其他类型的值(都会转换成布尔类型)
do-while结构
代码结构
do{
循环体:条件成立时重复执行的代码
} while(判断条件 true/false)
结构解析
先无条件执行一遍循环体,然后再判断,如果条件成立,就重复执行循环体代码
特点:先斩后奏
for循环结构
代码结构
for(语句1;语句2;语句3){
循环体:条件成立时重复执行的代码
}
语句1:声明变量,来记录循环次数,叫做循环变量
语句2:判断条件(通常是条件表达式),他使用来控制循环的结果
语句3:通常都是循环变量的自增自减
结构分析
- 执行语句1(声明循环变量)
- 执行语句2,判断条件是否成立
2. 1 如果成立 执行循环体代码
2. 2 循环变量自增,重复执行步骤2,如果不成立,就跳出循环,执行大括号外面的代码
三种循环结构的使用场景
while:适用于循环次数不固定的场景
do-while:适用于循环次数不固定的场景,但是循环体代码必须无条件执行一次
for:适用于循环次数固定的场景
三种循环的注意点
for:
- 小括号里面的语句都可以省略,但是分号不能省略,三个语句都省略了,就变成了死循环。
- 循环变量的定义可以提到循环外
- 循环变量自增自减可以写在循环体外
while:
- 循环变量、循环条件 循环变量的自增自减都必须有
- 循环变量自增自减一定不能忘
do-while:
- 循环变量、循环条件 循环变量的自增自减都必须有
- 循环变量自增自减一定不能忘
箩筐思想求和
- 声明空箩筐
- 遍历萝卜增数
- 计算萝卜总数
// 1. 打印1-100之间所有整数的和
// 1. 声明空箩筐
var sum = 0;
// 2. 遍历萝卜堆数
for(var i = 1; i <= 100; i++) {
// 3. 计算萝卜总数
sum += i;
}
console.log(sum);
// 2. 打印1-100之间所有偶数的和
// 1. 声明空箩筐
var sum = 0;
// 2. 遍历萝卜堆数
for(var i = 0; i <= 100; i++) {
// 3. 计算萝卜总数
if(i % 2 == 0) {
sum += i;
}
}
console.log(sum);
打擂思想求极值
- 声明一个空擂主
- 遍历所有的挑战者
- 依次和擂主PK
// 1. 请用户输入5个数, 将最大的那个数打印出来
// 1. 声明一个空擂主
var max = -Infinity;
// 2. 遍历挑战者
for(var i = 0; i < 5; i++) {
var num = +prompt("请输入第" + (i + 1) + "个整数");
// 3. 依次和擂主PK
if(num > max) {
max = num;
}
}
console.log(max);
循环嵌套
循环嵌套:一个循环套着一个循环
循环嵌套中,我们要找到外层循环变量和内层循环变量之间的关系
外层循环决定行,内层循环决定列
// 外层循环 决定多少行
for(var i = 0; i < 4; i++) {
// 内层循环
for(var j = 0; j < 4; j++) {
document.write("* ");
}
document.write("</br>")
}
break和continue关键字
break:
- 适用范围:只能用于switch语句和循环语句里
- 作用:switch里面 结束switch语句 ; 循环语句里面 结束当前循环语句
continue:
- 适用范围:只能用于循环语句
- 作用:结束当前这次循环,直接进行下一轮循环
- 注意:continue结束本次循环,后面的语句都不会再执行
经典例题
// 题目:判断101-200之间有多少个素数,并输出所有素数。
// 1. 遍历101 到200之间的整数
for(var i = 101; i <= 200; i++) {
// 2. 声明一个变量保存这个数字的因数个数
var num = 0;
// 3. 遍历从1到这个数之间的所有整数, 看看是否能被这个数整数
for(var j = 1; j <= i; j++) {
if(i % j == 0) {
num++;
}
}
// 4. 判断
if(num == 2) {
console.log(i);
}
}
// 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
// 1. 遍历1到1000以内的整数
for(var i = 1; i <= 1000; i++) {
// 2. 声明一个变量保存所有因数之和
var sum = 0;
// 3. 遍历1到i之间的所有整数
for(var j = 1; j < i; j++) {
if(i % j == 0) {
sum += j;
}
}
if(i == sum) {
console.log(i);
}
}
// 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
// 1. 输入两个整数
var m = +prompt("请输入一个整数");
var n = +prompt("请输入一个整数");
// 2. 使用一个变量去保存较小的那个数
var a = m > n ? n : m;
// 2. 遍历, 取模判断
for(var i = a; i > 1; i--) {
if(m % i == 0 && n % i == 0) {
var b = i;
break;
}
}
if(i == 1) {
document.write("这两个数没有最大公约数");
document.write("最小公倍数为" + (m * n));
} else {
document.write("最大公约数为" + b);
document.write("最小公倍数为" + (m * n)/b);
}