1 概念
流程控制就是来控制代码按照一定结构顺序来执行
主要有3种结构
- 顺序
- 条件
- 循环
程序的流程图, 可以通过使用processon在线编辑: ProcessOn
2 顺序
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
3 条件
根据不同的条件,执行不同的路径代码(执行代码多选一的过程) 从而得到不同的结果
1) if语句
语法
// 条件成立执行代码,否则什么也不做
if (条件表达式) {
// 条件成立执行的代码语句
}
// 条件成立 执行 if 里面代码,否则执行else 里面的代码
if (条件表达式) {
// [如果] 条件成立执行的代码
} else {
// [否则] 执行的代码
}
示例
var age = prompt(‘请输入您的年龄:’);
if (age >= 18) {
alert(‘已成年’);
} else {
alert(‘未成年’);
}
if:
<script>/* 语法if(表达式){语句体}表达式成立执行语句体,不成立就算了*//* 请输入李凯钱包里的钱,有没有100块,有的话,中午请吃饭,没有就算了 */var money = prompt('请输入李凯钱包里的钱')//判断if(money >= 100){alert('中午请吃饭')}</script></body>
if else:
<script>/* 语法if(表达式){语句体1}else{语句体2}表达式成立执行语句体1,不成立执行语句体2*//* 请输入李凯钱包里的钱,有没有100块,有的话,中午请吃饭,没有放学别走 */var money = prompt('请输入李凯钱包里的钱')//判断if(money >= 100){alert('中午请吃饭')}else{alert('放学别走')}</script>
if else if:
<script>/* 语法if(表达式2){语句体1}else if(表达2){语句体2}else if(表达3){语句体3}.....else{最终语句体}表达式1成立执行语句体1,如果1不成立,再表达式2,成立执行语句体2 ..... 最后都不成立 执行else*//* 假设李凯今天带了1000元,那么完整的敲诈过程先问他有没有500块 请吃大餐400 中餐300 快餐200 小餐100 泡面<100 放学别走*/var money = prompt('请输入李凯钱包里的钱')//判断if(money >= 500){alert('吃个大餐')}else if(money >= 400){alert('吃个中餐')}else if(money >= 300){alert('吃个快餐')}else if(money >= 200){alert('吃个小餐')}else if(money >= 100){alert('吃个泡面')}else{alert('放学别走')}/* 只会执行满足条件的那个语句体,其他的即使满足也不会执行 */</script>
2) switch语句
switch 语句也是多分支语句,它用于基于不同的条件来执行不同的代码
当要针对变量设置一系列的特定值的选项时,就可以使用 switch
if主要用于范围的判断,swith主要用于等值
switch( 表达式 ){case value1:// 表达式 等于 value1 时要执行的代码break;case value2:// 表达式 等于 value2 时要执行的代码break;default:// 表达式 不等于任何一个 value 时要执行的代码}
<script>/*switch( 表达式 ){case value1:// 表达式 等于 value1 时要执行的代码break;case value2:// 表达式 等于 value2 时要执行的代码break;default:// 表达式 不等于任何一个 value 时要执行的代码}*//* 判断一个数是奇数还是偶数 */var num = prompt('请输入一个整数')//判断switch(num%2){case 1:alert('奇数')breakcase 0:alert('偶数')breakdefault:alert('你输入的不是一个整数')break}</script>
switch穿透
case value# 后不用break断开, 则会一直执行代码, 直到有break时为止.可以发挥穿透的作用, 减少一定量的代码<br />如: "四季"的运用
<script>/*需求:从弹框中输入月份,弹出对应的季节 12 1 2 冬季 3 4 5 春节*/var num = prompt('请输入一个月份')//判断switch(num){case '12':case '1':case '2':alert('冬季')breakcase '3':case '4':case '5':alert('春季')breakcase '6':case '7':case '8':alert('夏季')breakcase '9':case '10':case '11':alert('秋季')breakdefault:alert('你输入的月数有误')break}</script>
4 循环
重复多次执行有规律的代码, 可以使用循环来表示, 通过一个变量可以记录第几次循环, 已经循环的总次数
1) for循环
一般语法
for(初始化变量; 条件表达式; 操作表达式 ){//循环体}
<script>/*重复的代码比较多,不简洁技术含量低,容易被歧视不利于统计次数,不利于修改代码使用循环解决for(初始化语句;条件判断语句;循环增量语句){循环体语句;}*/for(var i = 0;i < 66;i++){console.log("班主任666");}</script>
示例
// 基本写法for(var i = 1; i <= 10; i++){console.log('媳妇我错了~')}// 用户输入次数var num = prompt('请输入次数:')for (var i = 1 ; i <= num; i++) {console.log('媳妇我错了~')}
示例
累加求和
var sum = 0for(var i=1; i<=10; i++) {sum += i}console.log(sum)
练习
提示用户输入两个数, 计算累加求和
var num1 = parseInt(prompt('请输入第一个数'))var num2 = parseInt(prompt('请输入第二数'))var sum = 0for (var i = num1; i <= num2; i++) {sum += i}alert('从' + num1 + '到' + num2 + '的和是: ' + sum)
双重循环
在for循环中, 可以使用if和for循环
<script>/*☆☆☆☆☆☆☆☆☆*//*方式一:console.log('☆☆☆\n☆☆☆\n☆☆☆\n');*///方式二 循环打印3次 ☆☆☆\n/*//这种,控制台会自动折叠,没有达到期望的效果for(var i = 0 ;i < 3;i++){console.log('☆☆☆\n');}*//*var str = ''for(var i = 0 ;i < 3;i++){str += '☆☆☆\n';}console.log(str);*///方式三:把里面的☆☆☆\n的也用循环实现var str = ''for(var i = 0 ;i <8;i++){ //外层控制行数for(var j = 0;j < 2;j++){ //内层控制列数str += '☆'}str += '\n';}console.log(str);/* 外层循环一次,内层要循环所有次 */</script>
<script>/*求 1-10 中奇数和 偶数的和*/var sum1 = 0 //奇数var sum2 = 0 //偶数for(var i = 1;i <= 10;i++){if(i%2 == 0){sum2+=i}else{sum1 += i}}console.log(sum1);console.log(sum2);</script>
示例
分别求1~100的奇数和, 偶数和
var even = 0;var odd = 0;for (var i = 1; i <= 100; i++) {if (i % 2 == 0) {even = even + i;} else {odd = odd + i;}}console.log('1~100 之间所有的偶数和是' + even);console.log('1~100 之间所有的奇数和是' + odd);
示例
打印3行3列的星星
var star = '';for (var j = 1; j <= 3; j++) {for (var i = 1; i <= 3; i++) {star += '☆'}// 每次满 3个星星 就 加一次换行star += '\n'}console.log(star);
练习
打印n行m列的星星
// 打印n行m列的星星var rows = prompt('请您输入行数:');var cols = prompt('请您输入列数:');var str = '';for (var i = 1; i <= rows; i++) {for (var j = 1; j <= cols; j++) {str = str + '★';}str += '\n';}console.log(str);
示例
打印9*9乘法表
var str = '';for (var i = 1; i <= 9; i++) { // 外层循环控制行数for (var j = 1; j <= i; j++) { // 里层循环控制每一行的个数 j <= istr += j + '×' + i + '=' + i * j + '\t';}str += '\n';}console.log(str);
2) while循环
while 基础语法
while (条件表达式) {// 当...条件满足时, 一直执行循环体// 循环体代码}
while基础格式:
<script>/* 最基础的格式while (条件表达式) {// 当...条件满足时, 一直执行循环体// 循环体代码}写一个最简单的死循环 浏览器控制台进不去,因为一直在循环打印*/while(true){console.log("班主任666");}</script>
while完整格式:
<script>/* 完整格式初始化语句while (条件判断语句) {循环体语句循环增量语句}打印66句666*/var i = 0while(i < 66){console.log("班主任666");i++}</script>
do…while
do {// 循环体代码 - 条件表达式为 true 时重复执行循环体代码} while(条件表达式);
当条件满足时, 执行
跟while 的区别是:
do…while不管条件是否成立会先执行一次, 都会先执行一次循环体, 再判断
<script>/*基础格式do{循环体}while(表达式)*//* 完整格式初始化语句do{循环体语句循环增量语句}while (条件判断语句)打印66句666*//* 跟while循环的区别dowhile不管条件是否成立,都会执行一次循环体*/var i = 0do{console.log("班主任666");i++}while(i < 66)</script>
示例 :
<script>/* 反复循环,你爱我吗?1/0 只要回答的不是1,就一直问,直到回答的是1为止分析:循环次数不确定使用while循环循环体:一问一答:可以使用prompt实现循环条件:当回答不是1的时候步骤1,先把循环的架子搭起来2,写循环体3,更改循环条件*/var b = '0' //把结果提出来.并赋默认值0while(b != '1'){//一问一答b = prompt('你爱我吗?1/0')}alert('我也爱你,么么哒')</script>
3) for / while应用场景
区别
while和for
都是先判断条件,在执行循环体
do-while
不管条件是否成立,都会先执行一次循环体
应用场景
循环次数确定的话,建议使用for循环,结构简单
循环次数不确定的话,建议使用while循环
4) 跳出循环
continue: 跳出当前循环,继续下一个循环
示例
for (var i = 1; i <= 5; i++) {if (i == 3) {console.log('这个包子有虫子,扔掉');continue; // 跳出本次循环,跳出的是第3次循环}console.log('我正在吃第' + i + '个包子呢');}
<script>/*continue:跳过某次循环体内容的执行注意:只能用在循环体里面,基于条件控制需求:模拟电梯上行的过程1-11层,7层不停*/for(var i=1;i <= 11;i++){if(i == 7){continue}console.log(i + '层到了~');}</script>
break: 跳出整个循环(终止当前循环)
示例
for (var i = 1; i <= 5; i++) {if (i == 3) {console.log('发现半条虫子,再也吃不下了');break; // 直接退出整个for 循环,跳到整个for下面的语句}console.log('我正在吃第' + i + '个包子呢');}
<script>/* 反复循环,你爱我吗?1/0 只要回答的不是1,就一直问,直到回答的是1为止1,直接写一个死循环2,使用break跳出循环*/while(true){//一问一答var b = prompt('你爱我吗?0/1')//跳出循环if(b == '1'){break}}alert('我也爱你.么么哒!')</script>
