C语言中的分支语句¶
约 888 个字 277 行代码 预计阅读时间 6 分钟
if语句¶
基本结构¶
| C | |
|---|---|
1 2 3 4 | |
基本语法¶
当表达式为真(非0,包括小于0)时,执行if中的语句,当表达式为假(0)时,不执行if中的语句
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
上面的代码因为表达式num > num1的值为0,故不执行if中的printf()语句。
在上面的代码中如果为假,不执行if语句,代码执行完成后无任何打印,为了使逻辑更完整,引入else语句
else语句¶
作用:对if语句的补充
例如:(继上面的代码进行补充)
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
在改进的代码中,增加了else语句对if语句进行补充,使代码整体逻辑更加完整。代码中num>num1表达式为假不执行if语句,开始执行else语句中的逻辑(num <= num1),表达式为真,执行else中的printf()语句。
语句包括量¶
在if语句和else语句中,若if()后面无大括号,则if或者else只能包含紧随其后的一条语句
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
在此代码中,if()后并无{}括号,则此时只能if()只能包括紧随其后的printf("The bigger number is: %d.", num);而不能包括printf("不论是否满足num > num1,都要执行此打印语句");
if语句的嵌套¶
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
在上面的代码中,if语句只包含了一条语句,而else语句中包含了新的if…else…语句构成嵌套。上面的代码还可以简化为:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
注意,else都是与其最近的if相匹配,而不是根据缩进来看
Note
空格以及缩进只是为了代码格式化,但是编译器编译时都会忽略所有空格和缩进
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
在上面的代码中,else与if(num > 0)匹配而不是与if(num == 0)匹配(尽管在格式上与第一个if同一级)
switch语句¶
基本结构¶
| C | |
|---|---|
1 2 3 4 5 6 | |
基本语法¶
根据整形表达式不同的值,执行相应的case分支,若找不到对应的值(整型常量),就执行default语句
Note
default语句可以省略,无匹配时就不执行任何操作
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
在上面的代码中,若输入值为0,进入switch语句中,找到并执行0对应的case语句,以此类推1和2,但是若输入0、1和2以外的数值,则打印“输入的是其他数”
注意:
switch后面的表达式必须是整型表达式(包括字符类型以及计算结果为整型的运算式)case后的值,必须是整型常量表达式(不可以是变量,但是可以是字符,例如case 'a': //语句)- 在
switch中声明局部变量要在每个case下加一个大括号
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
switch中的break¶
作用:跳出每一个case语句(default后面可以不用break语句)
例如:(无case语句情况下)
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
在上面的代码中,case后均无break语句
输入0不但打印了case 0语句,而且打印了case 1、case 2语句和default语句才结束运行。输入1则执行匹配开始的语句,即case 1、case 2语句和default语句才结束运行,但是不会执行case 0语句
保留一个case语句中的break的情况下
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
此时,输入0的情况下,会打印case 0和case 1语句中的内容,遇到case 1 语句的break语句跳出switch语句。
Note
switch语句中的case语句和default语句顺序无任何要求
goto语句¶
作用:goto语句可以实现在同一个函数内跳转到设置好的标记处
例如:
| C | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
在上面的代码中,先执行printf语句,接下来遇到goto语句,标记为next,跳到并执行next标记下的printf语句,整个过程中不执行printf("my");,在多层循环中,若想一次性跳出所有循环可以用goto循环