C语言中的判断结构主要通过条件语句实现,允许程序根据不同的条件执行不同的代码块。核心判断语句包括if、if-else、switch-case等,它们基于布尔表达式的结果(真或假)控制程序流程。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。

常见判断语句:
| 语句 | 描述 |
|---|---|
| if 语句 | 一个 if 语句 由一个布尔表达式,若表达式为真,则执行,否则跳过 |
| if...else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
| 嵌套 if 语句 | 可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
| switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
| 嵌套 switch 语句 | 可以在一个 switch 语句内使用另一个 switch 语句。 |
举几个生活中的例子,帮大家快速理解:
- 如果今天下雨,就带伞;如果不下雨,就不带伞(两种选择,对应 if...else 语句);
- 考试分数:90分及以上是优秀,80-89分是良好,60-79分是及格,60分以下是不及格(多种选择,对应 if...else if...else 语句)
- 如果周末有空,或者节假日有空,就去旅行(满足一个条件即可,对应逻辑运算符 ||)
1.if语句
if语句是C语言中最基础、最常用的判断语句,作用为:如果某个条件成立,就执行一段代码;如果条件不成立,就跳过这段代码。
语法:
if(条件表达式){
//条件成立时,要执行的代码块(可以是一行或多行代码)
}
需注意的关键细节:
- if 后面的「括号 ()」是必须的,不能省略。括号里放的是「条件表达式」。
- 大括号 {} 用来包裹“条件成立时要执行的代码”,如果只有一行代码,大括号可以省略。
- 条件表达式的结尾不需要加分号,但该种方法不推荐。
示例:
#include <stdio.h>
int main() {
// 定义成绩变量,并赋值为75分
int score = 75;
// 判断成绩是否≥60,成立则执行打印语句
if (score >= 60) {
printf("恭喜,成绩及格!\\n");
}
// 条件不成立时,跳过上面的打印语句,执行这里
printf("成绩判断结束\\n");
return 0;
}
结果:
恭喜,成绩及格!
成绩判断结束
2.if…else…语句
if 语句只能处理“条件成立就执行,不成立就跳过”的场景,但很多时候我们需要「二选一」——条件成立执行A操作,不成立执行B操作,这时候就需要用到 if…else…语句。它的核心逻辑是:「非此即彼」,两个操作中必然会执行一个,不会出现都执行或都不执行的情况。
语法:
if (条件表达式) {
// 条件成立时,执行的代码块(A操作)
} else {
// 条件不成立时,执行的代码块(B操作)
}
关键细节:
- else 后面没有括号,直接跟大括号。else 不能单独使用,必须紧跟在 if 语句的大括号后面。
- if 和 else 后面的代码块,只会执行其中一个。
- 和 if 语句一样,如果 if 或 else 后面只有一行代码,大括号可以省略,但同样不推荐。
示例:
#include <stdio.h>
int main() {
int score;
// 提示用户输入成绩
printf("请输入你的成绩:");
// 读取用户输入的成绩,存入score变量
scanf("%d", &score);
// 二选一判断
if (score >= 60) {
printf("恭喜,成绩及格!\\n");
} else {
printf("抱歉,成绩不及格,继续努力!\\n");
}
return 0;
}
运行场景1:输入 88 → 输出“恭喜,成绩及格!” 运行场景2:输入 59 → 输出“抱歉,成绩不及格,继续努力!”
3.if…else if…else语句
生活中很多场景需要「多个选择」——比如成绩分级、会员等级判断、区间判断等,这时候就需要用到 if…else if…else 语句。它的核心逻辑是:「从上到下依次判断条件,只要有一个条件成立,就执行对应的代码块,之后不再判断后面的条件;如果所有条件都不成立,就执行 else 里的代码块」。
语法:
if (条件1) {
// 条件1成立时,执行的代码块
} else if (条件2) {
// 条件1不成立、条件2成立时,执行的代码块
} else if (条件3) {
// 条件1、2都不成立、条件3成立时,执行的代码块
} ... // 可以有多个else if
else {
// 所有条件都不成立时,执行的代码块(可选,可省略)
}
关键细节:
- 判断顺序很重要:必须「从特殊到一般」「从大到小」排列条件。
- else if 可以有多个,根据实际需求增减,没有数量限制。
- else 是可选的:如果所有条件都不成立时,不需要执行任何操作,就可以省略 else。
- 同样,每个条件后面的大括号,建议都加上,避免逻辑混乱。
正确示例:
#include <stdio.h>
int main() {
int score;
printf("请输入你的成绩(0-100):");
scanf("%d", &score);
// 多分支判断,注意条件顺序:先判断无效成绩,再从高分到低分判断
if (score < 0 || score > 100) {
printf("成绩无效,请输入0-100之间的分数\\n");
} else if (score >= 90) {
printf("优秀\\n");
} else if (score >= 80) {
printf("良好\\n");
} else if (score >= 60) {
printf("及格\\n");
} else {
printf("不及格\\n");
}
return 0;
}
反例:
// 错误示例,不要这么写!
if (score < 0 || score > 100) {
printf("成绩无效\\n");
} else if (score >= 60) {
printf("及格\\n");
} else if (score >= 80) {
printf("良好\\n");
} else if (score >= 90) {
printf("优秀\\n");
} else {
printf("不及格\\n");
}
此时输入 95,会打印“及格”——因为 95 ≥ 60 这个条件先成立,程序执行完“及格”的打印语句后,就不再判断后面的 80、90 条件了,这就导致逻辑错误。所以,多分支判断的「顺序」,是重中之重!
4.if…else语句嵌套
在实际开发中,会经常遇到“二选一”基础上,再增加“二次判断”的场景,这时候就需要使用if…else语句嵌套,核心逻辑是:在一个if或else语句的代码块中,再包含另一个完整的if…else语句,实现更复杂的多层判断。
语法:
if(外层条件)
{
//外层条件成立,执行这里的代码
if(内层条件1)
{
//内层条件1成立,执行的代码
}
else
{
//内层条件1不成立,执行这里的代码
}
}
else
{
//外层条件不成立,执行这里的代码
if(内层条件2)
{
//内层条件2成立,执行的代码
}
else
{
//内层条件2不成立,执行的代码
}
}
关键细节:
- 嵌套时,内层的 if...else 必须完全包裹在外层 if 或 else 的大括号内,不能超出范围,否则会导致逻辑混乱或编译报错。
示例:
判断成绩是否及格(≥60分),若及格,再判断是否为优秀(≥90分);若不及格,再判断是否接近及格(≥50分)
#include <stdio.h>
int main()
{
int score;
printf("请输入你的成绩:");
scanf("%d",&score);
//外层判断:及格vs不及格
if(score>=60)
{
//内层判断:几个范围内:优秀vs普通及格
if(score>=90)
{
printf("优秀,继续保持!\\n");
}
else
{
printf("及格,继续加油\\n");
}
}
else
{
//内层判断:不及格范围内,接近及格vs差距较大
if(score>=50)
{
printf("不及格,但接近加油,再加把劲\\n");
}
else
{
printf("不及格,差距较大,需加倍努力\\n");
}
}
}
最后,给大家一个实用技巧:写判断语句时,尽量“先边界后正常”“先特殊后一般”,比如先判断无效成绩(<0或>100),再判断正常成绩;先判断高分段,再判断低分段。同时,养成“成对敲括号”“加注释”的习惯,不仅能减少错误,还能让代码更易读,后续修改也更方便。
——C判断(if语句)&spm=1001.2101.3001.5002&articleId=158472081&d=1&t=3&u=c6333b36eb4d4d8393a15080a862d206)
7846

被折叠的 条评论
为什么被折叠?



