if 语句
-
语法结构
if(表达式)
表达式是判断的核心依据。语句可以是单条指令,也可以是用 {} 包裹的复合语句,用于描述满足条件时的执行动作。 -
执行逻辑
程序先计算括号内表达式的值。
若结果为真(非0),则立即执行紧跟着的语句。
若结果为假(0),则直接跳过该分支,继续执行if结构之后的代码。 -
else
if 后接判断表达式,若结果为真,执行紧跟着的语句块;若为假,则跳至 else 分支执行。
这是分支语句的最基础结构,就如同生活中的“如果~否则”。
注意:if ~ else 默认仅能控制紧随其后的一条语句。
如果希望在满足条件时执行多条命令,必须使用 {} 将这些语句包裹起来,形成复合语句。
-
嵌套if
将一个if语句嵌套在 else / if 块中,形成“层层递进”的条件筛选结构。
常用于处理互斥事件,例如数值正负0判断、成绩等级划分。
逻辑清晰且高效,可以确保判断的互斥性与唯一性。 -
悬空else陷阱
else 遵循就近匹配原则,它总是绑定到离它最近且未被匹配的if上,而非根据代码的缩进对齐。
这是初学者最容易产生逻辑误判的地方。
解决方案:无论代码块是否只有一行,都强制添加 {} 来明确代码块的边界,彻底消除悬空else带来的二义性。
关系操作符
-
特点
C语言提供6种基本的关系操作符:> < >= <= == !=。
用于比较两个值的大小或相等关系。
关系表达式的运算结果是一个布尔值,在C语言中以整数的形式出现。这些运算符是构建条件判断的基础。 -
易错点
注意区分赋值 = 与等于 ==。
如果在条件判断中写成 if(x=3),这将会把3赋值给x,且表达式永远为真。
建议养成常量在左的习惯,若手误写成赋值,程序会直接报错。
C语言不支持 if(i<j<k)这种数学式连续比较写法。
它会被解析成 (i<j)<k。
举例:if(3<4<5),3跟4先比较,结果为真输出1,再拿1跟5比较,结果永远非0。
正确写法应该是 if(i<j && j<k)。
条件操作符 / 三目操作符
- 基础说明
格式:表达式1 ? 表达式2 : 表达式3
用于代码简化。表达式1为条件,条件为真取表达式2,条件为假取表达式3。
本质就是化简版的 if~else 语句。
仅适合简单的二选一逻辑。如果条件判断过于复杂,建议回归 if~else,避免代码可维护性下降。
逻辑操作符
-
逻辑取反 !
单目操作符,非真即假,对操作数的真假状态取反。 -
逻辑与 &&
双目操作符,全真才真。两侧表达式必须同时为真,结果才能为真。只要有任意一侧为假,整体结果即为假。 -
逻辑或 ||
双目运算符,两侧表达式只要有一个为真,结果就为真。只有当两侧同时为假时,结果才为假。 -
短路现象
C语言的逻辑操作符总是先对左侧的表达式求值,再对右边的表达式求值。
如果左边的表达式已经满足逻辑运算符的判定条件,就不再对右边的表达式求值。
switch~case 语句
-
核心规则
switch后的表达式必须是整形表达式。
case后的值必须是整形常量表达式,变量不行,浮点数也不行。
根据表达式的值,执行对应的case分支。找不到匹配的值时,执行default分支。
case和数字之间必须有空格。 -
break的作用与穿透现象
如果没有 break,代码就会继续往下执行其他case,这个现象叫做case穿透。
case只是一个入口标签,并不是分支的边界。break用来跳出整个switch。 -
default子句
当switch表达式的值不匹配任何case时,就会执行default分支。
default不是必须的,不写则什么都不做。
case和default没有固定的顺序要求,只要满足实际需求即可。通常把default放到最后,提升代码可读性。
当default放到中间时,后面如果没有break,同样会发生穿透。
while循环
- 与if语句对比
while 和 if 的语法结构几乎一样。
区别在于:if只执行一次;while会反复执行,直到条件为假。
循环体包含多条语句时,需要用 {} 括起来。
死循环警告:while(1)条件永远为真,会造成程序卡死。循环体内必须要有改变条件的语句。
- 执行流程
① 判断表达式是否为真
② 为真,执行循环体
③ 回到第一步,再次判断条件
④ 为假,跳出循环,结束
关键点:先判断,后执行。条件一开始就为假,则循环一次都不会执行。
215



被折叠的 条评论
为什么被折叠?



