Webcourse/04-JavaScript基础/09-流程控制语句:循环结构(for和while).md

471 lines
10 KiB
JavaScript
Raw Normal View History

2018-12-29 13:14:57 +08:00
## 前言
循环语句通过循环语句可以反复的执行一段代码多次
2020-06-06 20:53:28 +08:00
## for 循环
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
### for 循环的语法
2018-12-29 13:14:57 +08:00
2018-12-29 14:23:51 +08:00
语法
```
2019-12-06 21:19:48 +08:00
for(①初始化表达式; ②条件表达式; ④更新表达式){
③语句...
}
2018-12-29 14:23:51 +08:00
```
执行流程
```
2019-12-06 21:19:48 +08:00
①执行初始化表达式初始化变量初始化表达式只会执行一次
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
②执行条件表达式判断是否执行循环
如果为true则执行循环③
如果为false终止循环
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
④执行更新表达式更新表达式执行完毕继续重复②
2018-12-29 14:23:51 +08:00
```
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
for 循环举例
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i <= 100; i++) {
2020-06-06 20:53:28 +08:00
console.log(i);
2019-12-06 21:19:48 +08:00
}
2018-12-27 14:10:05 +08:00
```
上方代码的解释
2019-12-06 21:19:48 +08:00
![](http://img.smyhvae.com/20180117_2248_2.png)
2018-12-27 14:10:05 +08:00
2020-06-06 20:53:28 +08:00
### for 循环举例
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i < 13; i = i + 4) {
2020-06-06 20:53:28 +08:00
console.log(i);
2019-12-06 21:19:48 +08:00
}
2018-12-27 14:10:05 +08:00
```
上方代码的遍历步骤
```
程序一运行将执行var i = 1;这条语句 所以i的值是1
然后程序会验证一下i < 13是否满足1<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是5
程序会会验证一下i < 13是否满足5<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是9
程序会会验证一下i < 13是否满足9<13是真所以执行一次循环体就是大括号里面的语句
执行完循环体之后会执行i=i+4这条语句所以i的值是13
程序会会验证一下i < 13是否满足13<13是假所以不执行循环体了将退出循环
最终输出输出结果为159
```
接下来做几个题目
2020-06-06 20:53:28 +08:00
**题目 1**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i < 10; i = i + 3) {
2020-06-06 20:53:28 +08:00
i = i + 1;
console.log(i);
2019-12-06 21:19:48 +08:00
}
2018-12-27 14:10:05 +08:00
```
输出结果2610
2020-06-06 20:53:28 +08:00
**题目 2**
2018-12-27 14:10:05 +08:00
```javascript
2020-06-06 20:53:28 +08:00
for (var i = 1; i <= 10; i++) {}
2019-12-06 21:19:48 +08:00
console.log(i);
2018-12-27 14:10:05 +08:00
```
输出结果11
2020-06-06 20:53:28 +08:00
**题目 3**
2018-12-27 14:10:05 +08:00
```javascript
2020-06-06 20:53:28 +08:00
for (var i = 1; i < 7; i = i + 3) {}
2019-12-06 21:19:48 +08:00
console.log(i);
2018-12-27 14:10:05 +08:00
```
输出结果7
2020-06-06 20:53:28 +08:00
**题目 4**
2018-12-27 14:10:05 +08:00
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 1; i > 0; i++) {
2020-06-06 20:53:28 +08:00
console.log(i);
2019-12-06 21:19:48 +08:00
}
2018-12-27 14:10:05 +08:00
```
死循环
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
## while 循环语句
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
### while 循环
2018-12-29 13:14:57 +08:00
语法
```javascript
while(条件表达式){
语句...
}
```
执行流程
```
while语句在执行时先对条件表达式进行求值判断
如果值为true则执行循环体
循环体执行完毕以后继续对表达式进行判断
如果为true则继续执行循环体以此类推
如果值为false则终止循环
```
**如果有必要的话我们可以使用 break 来终止循环**
2020-06-06 20:53:28 +08:00
### do...while 循环
2018-12-29 13:14:57 +08:00
语法
```javascript
2019-12-06 21:19:48 +08:00
do{
语句...
}while(条件表达式)
2018-12-29 13:14:57 +08:00
```
2019-12-06 21:19:48 +08:00
2018-12-29 13:14:57 +08:00
执行流程
```
2019-12-06 21:19:48 +08:00
do...while语句在执行时会先执行循环体
2018-12-29 13:14:57 +08:00
2019-12-06 21:19:48 +08:00
循环体执行完毕以后在对while后的条件表达式进行判断
如果结果为true则继续执行循环体执行完毕继续判断以此类推
如果结果为false则终止循环
2018-12-29 13:14:57 +08:00
```
2020-06-06 20:53:28 +08:00
### while 循环和 do...while 循环的区别
2018-12-29 13:14:57 +08:00
这两个语句的功能类似不同的是
2020-06-06 20:53:28 +08:00
- while 是先判断后执行 do...while 是先执行后判断
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
也就是说do...while 可以保证循环体至少执行一次 while 不能
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
### while 循环举例
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
**题目**假如投资的年利率为 5%试求从 1000 块增长到 5000 需要花费多少年
2018-12-29 13:14:57 +08:00
**代码实现**
```html
<!DOCTYPE html>
<html lang="">
2020-06-06 20:53:28 +08:00
<head>
<meta />
<meta />
<meta />
<title>Document</title>
</head>
<body>
<script>
/*
* 假如投资的年利率为5%试求从1000块增长到5000块需要花费多少年
*
* 1000 1000*1.05
* 1050 1050*1.05
*/
//定义一个变量,表示当前的钱数
var money = 1000;
//定义一个计数器
var count = 0;
//定义一个while循环来计算每年的钱数
while (money < 5000) {
money *= 1.05;
//使count自增
count++;
}
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
console.log(money);
console.log('一共需要' + count + '年');
</script>
</body>
2018-12-29 13:14:57 +08:00
</html>
```
打印结果
```
2019-12-06 21:19:48 +08:00
5003.18854203379
2018-12-29 13:14:57 +08:00
2019-12-06 21:19:48 +08:00
一共需要33年
2018-12-29 13:14:57 +08:00
```
2020-06-06 20:53:28 +08:00
另外你也可以自己算一下假如投资的年利率为 5% 1000 块增长到 1 万块需要花费 48
2018-12-29 13:14:57 +08:00
```
10401.269646942128
一共需要48年
```
2018-12-29 14:23:51 +08:00
## break continue
> 这个知识点非常重要
### break
2020-06-06 20:53:28 +08:00
- break 可以用来退出 switch 语句或退出**整个**循环语句循环语句包括 for 循环while 循环不包括 ifif 里不能用 break continue否则会报错
2020-06-06 20:53:28 +08:00
- break 会立即终止离它**最近**的那个循环语句
2020-06-06 20:53:28 +08:00
- 可以为循环语句创建一个 label来标识当前的循环格式label:循环语句使用 break 语句时可以在 break 后跟着一个 label这样 break 将会结束指定的循环而不是最近的
2020-06-06 20:53:28 +08:00
**举例 1**通过 break 终止循环语句
```javascript
2019-12-06 21:19:48 +08:00
for (var i = 0; i < 5; i++) {
console.log('i的值:' + i);
if (i == 2) {
2020-06-06 20:53:28 +08:00
break; // 注意,虽然在 if 里 使用了 break但这里的 break 是服务于外面的 for 循环。
}
2019-12-06 21:19:48 +08:00
}
```
2019-12-06 21:19:48 +08:00
打印结果
```
i的值:0
i的值:1
i的值:2
```
2020-06-06 20:53:28 +08:00
**举例 2**label 的使用
```javascript
2020-06-06 20:53:28 +08:00
outer: for (var i = 0; i < 5; i++) {
console.log('外层循环 i 的值:' + i);
2019-12-06 21:19:48 +08:00
for (var j = 0; j < 5; j++) {
break outer; // 直接跳出outer所在的外层循环这个outer是我自定义的label
2020-06-06 20:53:28 +08:00
console.log('内层循环 j 的值:' + j);
}
2019-12-06 21:19:48 +08:00
}
```
打印结果
```
外层循环 i 的值0
```
### continue
2020-06-06 20:53:28 +08:00
- continue 可以用来跳过**当次**循环继续下一次循环
- 同样continue 默认只会离他**最近**的循环起作用
2020-06-06 20:53:28 +08:00
- 同样如果需要跳过指定的当次循环可以使用 label 标签
2019-12-06 21:19:48 +08:00
举例
```javascript
for (var i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
console.log('i的值:' + i);
}
```
2019-12-06 21:19:48 +08:00
打印结果
2019-12-06 21:19:48 +08:00
```
i的值:1
2018-12-29 14:23:51 +08:00
2019-12-06 21:19:48 +08:00
i的值:3
i的值:5
i的值:7
i的值:9
```
## 各种练习
2018-12-29 14:23:51 +08:00
### 练习一质数相关
2018-12-29 14:23:51 +08:00
**题目**在页面中接收一个用户输入的数字并判断该数是否是质数
代码实现
```html
<!DOCTYPE html>
<html>
2020-06-06 20:53:28 +08:00
<head>
<meta charset="UTF-8" />
<title></title>
<script type="text/javascript">
/*
2018-12-29 14:23:51 +08:00
质数只能被1和它自身整除的数1不是质数也不是合数质数必须是大于1的自然数
*/
2020-06-06 20:53:28 +08:00
var num = prompt('请输入一个大于1的整数:');
2018-12-29 14:23:51 +08:00
2020-06-06 20:53:28 +08:00
//判断这个值是否合法
if (num <= 1) {
alert('该值不合法!');
2018-12-29 14:23:51 +08:00
} else {
2020-06-06 20:53:28 +08:00
//先用flag标志位来保存当前的数的状态
//默认当前num是质数
var flag = true;
//判断num是否是质数
//获取2-num之间的数
for (var i = 2; i < num; i++) {
//console.log(i);
//判断num是否能被i整除
if (num % i == 0) {
//一旦发现如果num能被i整除则说明num一定不是质数
//此时设置flag为false然后跳出 for 循环
flag = false;
break;
}
}
2018-12-29 14:23:51 +08:00
2020-06-06 20:53:28 +08:00
//如果num是质数则输出
if (flag) {
alert(num + '是质数!!!');
} else {
alert('这个不是质数');
}
}
</script>
</head>
2018-12-29 14:23:51 +08:00
2020-06-06 20:53:28 +08:00
<body></body>
2018-12-29 14:23:51 +08:00
</html>
```
### 练习二质数相关
2018-12-29 14:23:51 +08:00
2020-06-06 20:53:28 +08:00
**题目**打印 1~100 之间的所有质数
2018-12-29 14:23:51 +08:00
代码实现
```html
<!DOCTYPE html>
<html>
2020-06-06 20:53:28 +08:00
<head>
<meta charset="UTF-8" />
<title></title>
<script type="text/javascript">
/*
* 打印出1-100之间所有的质数
*/
//打印2-100之间所有的数
for (var i = 2; i <= 100; i++) {
//创建一个布尔值用来保存结果默认i是质数
var flag = true;
//判断i是否是质数
//获取到2-i之间的所有的数
for (var j = 2; j < i; j++) {
//判断i是否能被j整除
if (i % j == 0) {
//如果进入判断则证明i不是质数,修改flag值为false
flag = false;
}
2018-12-29 14:23:51 +08:00
}
2020-06-06 20:53:28 +08:00
//如果是质数则打印i的值
if (flag) {
console.log(i);
}
2018-12-29 14:23:51 +08:00
}
2020-06-06 20:53:28 +08:00
</script>
</head>
2018-12-29 14:23:51 +08:00
2020-06-06 20:53:28 +08:00
<body></body>
2018-12-29 14:23:51 +08:00
</html>
```
打印结果
![](http://img.smyhvae.com/20181229_1415.png)
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
### 练习三99 乘法表
2018-12-29 13:14:57 +08:00
代码实现
2018-12-29 13:14:57 +08:00
```html
<!DOCTYPE html>
<html>
2020-06-06 20:53:28 +08:00
<head>
<meta charset="UTF-8" />
<title></title>
<style type="text/css">
body {
width: 2000px;
}
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
span {
display: inline-block;
width: 80px;
}
</style>
<script type="text/javascript">
/*
* 1.打印99乘法表
* 1*1=1
* 1*2=2 2*2=4
* 1*3=3 2*3=6 3*3=9
* 1*4=4 2*4=8 3*4=12 4*4=16
* ....9*9=81
*
* 2.打印出1-100之间所有的质数
*/
//创建外层循环,用来控制乘法表的高度
for (var i = 1; i <= 9; i++) {
//创建一个内层循环来控制图形的宽度
for (var j = 1; j <= i; j++) {
document.write('<span>' + j + '*' + i + '=' + i * j + '</span>');
}
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
//输出一个换行
document.write('<br />');
}
</script>
</head>
2018-12-29 13:14:57 +08:00
2020-06-06 20:53:28 +08:00
<body></body>
</html>
```
2018-12-29 13:14:57 +08:00
页面效果
2018-12-29 13:14:57 +08:00
![](http://img.smyhvae.com/20181229_1410.png)
2018-12-29 13:14:57 +08:00
## 我的公众号
2018-12-29 13:14:57 +08:00
想学习<font color=#0000ff>**代码之外的技能**</font>****id`qianguyihao`
2018-12-29 13:14:57 +08:00
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
2018-12-29 13:14:57 +08:00
![](http://img.smyhvae.com/2016040102.jpg)