C语言06-C控制语句:分支和跳转
1. if语句
1.1 简单if语句
1 | if (条件) { |
1.2 if-else 结构
分支语句的作用:
if
语句用于选择是否执行某个操作,而else
用于在不满足if
条件时执行另一种操作。这种二选一的分支结构在编程中很常见。匹配规则: 在多个
if
和else
语句连用的情况下,else
语句总是与最近的if
配对。除非你使用了大括号{}
明确将if
语句块分组。
1 | if (条件) { |
1.3 多重选择 else if
- 多条件分支结构:
else if
用于处理多个条件的情况,它在if
和else
之间插入更多的条件判断。通过else if
可以根据不同的条件执行不同的代码块。
1 | if () { |
1.4 多层嵌套的 if 语句
嵌套结构:
if
语句可以嵌套在其他if
或else
语句中,用来实现复杂的条件逻辑。每个条件语句可以包含更多的条件。
2.字符处理函数(ctype.h 库)
常用函数:
isalnum()
: 判断字符是否是字母或数字。isalpha()
: 判断字符是否为字母。isdigit()
: 判断字符是否为数字。islower()
和isupper()
: 判断字符是否是小写字母或大写字母。tolower()
和toupper()
: 将字母转换为小写或大写。
3.逻辑运算符
3.1 常见逻辑运算符
&&
:与运算,两个表达式都为真时结果才为真。
||
:或运算,任意一个表达式为真时结果为真。
!
:非运算,将表达式的真假值取反。
3.2 求值顺序
逻辑运算的求值顺序是从左到右,遇到假值时立即停止求值。
1 | (6 > 2 && 3 == 3) // 结果为真 |
3.3 逻辑运算符的优先级
逻辑运算符有优先级,与算术运算符不同,&&
和||
的优先级较低,因此在复杂表达式中建议使用括号明确优先级。
3.4 ISO646 逻辑运算符的替换拼写
为了方便键盘输入,C99 标准允许使用and
、or
、not
来代替&&
、||
和!
运算符。
4.条件表达式 (三元运算符)
条件表达式: 条件表达式是 if-else
的一种简洁替代语法,用于根据条件返回不同的结果。其一般形式为:
1 | expression1 ? expression2 : expression3; |
当 expression1
为真时,返回 expression2
的值;否则返回 expression3
的值。
示例:
1 | max = (a > b) ? a : b; |
如果 a > b
为真,max
取值为 a
,否则取值为 b
。此运算符常用于简单的条件选择,能使代码更简洁。
5.continue 和 break 语句
5.1 continue 语句
continue
语句用于跳过循环中的当前迭代并开始下一次迭代。在遇到 continue
时,程序跳过循环的剩余部分,直接进入下一次循环的条件检测。
通过使用 continue
语句,程序跳过不合法的输入,继续要求用户输入新的分数。
5.2 break 语句
break
语句用于终止循环,不再执行后续的循环迭代。它会直接跳出当前循环结构,继续执行循环之后的代码。
6.swtich语句
6.1 switch 语句基础
switch
语句用于根据一个表达式的值跳转到不同的分支(case
)。每个case
都与一个值对应,程序根据表达式的值匹配相应的case
,并执行该case
下的语句。
1 | switch (expression) { |
switch
语句中的case
标签必须是常量表达式,如整数或字符值。default
是可选的,用于在没有case
匹配时执行默认语句。
6.2 break 语句在 switch 中的作用
break
语句用于在匹配的case
执行完毕后,跳出switch
语句。如果没有break
,程序会继续执行后续的case
,即“贯穿”现象。
6.3 多重标签的使用
在switch
中,一个case
标签可以对应多个值。通过列出多个case
标签,所有这些值都会执行相同的语句。
1 | switch (ch) { |
7. goto语句
7.1 goto 语句简介
goto
语句是一种跳转控制语句,能够让程序跳转到程序中标记的位置。它的语法如下:
1 | goto label; |
7.2 避免使用 goto 的原因
代码可读性问题:goto
语句会使代码的控制流变得不直观,增加理解和调试的难度。
代码维护困难:使用 goto
可能会造成跳转的混乱,使得程序的逻辑变得复杂,难以维护。
建议使用替代方法:通过更结构化的控制流,如 if-else
语句、循环、break
和 continue
等,可以避免使用 goto
。