定义:通过一些语句,控制程序的执行流程
分类:顺序结构 分支结构 循环结构
顺序结构:从上往下,依次执行,是程序的默认执行过程
//案例:比如等待串口数据寄存器为空,顺序结构,这句没执行完,后面的代码就不会执行,就阻塞了 while()
分支结构:定义:程序在执行过程中出现了岔路
if语句:
使用场景:某些代码,在满足条件的时候才执行
细节: 进行判断的结果是一个数字,非0表示条件成立,0表示条件不成立 大括号{}内只要一行代码,大括号可以省略不写
三种形式:
if
if else
if else if else
switch case语句:
与if语句的第三种格式 if else if else很相似
作用:把所有的选择一样列举出来,根据不同的条件任选其一
注意点: switch括号里面的值和case后面的值只能是整数与字符(本质整数) default不写的话,所有都不匹配就会继续执行下面的代码
case穿透: 方向只会往下穿 switch语句只有遇到break,或者把switch里面的代码全部执行完才会结束
if与switch语句的区别:
if 语句(条件分支): 本质:处理布尔逻辑(条件判断)。 括号内:填的是一个条件表达式,可以通过关系运算符( >, <, == 等)和逻辑运算符( &&, ||, ! 等)组合出非常复杂的逻辑判断。 灵活性:可以处理各种区间、组合条件(例如:if (x > 0 && x < 10))。
switch 语句(离散值匹配): 本质:处理离散的等值匹配。 括号内:填的是一个具体的整数/字符值。 工作方式:拿着这个值,依次去和各个 case 后面写好的常量进行“等于(==)”的直接比对。 局限性:无法直接处理范围区间(比如你想写 case > 5 是不行的,必须写一长串 case 6: case 7: ...)。
循环结构:类型:for while do...while
for循环与while循环执行流程:第一次循环:先执行初始化语句 -> 进行条件判断语句的判断 -> 执行循环体语句 -> 执行条件控制语句 后N次循环:进行条件判断语句的判断 -> 执行循环体语句 -> 执行条件控制语句
for循环与while循环的选择:知道循环的次数选for循环 知道循环的结束条件选while循环
while循环的格式:初始化语句 while(条件判断语句) { 循环体语句 条件控制语句 }
do while循环的执行流程:
第一次循环:先执行初始化语句,然后直接执行循环体语句,然后执行条件控制语句,最后执行条件判断语句; 后N次循环:执行循环体语句,执行条件控制语句,执行条件判断语句
-->do while至少执行一次
for循环、while循环、do while循环必须包含的部分:
for循环:俩个;;
while循环:条件判断语句
do while循环:while内的条件判断语句
无限循环:
for( ; ; ) { //循环体语句 } while(1) { //循环体语句 } do { //循环体语句 }while(1);跳转控制语句:
break 不能单独书写,只能写在switch当中,或者循环中,表示结束,跳出的意思
//与if的配合 for(int i = 0; i < 10; i++) { if(i % 3 == 0 && i % 5 == 0) { printf("%d", i); break; } }continue 不能单独书写,只能写在循环中,表示结束本次循环,继续下次循环
//与if的配合 for(int i = 1; i <= 5 ; i++) { if (i == 3) { continue; } printf("当前正在吃第%d个包子", i); }循环嵌套的跳出问题:
break:只能跳出单层循环
goto关键字的用法
可用在任何地方
定义标号
// 示例(以C语言为例) #include <stdio.h> int main() { int i = 0; // 定义一个标号叫 start start: printf("%d\n", i); i++; if (i < 5) { // 如果满足条件,无条件跳转到 start 标号处继续执行 goto start; } return 0; }