文章目录
- 1. if 语句
- 2. if...else 语句
- 3. if...else if...else 语句
- 4. switch 语句
- 5. 三元运算符 ( ? : )
- 总结与对比
- 如何选择
C语言中的判断语句用于根据给定的条件来决定执行哪一段代码。其核心是条件为真(必须)则执行一段代码,条件为假(非必须)则执行另一段代码。
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
C语言提供了以下几种主要的判断/分支结构:
1、if 语句
2、if…else 语句
3、if…else if…else 语句
4、switch 语句
5、三元运算符(条件运算符)
1. if 语句
这是最基本的形式。如果条件为真,则执行后面的代码块。
语法:
if (condition) {// 如果 condition 为真(非0),则执行这里的代码
}
示例:
#include <stdio.h>int main() {int number = 10;if (number > 5) {printf("数字大于5。\n"); // 这行会被执行}return 0;
}
2. if…else 语句
在 if 的基础上增加了一个 else 分支。如果条件为真,执行 if 的代码块;如果为假,则执行 else 的代码块。
语法:
if (condition) {// 条件为真时执行
} else {// 条件为假时执行
}
示例:
#include <stdio.h>int main() {int age = 16;if (age >= 18) {printf("你已成年。\n");} else {printf("你是未成年人。\n"); // 这行会被执行}return 0;
}
3. if…else if…else 语句
用于检查多个条件。程序会按顺序检查每个 if 或 else if 的条件,一旦某个条件为真,就执行其对应的代码块,然后跳过整个判断结构的其余部分。
语法:
if (condition1) {// condition1 为真时执行
} else if (condition2) {// condition1 为假但 condition2 为真时执行
} else if (condition3) {// condition1 和 condition2 都为假但 condition3 为真时执行
} else {// 所有上述条件都为假时执行
}
// 可以有很多个 else if
示例:
#include <stdio.h>int main() {int score = 85;if (score >= 90) {printf("成绩优秀!\n");} else if (score >= 80) { // 85 >= 80 为真,执行这里printf("成绩良好。\n"); // 这行会被执行} else if (score >= 70) {printf("成绩中等。\n");} else if (score >= 60) {printf("成绩及格。\n");} else {printf("成绩不及格。\n");}return 0;
}
4. switch 语句
switch 语句用于基于一个整型或字符型表达式的值来执行不同的代码块。它是一种多路分支选择结构,比多个 if…else if 更清晰。
语法:
switch (expression) {case constant1:// 如果 expression 的值等于 constant1,执行这里的代码break; // break 用于跳出 switchcase constant2:// 如果 expression 的值等于 constant2,执行这里的代码break;case constant3:// ...break;default:// 如果 expression 的值不匹配任何 case,执行这里的代码// default 是可选的
}
重要规则:
1、expression 的结果必须是整型或字符型。
2、case 后面的值必须是整型或字符型常量。
3、break 语句至关重要。如果省略 break,程序会继续执行下一个 case 中的代码,直到遇到 break 或 switch 结束。这被称为“穿透”(fallthrough),有时会故意这样用。
示例:
#include <stdio.h>int main() {char grade = 'B';switch (grade) {case 'A':printf("完美!\n");break;case 'B':printf("做得很好!\n"); // 这行会被执行break;case 'C':printf("做得不错。\n");break;case 'D':printf("刚好及格。\n");break;case 'F':printf("不及格,需要再努力。\n");break;default:printf("无效的成绩。\n");}return 0;
}
故意使用“穿透”的示例:
#include <stdio.h>int main() {int number = 2;switch (number) {case 1:case 2:case 3:printf("数字是1, 2或3。\n"); // number=1,2,3 都会执行这里break;case 4:printf("数字是4。\n");break;default:printf("数字不是1,2,3,4。\n");}return 0;
}
5. 三元运算符 ( ? : )
这是一个非常简洁的条件表达式,可以看作是 if…else 的简写形式。它返回一个值。
语法:
condition ? expression_if_true : expression_if_false;
如果 condition 为真,整个表达式的值为 expression_if_true 的结果,否则为 expression_if_false 的结果。
示例:
#include <stdio.h>int main() {int a = 10, b = 20;int max;// 等价于: if (a > b) { max = a; } else { max = b; }max = (a > b) ? a : b;printf("较大的数字是:%d\n", max); // 输出 20// 也可以直接用在函数参数等地方printf("a是%s\n", (a % 2 == 0) ? "偶数" : "奇数"); // 输出 "a是偶数"return 0;
}
图片来自菜鸟教程:https://www.runoob.com/cprogramming/c-decision.html
总结与对比
语句类型 | 用途 | 优点 |
---|---|---|
if | 简单的单条件判断 | 结构简单,适用于所有条件、 |
if…else | 二选一的分支 | 逻辑清晰,处理真假两种情况\ |
if…else if…else | 多条件分支判断 | 可以处理复杂的多个并列或递进条件 |
switch | 基于单个表达式的多个固定值进行分支 | 结构清晰,效率高(通常使用跳转表) |
三元运算符 ? : | 简单的二选一条件赋值或返回 | 代码简洁,一行完成 |
如何选择
1、如果判断的条件是一个变量是否等于某些特定的常量值,优先考虑 switch,会使代码更清晰。
2、如果条件是一个范围(如 score > 60)或者涉及多个变量的复杂逻辑(如 a > b && c < d),则必须使用 if 系列语句。
3、如果只是简单的二选一赋值,三元运算符非常方便。