条件判断是程序做出决策的基础,它让程序能够根据不同的情况执行不同的代码。东巴文(db-w.cn) 将带你深入理解C语言的条件判断,掌握程序决策的核心技能。
💡 东巴文观点:条件判断是程序的智慧,通过条件判断,程序可以像人一样做出选择。
条件判断是根据条件的真假来决定程序执行路径的结构。条件判断的结果是一个布尔值(真或假),在C语言中用整数表示(非0为真,0为假)。
东巴文条件判断流程图:
开始
↓
条件判断
↓
┌─────┐
│ 真 │ → 执行代码块1
└─────┘
↓
┌─────┐
│ 假 │ → 执行代码块2
└─────┘
↓
结束
东巴文语法:
if (条件表达式) {
// 条件为真时执行的代码
}
东巴文说明:
#include <stdio.h>
int main() {
int age;
printf("请输入年龄:");
scanf("%d", &age);
if (age >= 18) {
printf("您已成年!\n");
}
return 0;
}
东巴文条件表达式表:
| 表达式 | 说明 | 示例 |
|---|---|---|
| 关系表达式 | 比较两个值 | a > b |
| 逻辑表达式 | 组合多个条件 | a > 0 && b > 0 |
| 算术表达式 | 非零为真 | a + b |
| 赋值表达式 | 赋值后的值 | a = 5 |
#include <stdio.h>
int main() {
int a = 5, b = 3;
// 关系表达式
if (a > b) {
printf("a > b\n");
}
// 逻辑表达式
if (a > 0 && b > 0) {
printf("a和b都大于0\n");
}
// 算术表达式
if (a + b) {
printf("a + b = %d (非零)\n", a + b);
}
return 0;
}
东巴文语法:
if (条件表达式) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数\n", num);
} else {
printf("%d 是奇数\n", num);
}
return 0;
}
#include <stdio.h>
int main() {
// 判断正负
int num = -5;
if (num >= 0) {
printf("%d 是非负数\n", num);
} else {
printf("%d 是负数\n", num);
}
// 判断及格
int score = 75;
if (score >= 60) {
printf("成绩:%d, 及格!\n", score);
} else {
printf("成绩:%d, 不及格!\n", score);
}
// 判断大小
int a = 10, b = 5;
if (a > b) {
printf("a(%d) > b(%d)\n", a, b);
} else {
printf("a(%d) <= b(%d)\n", a, b);
}
return 0;
}
东巴文语法:
if (条件表达式1) {
// 条件1为真时执行
} else if (条件表达式2) {
// 条件2为真时执行
} else if (条件表达式3) {
// 条件3为真时执行
} else {
// 所有条件都为假时执行
}
#include <stdio.h>
int main() {
int score;
printf("请输入成绩(0-100):");
scanf("%d", &score);
if (score >= 90 && score <= 100) {
printf("优秀!\n");
} else if (score >= 80 && score < 90) {
printf("良好!\n");
} else if (score >= 70 && score < 80) {
printf("中等!\n");
} else if (score >= 60 && score < 70) {
printf("及格!\n");
} else if (score >= 0 && score < 60) {
printf("不及格!\n");
} else {
printf("成绩无效!\n");
}
return 0;
}
东巴文执行流程图:
开始
↓
条件1? ─── 真 ──→ 执行代码块1 ──→ 结束
↓ 假
条件2? ─── 真 ──→ 执行代码块2 ──→ 结束
↓ 假
条件3? ─── 真 ──→ 执行代码块3 ──→ 结束
↓ 假
执行else代码块 ──→ 结束
东巴文语法:
switch (表达式) {
case 常量1:
// 代码块1
break;
case 常量2:
// 代码块2
break;
// ...
default:
// 默认代码块
break;
}
东巴文说明:
#include <stdio.h>
int main() {
int day;
printf("请输入星期几(1-7):");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入错误!\n");
break;
}
return 0;
}
#include <stdio.h>
int main() {
char grade;
printf("请输入等级(A-E):");
scanf(" %c", &grade);
switch (grade) {
case 'A':
case 'a':
printf("优秀!\n");
break;
case 'B':
case 'b':
printf("良好!\n");
break;
case 'C':
case 'c':
printf("中等!\n");
break;
case 'D':
case 'd':
printf("及格!\n");
break;
case 'E':
case 'e':
printf("不及格!\n");
break;
default:
printf("输入错误!\n");
break;
}
return 0;
}
东巴文说明:利用 case 穿透特性,可以让多个 case 执行相同的代码。
东巴文对比表:
| 特性 | switch | if-else | 东巴文说明 |
|---|---|---|---|
| 条件类型 | 整数、字符 | 任意表达式 | switch 限制更多 |
| 判断方式 | 精确匹配 | 范围判断 | if-else 更灵活 |
| 执行效率 | 高(跳转表) | 低(顺序判断) | switch 效率更高 |
| 可读性 | 好 | 一般 | switch 更清晰 |
| 适用场景 | 多个离散值 | 复杂条件 | 根据情况选择 |
#include <stdio.h>
int main() {
int age;
char gender;
printf("请输入年龄:");
scanf("%d", &age);
printf("请输入性别(M/F):");
scanf(" %c", &gender);
if (age >= 18) {
if (gender == 'M' || gender == 'm') {
printf("成年男性\n");
} else if (gender == 'F' || gender == 'f') {
printf("成年女性\n");
} else {
printf("性别输入错误\n");
}
} else {
printf("未成年\n");
}
return 0;
}
#include <stdio.h>
int main() {
int year, month;
printf("请输入年份:");
scanf("%d", &year);
printf("请输入月份:");
scanf("%d", &month);
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
printf("%d年%d月有31天\n", year, month);
break;
case 4: case 6: case 9: case 11:
printf("%d年%d月有30天\n", year, month);
break;
case 2:
// 判断闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("%d年%d月有29天(闰年)\n", year, month);
} else {
printf("%d年%d月有28天\n", year, month);
}
break;
default:
printf("月份输入错误!\n");
break;
}
return 0;
}
东巴文语法:
条件 ? 表达式1 : 表达式2
东巴文说明:
#include <stdio.h>
int main() {
int a = 10, b = 5;
// 求最大值
int max = (a > b) ? a : b;
printf("最大值:%d\n", max);
// 求绝对值
int num = -5;
int abs = (num < 0) ? -num : num;
printf("绝对值:%d\n", abs);
// 判断奇偶
int x = 7;
printf("%d 是%s\n", x, (x % 2 == 0) ? "偶数" : "奇数");
// 成绩等级
int score = 85;
printf("成绩:%d, %s\n", score,
(score >= 90) ? "优秀" :
(score >= 80) ? "良好" :
(score >= 70) ? "中等" :
(score >= 60) ? "及格" : "不及格");
return 0;
}
#include <stdio.h>
int main() {
int a = 10, b = 5;
// 使用条件运算符
int max1 = (a > b) ? a : b;
printf("最大值:%d\n", max1);
// 使用if-else
int max2;
if (a > b) {
max2 = a;
} else {
max2 = b;
}
printf("最大值:%d\n", max2);
return 0;
}
东巴文建议:条件运算符简洁,但不要过度使用,影响可读性。
东巴文逻辑运算符表:
| 运算符 | 名称 | 示例 | 结果 | 东巴文说明 |
|---|---|---|---|---|
&& |
逻辑与 | 1 && 1 |
1 | 两个都为真才为真 |
| ` | ` | 逻辑或 | `1 | |
! |
逻辑非 | !1 |
0 | 真变假,假变真 |
#include <stdio.h>
int main() {
int age = 25;
int score = 85;
// 逻辑与:两个条件都满足
if (age >= 18 && score >= 60) {
printf("成年且及格\n");
}
// 逻辑或:至少一个条件满足
if (age < 18 || score < 60) {
printf("未成年或不及格\n");
} else {
printf("成年且及格\n");
}
// 逻辑非:取反
int isStudent = 0;
if (!isStudent) {
printf("不是学生\n");
}
return 0;
}
#include <stdio.h>
int main() {
int a = 0, b = 5;
// 短路求值:如果左边为假,右边不执行
if (a && (b = 10)) {
printf("条件为真\n");
}
printf("b = %d\n", b); // 5,b没有被修改
// 短路求值:如果左边为真,右边不执行
if (a || (b = 20)) {
printf("条件为真\n");
}
printf("b = %d\n", b); // 20,b被修改了
return 0;
}
东巴文说明:逻辑运算符有短路特性,可以提高效率,但也可能导致副作用。
// ❌ 不推荐:省略花括号
if (a > b)
printf("a > b\n");
printf("这行不在if内\n"); // 容易误解
// ✅ 推荐:使用花括号
if (a > b) {
printf("a > b\n");
}
// ❌ 不推荐:深层嵌套
if (a > 0) {
if (b > 0) {
if (c > 0) {
printf("a, b, c都大于0\n");
}
}
}
// ✅ 推荐:提前返回
if (a <= 0) return;
if (b <= 0) return;
if (c <= 0) return;
printf("a, b, c都大于0\n");
// ❌ 容易写错
if (a = 5) { // 赋值,不是比较
printf("a等于5\n");
}
// ✅ 常量在左边
if (5 == a) { // 如果写成 5 = a 会编译错误
printf("a等于5\n");
}
// ✅ 适合使用switch的情况
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
printf("31天\n");
break;
case 4: case 6: case 9: case 11:
printf("30天\n");
break;
case 2:
printf("28或29天\n");
break;
}
// ✅ 适合使用if-else的情况
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 70) {
printf("中等\n");
}
完成本章学习后,请确认:
掌握条件判断后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文条件判断提示:条件判断是程序的决策中心,掌握条件判断是编写智能程序的关键。在 db-w.cn,我们会通过大量实例帮你掌握条件判断的使用!