C 判断
C 判断
在 C 语言中,判断结构(Decision Making) 是程序流程控制的基础。它允许我们根据某些条件的真假来决定是否执行某段代码。
一、学习目标 🎯
- 掌握
if
、else if
、else
和switch-case
的使用方法。 - 理解逻辑表达式和布尔值在 C 中的表现形式。
- 能够根据实际需求选择合适的判断结构编写清晰、高效的分支逻辑。
二、核心重点 🔑
- C 语言中没有布尔类型(C23 前),0 表示假,非 0 表示真。
if-else
用于处理多个互斥条件;switch-case
更适合枚举型条件。- 注意避免“悬空 else”问题和 switch 缺少
default
或break
导致的逻辑错误。
三、详细讲解
✅ 1. if
语句 —— 最基本的判断结构
语法:
if (condition) {
// condition 为真时执行的代码
}
示例:
int score = 85;
if (score >= 60) {
printf("你通过了考试!\n");
}
⚠️ 注意事项:
- 条件表达式可以是任意返回整数类型的表达式。
- 如果只有一条语句,可省略大括号
{}
,但不推荐这样做,以免出错。
✅ 2. if-else
语句 —— 二选一分支
语法:
if (condition) {
// 条件为真时执行
} else {
// 条件为假时执行
}
示例:
int age = 17;
if (age >= 18) {
printf("你可以投票\n");
} else {
printf("你还不能投票\n");
}
✅ 3. else if
—— 多条件分支
语法:
if (condition1) {
// condition1 为真时执行
} else if (condition2) {
// condition2 为真时执行
} else {
// 所有条件都为假时执行
}
示例:成绩等级判断
int score = 88;
if (score >= 90) {
printf("A\n");
} else if (score >= 80) {
printf("B\n");
} else if (score >= 70) {
printf("C\n");
} else {
printf("D\n");
}
✅ 4. switch-case
语句 —— 枚举型判断
适用于对一个变量进行多个固定值的匹配判断。
语法:
switch (expression) {
case value1:
// 匹配 value1 时执行
break;
case value2:
// 匹配 value2 时执行
break;
...
default:
// 默认情况(可选)
}
示例:菜单选择
int choice = 2;
switch (choice) {
case 1:
printf("你选择了新建文件\n");
break;
case 2:
printf("你选择了打开文件\n");
break;
case 3:
printf("你选择了退出程序\n");
break;
default:
printf("无效的选择\n");
}
⚠️ 注意事项:
switch
只能用于整型或枚举类型(如int
,char
)。- 每个
case
后应加break
,否则会继续执行下一个case
(称为“穿透”fall-through)。default
是建议添加的,用于处理未覆盖的情况。
✅ 5. 嵌套判断结构
可以在一个判断结构中嵌套另一个判断结构。
示例:
int age = 20;
int hasLicense = 1;
if (age >= 18) {
if (hasLicense) {
printf("你可以合法驾驶\n");
} else {
printf("你需要先考驾照\n");
}
} else {
printf("你还未成年,不能驾驶\n");
}
✅ 6. 三目运算符替代简单判断
示例:
int a = 10, b = 20;
int max = (a > b) ? a : b;
printf("较大的数是:%d\n", max);
⚠️ 建议:
- 三目运算符适用于简单条件判断,不要嵌套过深影响可读性。
四、常见陷阱与避坑指南 ⚠️
陷阱 | 描述 | 解决方案 |
---|---|---|
❗悬空 else |
else 不知道该属于哪个 if |
使用大括号明确逻辑块 |
❗误用赋值操作符 = |
写成 if (x = 5) 而不是 == |
开启编译器警告 -Wall |
❗switch 缺少 break |
导致“穿透”现象 | 每个 case 都加 break ,除非有意为之 |
❗忘记写 default |
忽略未知情况 | 添加默认分支提高健壮性 |
五、拓展练习 🧩
🧩 练习题 1:判断闰年
输入一个年份,判断是否为闰年,并输出结果。
规则如下:
- 能被 4 整除但不能被 100 整除的是闰年;
- 或能被 400 整除的也是闰年。
🧩 练习题 2:模拟 ATM 取款系统
设计一个简单的 ATM 取款程序,用户输入金额后判断是否满足以下条件:
- 金额必须大于 0;
- 金额必须是 100 的倍数;
- 余额是否足够。
提示:使用 if-else
分层判断。
🧩 练习题 3:实现简易计算器
要求用户输入两个数字和一个运算符(+、-、*、/),根据运算符进行计算并输出结果。
使用 switch-case
实现。
🧩 练习题 4:判断字符类型
输入一个字符,判断它是:
- 小写字母
- 大写字母
- 数字
- 其他符号
提示:利用 ASCII 值进行比较。
六、实战建议总结
场景 | 推荐结构 |
---|---|
两种选择 | if-else |
多种等值判断 | switch-case |
多个复杂条件组合 | if-else if-else |
简单赋值判断 | 三目运算符 ?: |
控制流程嵌套 | 明确使用 {} 分隔逻辑块 |
恭喜你完成了《C 判断》这一章的学习!
你已经掌握了如何根据不同的条件让程序做出决策,这是构建任何复杂程序的基础能力之一。
✅ 下一章推荐学习内容(任选其一):
- 《C 循环结构:while、do-while、for》
- 《C 函数详解:参数传递、调用栈、递归》
- 《C 数组与字符串基础》
- 《C 数据类型与类型转换》
你想继续学哪个?我来为你定制下一章 👇