选择结构if else和switch
一、if-else语句
1. 基本语法
if (条件表达式) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
- 条件表达式:结果为非零(真)或零(假)
else部分:可选
2. 多分支结构
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件2为真时执行
} else if (条件3) {
// 条件3为真时执行
} else {
// 所有条件都为假时执行
}
3. 嵌套if-else
if (条件1) {
if (条件2) {
// 条件1和条件2都为真时执行
} else {
// 条件1为真,条件2为假时执行
}
} else {
// 条件1为假时执行
}
4. 示例:判断奇偶数
#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;
}
5. 示例:成绩等级判断
#include <stdio.h>
int main() {
int score;
printf("请输入成绩(0-100): ");
scanf("%d", &score);
if (score >= 90) {
printf("等级: A\n");
} else if (score >= 80) {
printf("等级: B\n");
} else if (score >= 70) {
printf("等级: C\n");
} else if (score >= 60) {
printf("等级: D\n");
} else {
printf("等级: F\n");
}
return 0;
}
二、switch语句
1. 基本语法
switch (表达式) {
case 常量表达式1:
// 当表达式等于常量表达式1时执行
break;
case 常量表达式2:
// 当表达式等于常量表达式2时执行
break;
// 可以有多个case
default:
// 当表达式不匹配任何case时执行
}
- 表达式:必须是整数类型(包括
char) - 常量表达式:必须是常量或字面量
break语句:可选,用于跳出switch结构
2. 示例:星期输出
#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");
}
return 0;
}
3. case合并
多个case可以共享同一组代码:
char grade;
printf("请输入等级(A/B/C/D/F): ");
scanf(" %c", &grade); // 注意空格跳过空白字符
switch (grade) {
case 'A':
case 'B':
case 'C':
printf("成绩合格\n");
break;
case 'D':
case 'F':
printf("成绩不合格\n");
break;
default:
printf("无效等级\n");
}
三、if-else与switch的比较
| 特点 | if-else | switch |
|---|---|---|
| 适用场景 | 复杂条件判断 | 等值判断 |
| 条件类型 | 任意布尔表达式 | 整数类型(int, char 等) |
| 执行效率 | 依次判断每个条件 | 通过跳转表直接定位 |
| 代码可读性 | 条件复杂时可能降低 | 结构清晰,适合多分支等值判断 |
四、选择结构的最佳实践
-
避免深层嵌套:超过 3 层嵌套时,考虑重构代码
-
使用
switch替代复杂if-else:当判断多个离散值时 -
条件表达式简化:
// 不推荐 if (a == true) { ... } // 推荐 if (a) { ... } -
边界条件检查:确保覆盖所有可能的情况
if (age >= 18) { printf("成年人\n"); } else { printf("未成年人\n"); } -
空语句处理:明确空条件的意图
if (condition) ; // 空语句,明确表示不执行任何操作 else { // ... }
简单计算器的程序设计
#include <stdio.h>
int main() {
double num1, num2, result;
char op;
printf("请输入表达式 (例如: 3 + 5): ");
scanf("%lf %c %lf", &num1, &op, &num2);
switch (op) {
case '+':
result = num1 + num2;
printf("%.2lf + %.2lf = %.2lf\n", num1, num2, result);
break;
case '-':
result = num1 - num2;
printf("%.2lf - %.2lf = %.2lf\n", num1, num2, result);
break;
case '*':
result = num1 * num2;
printf("%.2lf * %.2lf = %.2lf\n", num1, num2, result);
break;
case '/':
if (num2 == 0) {
printf("错误: 除数不能为零\n");
} else {
result = num1 / num2;
printf("%.2lf / %.2lf = %.2lf\n", num1, num2, result);
}
break;
default:
printf("错误: 不支持的运算符 %c\n", op);
}
return 0;
}

浙公网安备 33010602011771号