一、前言:为什么需要条件分支?
想象一下日常生活中的选择:如果下雨,我就带伞;否则就不带。程序中同样需要这样的决策能力,这就是条件语句的作用。在C语言中,if
和switch
语句让程序能够根据不同条件执行不同的代码路径。
二、if语句:基础条件判断
1. 基本语法结构
if (条件表达式) {
// 条件为真时执行的代码
}
示例:判断数字是否为偶数
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数\n", num);
}
return 0;
}
2. if-else:二选一的选择
if (条件表达式) {
// 条件为真时执行
} else {
// 条件为假时执行
}
示例:判断成绩是否及格
#include <stdio.h>
int main() {
int score;
printf("请输入成绩: ");
scanf("%d", &score);
if (score >= 60) {
printf("恭喜,及格了!\n");
} else {
printf("很遗憾,不及格\n");
}
return 0;
}
3. if-else if-else:多条件判断
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件2为真时执行
} else {
// 所有条件都为假时执行
}
示例:成绩等级评定
#include <stdio.h>
int main() {
int score;
printf("请输入成绩(0-100): ");
scanf("%d", &score);
if (score >= 90) {
printf("优秀!\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 70) {
printf("中等\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}
三、if语句的重要注意事项
1. 大括号{}的重要性
正确写法:
if (condition) {
statement1;
statement2;
statement3;
}
错误写法:
if (condition)
statement1; // 只有这一句属于if
statement2; // 无论条件如何都会执行
statement3; // 无论条件如何都会执行
建议:即使只有一行代码,也使用大括号,这样代码更清晰且避免错误。
2. 分号陷阱
错误示例:
if (condition); // 这个分号结束了if语句!
{
statement; // 这行代码总会执行,与if条件无关
}
3. 常见错误写法
if (a = b) // 这是赋值,不是比较!应该用 ==
if (a > b > c) // 这不会按预期工作!应该用 && 连接
四、switch语句:多路选择
1. 基本语法
switch (表达式) {
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
default:
默认语句;
break;
}
2. switch使用示例
#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("输入错误!请输入1-7的数字\n");
break;
}
return 0;
}
3. break的重要性
忘记break的后果:
switch (value) {
case 1:
printf("一");
// 忘记break,会继续执行下一个case
case 2:
printf("二"); // 当value=1时,会输出"一二"
break;
}
4. switch的特殊用法:多个case共享代码
#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':
case 'E':
case 'e':
printf("不及格\n");
break;
default:
printf("无效等级\n");
}
return 0;
}
五、if vs switch:如何选择?
使用if的情况:
- 条件判断基于范围(如 score > 90)
- 条件不是离散值
- 需要复杂的逻辑表达式(如多个条件的与或非组合)
使用switch的情况:
- 基于单个变量的离散值进行判断
- 有多个明确的具体值需要处理
- 代码需要更好的可读性和结构
六、嵌套条件语句
#include <stdio.h>
int main() {
int age;
char hasLicense;
printf("请输入年龄: ");
scanf("%d", &age);
printf("是否有驾照?(y/n): ");
scanf(" %c", &hasLicense); // 注意前面的空格,用于吸收换行符
if (age >= 18) {
if (hasLicense == 'y' || hasLicense == 'Y') {
printf("可以合法驾驶\n");
} else {
printf("年龄达标但需要考取驾照\n");
}
} else {
printf("未满18岁,不能驾驶\n");
}
return 0;
}
七、实战练习
练习:季节判断
#include <stdio.h>
int main() {
int month;
printf("请输入月份(1-12): ");
scanf("%d", &month);
switch (month) {
case 12:
case 1:
case 2:
printf("冬季\n");
break;
case 3:
case 4:
case 5:
printf("春季\n");
break;
case 6:
case 7:
case 8:
printf("夏季\n");
break;
case 9:
case 10:
case 11:
printf("秋季\n");
break;
default:
printf("无效月份\n");
}
return 0;
}
八、常见错误与调试技巧
- 总是使用大括号,即使只有一行代码
- 注意赋值(=)和比较(==)的区别
- switch中不要忘记break
- 使用调试器或打印语句检查条件判断的实际结果
- 测试边界条件(如刚好等于临界值的情况)
九、总结
条件分支是编程中的基础且重要的概念:
if
语句适用于各种条件判断,灵活性高switch
语句适用于多路离散值选择,结构清晰- 注意代码风格和常见陷阱
- 多练习,培养条件判断的思维模式