第12讲:分支语句
1. 流程控制概述
1.1 流程控制的概念
- 通过不同的流程控制语句,控制程序的执行顺序,来达到想要的执行效果。
1.2 流程控制语句的分类
- 顺序结构
- 分支结构
- 循环结构
2. 分支结构
2.1 if语句(判断题)
2.1.1 if语句的格式1
-
定义格式和范例
//定义格式 if(关系表达式){语句体;} //范例: if(i<1){ //要执行的代码逻辑; }
-
执行顺序
- 只有关系表达式的值为true时,才执行{}中的代码逻辑。
2.1.2 if语句格式2
-
定义格式和范例
//定义格式 if(关系表达式){ //要执行的代码逻辑1; }else{ //要执行的代码逻辑2; } //范例: if(i<1){ //要执行的代码逻辑1; }else{ //要执行的代码逻辑2; }
-
执行顺序:
- else:意为否则,即如果关系表达式的值为true的话,则执行代码逻辑1。否则执行代码逻辑2。
2.1.3 if语句格式3
-
定义格式和范例:
//定义格式 if(关系表达式1){ //要执行的代码逻辑1; }else if(关系表达式2){ //要执行的代码逻辑2; }else{ //要执行的代码逻辑3; } //范例: if(i<1){ //要执行的代码逻辑1; }else if(1>10){ //要执行的代码逻辑2; }else{ //要执行的代码逻辑3; }
-
执行顺序:
- else if:意为否则继续判断。即关系表达式1不成立的话,继续判断关系表达式2的值。
2.2 switch语句(选择题)
2.2.1 定义格式和执行顺序
-
定义格式:
switch(表达式) { case 1: 语句体1; break; case 2: 语句体2; break; degault: 语句体n+1; break; }
-
执行流程
- 首先计算表达式的值。
- 将值和case后面的值进行比较。
- 有对应的值:
- 执行case下方相应的语句,在执行过程中,遇到break,就会结束。
- 无对应的值:
- 执行default里面的语句体。
- 有对应的值:
2.2.2 switch的穿透效果
- 当程序判断某个case的条件为真后,它将执行该case所带的语句块,不再对后面的case进行判断而直接执行。
- 也就是说,如果不用break将其结束,会执行其他case下的语句。此为switch语句的穿透。
3. 循环结构
3.1 循环结构的组成
- 条件初始化语句:循环开启时的状态。
- 条件判断语句:循环反复执行的条件。
- 循环语句体:循环反复执行的内容。
- 条件控制语句:循环过程中每次变化的内容,用来控制循环次数。
3.2 for循环
-
定义格式
for(初始化语句;条件判断语句;条件控制语句){ 循环体语句; }
-
执行流程:
- 首先执行初始化语句
- 执行条件判断语句
- true
- 执行循环体语句
- 执行条件控制语句
- 返回2循环,执行条件判断语句。
- false
- 结束循环
- true
3.3 while循环
-
定义格式
初始化语句; while(条件判断语句){ 循环体语句; 条件控制语句; }
-
执行流程
- 执行初始化语句
- 执行条件判断语句
- true
- 执行循环体语句
- 执行条件控制语句
- 返回2循环,执行条件判断语句。
- false
- 结束循环
- true
3.4 do…while循环
-
定义格式
初始化语句; do{ 循环体语句; 条件控制语句 } while(条件判断语句);
-
执行顺序
- 执行初始化语句
- 执行循环体语句
- 执行条件控制语句
- 执行条件判断语句
- true
- 返回2继续循环
- false
- 结束循环
- true
-
总结
- 可以发现,无论条件是否成立,do…while循环的循环体都会被至少执行一次。
3.5 三种循环的区别
- 执行顺序的不同:
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- o…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- 自增变量作用域的不同:
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问了。
- 条件控制语句所控制的自增变量,对while循环来说,不归属其语法结构中,在while循环结束后,该变量还可以继续使用。
- 死循环的格式不同:
- for(;😉{}
- while(true){}
- do{}while(true);
3.6 跳转控制语句
3.6.1 continue
- 用在循环中,基于条件控制,跳过本次循环体内容的执行,继续下一次执行
3.6.2 break
- 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前整个循环