无标题
C语言是结构化的程序设计语言,结构指顺序结构、选择结构、循环结构。
分支语句
if语法格式
1 | if(表达式) |

C语言中,非0为真,0为假。
1 | int num = 0; |

else
判断是与不是的情况
1 | if(表达式) |
1 |
|

分支中包含多条语句
C语言中默认 if 和 else 后只跟一条语句,想跟多条需
要使用 {} 。
1 | int age = 0; |

if 嵌套
在 if…else 语句中, else 可以与另一个 if 语句连用,构成多重判断。
1 | int num = 0; |
1 | int num = 0; |

else 的悬空问题
else 总是与最接近的 if 匹配
1 | int a = 0; |

这里 else 与 是与 if(b == 2) 匹配 所以结果是什么代码运行结果是什么都没有。
如果想要 else 与 if (a == 1) 相匹配,可以使用{}。
1 | int a = 0; |

关系操作符
C语言中用于比较的表达式成为关系表达式,使用的运算符就称为关系运算符。
主要有以下六个:
1 | > // 大于运算符 |
关系表达式通常返回的是 0 或 1。
需要注意的是关系运算符不宜连用。
1 | int num = 0; |

在上述代码中,执行逻辑是先判断 18 <= 0 返回为 0,然后再比较 0 <= 20 ,为
真,所以执行了语句。
正确写法应使用逻辑运算符,在后文中会说明。
条件操作符
也叫三目操作符,需要三个操作数,形式如下:
1 | exp1 ? exp2 :exp3 |
计算逻辑如图:

1 | int a = 0; |
逻辑操作符
逻辑操作符提供逻辑判断功能。主要如下:
1 | !:逻辑取反(改变单个表达式的真假) |
! 逻辑取反
1 | int flag = 0; |

&& 逻辑与
1 | int a = 0; |

|| 逻辑或
1 | int a = 0; |

短路
C语言逻辑运算符总是对左侧的表达式求值,再对右侧的表达式求值。
如果左侧表达式满足逻辑运算符的条件,则不再对右侧表达式求值,这种现象称
为短路。
1 | int a = 0; |

这里可以看到 b 的值还是1 ,说明发生了短路,++b 没有执行。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进
行计算的运算称为短路求值。
switch 语句
C语言还提供了 switch 来实现分支结构。
switch 语句 是一种特殊形式 if…else 语句。用于判断条件有多个结果的情况。
1 | switch (expression) { |
根据表达式 expression 表达式的值来执行不同的 case 分支。如果没找到对应值
执行 defaultt 分支。
switch 后的 expression 必须是整型表达式。
case 后的值,必须是整型表达常量。
if 语句和 switch 语句的对比
1 | int n = 0; |

1 | int n = 0; |

case 和后边的数字之间必须有空格。
case 语句的代码后加上 break ,才能跳出这个 switch 语句。 否则会出现穿透现
象。
switch 语句中的穿透现象
1 | int n = 0; |
某一个 case 后没有跟 break ,代码就会继续往下执行。直到遇到其他 case 中的
break 或 switch 语句结束。
switch 语句中的 default
当 switch 后边的 expression 中的结果与任意 case 中的值都不匹配的时候,就会
默认执行 default 后的语句。
switch 语句中 case 和 default
C语言中并没有硬性规定 case 和 default 的顺序,通常写法是将 default 放在最
后。
while 循环
语法格式
1 | while(表达式) |
执行流程如图

首先执行判断表达式,表达式值为0。循环结束,不为0则执行循环语句,语句执
行完再重复上述过程。
while 循环示例
1 | //输入一个整数,逆序打印他 |

for 循环
语法格式
1 | for(表达式1;表达式2;表达式3) |
表达式1 用于循环变量的初始化
表达式2 用于循环结束的条件判断
表达式3 用于循环变量的调整。
执行流程如图
for 循环示例
1 | // for循环打印1-10 |

do-while 循环
语法格式
1 | do |
do-while 是先进入循环体执行一次语句,再进行判断是否进行循环。
执行流程如下:
do-while 中循环体至少执行一次。
示例如下:
1 | // do-while循环打印1-10 |

break 和 continue 语句
C语言中提供了 break 和 continue 两个关键字。
在循环中,break 的作用是永久终止该循环。
continue 是跳过本次循环位于 continue 之后的代码。
break 示例
1 | int i = 1; |

在 i 的值为 5 时,break 执行,永久终止了这个循环。
continue 举例
1 | int i = 1; |

当 i 等于 5 后,就执行 continue,直接跳过 continue后的代码,去循环的判断的
地方。因为里跳过了i = i+1,所以i一直为5,程序陷入和死循环。
goto 语句
C语言提供了 goto 语句 和 跳转标号,可以实现在同一个函数内跳转到设置好的标号处。
1 | // goto语句的使用 |

语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程。需谨慎使用。



