Day6 内容梳理:
目录
⭐(4)break、continnue、goto的三者区别:
Chapter 4 程序运行结构
4.0 概述
基本的3种程序运行结构:
①顺序结构:程序按顺序执行,不发生跳转
②选择结构:按是否满足条件,执行相对应的代码
③循环结构:按是否满足条件,循环多次执行对应的代码
4.1 条件判断语句
流程:开始→判断条件→条件为真→执行语句→结束
→若条件为假→结束
(1)if语句
常用形式:if,if-else,if-else if-else (PS:else{}部分均可省略)
❗注意:if相关的语句只会执行满足条件的第一个条件分支。(与没写break的switch语句不同)
以下图为例,输入的98满足所有区间的条件,但是只会输出第一个满足的分支,并结束条件语句。
补充:条件嵌套
条件语句中,只有if相关的语句可以嵌套,switch无法嵌套。
if中嵌套if,例子如下:
(2)switch语句
格式:
switch(表达式得到一个值){
case 值1:
表达式1;
break;
case 值2:
表达式2;
break;
中间省略……
default:
表达式 n;
break;
}
❗每一个case写完都得加break,否则会连续往下执行case,而非执行完一个就退出。
没加break的反面例子:
⭐(3)if和switch的比较
if语句 | switch语句 | |
条件判断的范围 | 区间(大于/小于/等于/不等于) | 单值 |
条件语句能否嵌套 | 能,if里面还能再套if | 不能 |
效率 | 慢 (因为需要从上往下逐个条件判断是否成立) | 快 (因为可通过case的值直接索引到具体分支) |
总而言之,如果是区间或多条件,建议选if语句;如果是单值且数量少,建议选switch语句。
❗补充知识点:三目运算符
格式:表达式a ? 表达式b : 表达式c
含义:表达式a若为真,则返回表达式b的值作为结果;a为假则返回c作为结果。
例子:
优点:可简化一些基础的条件判断语句,但不适合嵌套、多值选择。
4.2 循环语句
多次执行同一块代码,直至条件不满足。如果条件始终满足,则进入了死循环。
(1)while语句
while语句 | do while语句 | |
代码格式 | while(条件判断){ 表达式; } | do{ 表达式; }while(条件判断); |
区别 | 先进行条件判断, 成立则执行代码,不成立则跳出while循环 | 先执行代码, 执行完再进行条件判断 |
(2)for语句
格式:
for(定义初始值; 条件判断; 范围约束){
表达式;
}
例子:
第一个写法较常用,第二个写法只是把for中的定义初始值、范围约束放到了其他位置上。
❗注意:
①for中多变量、多条件的写法:
注意区分逗号,和分号;
逗号用于区分不同变量的取值。分号则加在for的定义初始值、条件判断、范围约束之间。
例子:
②for中嵌套循环的写法:
以九九乘法表的代码为例:
4.3 跳转语句
(1)break语句
当break出现在switch条件语句中,作用是终止某个case并跳出switch循环;
当break出现在循环语句中,作用是跳出当前的这一层循环结构,并执行后续代码。(仅跳出这一层。如果存在循环嵌套,则不影响其他层的循环语句)
(2)continue语句
如果满足条件,则跳过continue后面的代码,直接进入下一次循环。
(我个人感觉和if-else没区别,把continue之后的代码当成else里面的代码即可,毕竟if-else是一个条件分支满足的话,就不会再进入其他分支了)
(3)goto语句
是无条件跳转。可能会因为goto能来回跳转,导致修改一个模块时大概率会影响goto链接的另一模块,破坏代码结构、影响可阅读性,因此最好少用。
步骤是:先定义一个标志位(代码:goto FLAG; ),再跳转到标志位(代码:FLAG:)。前者是分号,后者是冒号。
常规例子:
❗ 非常规使用:
可用goto语句跳转到return之后,相当于程序有了多个出口,而非遇到return就结束。
⭐(4)break、continnue、goto的三者区别:
将循环比作一条流水线加工的话:
break就是不干手头的活了;
continue是跳过不合条件的零件,加工合要求的;
goto是定义一类特殊零件,直接跳转到该类零件开始加工(可能会直接窜到其他生产线)。