前言
什么是流程控制?流程控制就是程序在执行过程中,通过特定条件控制程序的执行次序。
主要有以下三种程序结构:
顺序结构:从上往下,(等式)从右到左 (如果右边是表达式 (左到右))
分支结构:控制代码何时(根据条件)执行,是否执行。
循环结构:控制代码执行(根据条件)多少次。
具体过程可参考下面图片
提示:以下是本篇文章正文内容,下面案例可供参考(以下案例均在VSCode上编写)
一、顺序结构
顺序结构,就是程序按照语句所出现的先后顺序依次执行,具体表现为从上往下,(等式)从右到左 (如果右边是表达式 (左到右))
比如你在VSCode中输入以下代码:
document.write("程序开始执行...<br/>");
document.write("程序正在执行中...<br/>");
document.write("程序执行完毕...<br/>");
实现样式为:
二、分支结构--if
1.单if 条件判断: 单分支
语法: if (条件表达式) { 代码块; }
执行过程: 如果 if后面括号里的条件为true,则执行大括号中的代码块。否则不执行。
注意: 在这个条件代码块后,不能乱加";",加了之后表示这一行代码运行结束,然后进行下一行,会直接执行大括号中代码
<script type="text/javascript">
//if单分支: 只有一种选择,满足条件执行,不满足则不执行
//输入成绩
var score = Number(prompt("请输入小明的成绩:",""));
//如果分数大于等于90则奖励一辆电动车
if(score>=90){
document.write("奖励一辆电动车<br/>");
document.write("请小明吃大餐<br/>");
}
2.if else 判断: 双分支
双分支:两者必选其一
语法:
//输入分数
var score = Number(prompt("请问小明你考了多少分?",""));
// if双分支判断:分数大于等于90奖励电动车,否则,抽鞭子
if(score>=90){
alert("奖励一辆电动车");
}else{
alert("抽鞭子");
}
if(条件表达式){
代码块1;
}else{
代码块2;
}
执行流程:
1.如果if后面条件表达式成立,则执行代码块1
2.如果if后面条件表达式不成立,则执行代码块2
注意: else 不能加条件
//输入分数
var score = Number(prompt("请问小明你考了多少分?",""));
// if双分支判断:分数大于等于90奖励电动车,否则,抽鞭子
if(score>=90){
alert("奖励一辆电动车");
}else{
alert("抽鞭子");
}
3 多重if 判断
语法
if(条件表达式1){
代码块1;
}else if(条件表达式2){
代码块2;
}else if(条件表达式3){
代码块3;
}
.... // 省略部分条件
else{ // else可以省略
代码块n;
}
执行流程:
- 代码自上而下执行,如果条件表达式1成立,则执行代码块1, 代码块1执行之后,其它分支不再执行(各个分支具有互斥性)。
- 如果条件表达式1不成立,则判断条件表达式2是否成立,如果成立,则执行代码块2
- 如果条件表达式2不能成立,则判断条件表达式3是否成立,如果成立,则执行代码块3
- 如果条件表达式3不能成立,则依次判断后续条件。
- 如果所有的条件都不成立,则执行else中的代码块。
- 注意:else是可以省略的,代表没有一个默认选择
<script type="text/javascript">
var name=prompt("请输入你的名字:");
var scole=Number(prompt("请输入你的成绩:"));
if(scole>=100||scole<=0){
document.write("请输入正确的成绩")
}
else if(scole>=90){
document.write("优秀")
}
else if(scole>=80){
document.write("良好")
}
else if(scole>=60){
document.write("及格")
}
else
document.write("不及格")
</script>
4 if嵌套
语法:if(条件表达式1){ 代码块1; }else{ if(条件表达式3){ 代码块3;}} else{ }
<script type="text/javascript">
var score=Number(prompt("请输入你的分数:"));
if(score>=100||score<=0){
document.write("请输入正确的成绩")
}
else{
if(score>=90){
document.write("优秀")}
else{
if(score>=80){
document.write("良好")
}
else{
if(score>=60){
document.write("及格")
}
else document.write("不及格")
}
}
}
</script>
小结:
if分支的条件都是针对一定范围的判断
4.分支结构 switch - case
switch和if的区别:switch: 用于等值判断 if : 用于范围判断
switch语法
switch(变量/数据){
case 数据1:
代码块1;
break;
case 数据2:
代码块2;
break;
case 数据3:
代码块3;
break;
default:
默认代码块;
break;
}
执行流程:
- 根据switch后面括号中的数据,与下面case对应的值进行一一对比。
- 满足某一个case分支,则执行对应的代码块
- 如果上面的分支都不满足,则执行default后面的代码块
- 其中break(结束语句执行)表示整个switch语句结束,如果某个分支没有break,则代码会继续向下执行,直到遇到break或者所有语句执行完成,switch语句才会结束。
- default语句可以省略。位置可以任意防治。
<script type="text/javascript">
//令狐冲参加武林大会,师傅根据其取得成绩来采取措施
var mc=Number(prompt("请输入令狐冲武林大会比武名次:"));
switch(mc){
// 针对某个变量值,判断它符合那种情况
case 1:
document.write("成为武林盟主,迎娶小师妹");
break;
case 2:
document.write("师傅满意,成为武当派掌门");
break;
case 3:
document.write("师傅略微不满,增加练功时间");
break;
default:
document.write("师傅很失望,逐出师门");
break;
}
类似的例子还有:点餐
<script type="text/javascript">
var n=Number(prompt("请输入今天星期几:"));
switch(n){
case 1:
case 2:
//相同结果的分支可合并
document.write("今天吃米饭");
break;
case 3:
case 4:
document.write("今天吃面条");
break;
case 5:
case 6:
document.write("今天吃饺子");
break;
case 7:
document.write("今天减肥");
break;
default:
document.write("请输入正确数字")
}
</script>
使用switch case完成分数的等级判断:
<script type="text/javascript">
var n=parseInt(prompt("请输入你的考试成绩")/10);
switch(n){
case 1:
case 2:
case 3:
case 4:
case 5:
document.write("差");
break;
case 6:
case 7:
document.write("中");
break;
case 8:
document.write("良");
break;
case 9:
document.write("优");
break;
}
</script>
switch case语句在执行语句后要加break,不然会形成语句穿透,即如果某个分支没有break,则代码会继续向下执行,直到遇到break或者所有语句执行完成,switch语句才会结束。
如果上面的例子中,没有break,会从合适的case值后,执行所有语句,但我们也可以用switch穿透来在一些特定条件下执行任务,如
//根据日期,判断这个日期是这一年的第几天。
<script type="text/javascript">
var year=Number(prompt("输入年份:"))
var mon=Number(prompt("请输入月份:"));
var day=Number(prompt("请输入日期:"));
var n=0;
switch(mon){
case 12:n=n+30;
case 11:n=n+31;
case 10:n=n+30;
case 9:n=n+31;
case 8:n=n+31;
case 7:n=n+30;
case 6:n=n+31;
case 5:n=n+30;
case 4:n=n+31;
case 3:
if(year%4 ==0&&!year%100== 0 || year%400==0){n=n+29;}
else{n=n+28;}
case 2:n=n+31;
case 1:n=day+n;
}
document.write(year+"年"+mon+"月"+day+"日是"+year+"年的第"+n+"天。")
</script>