目录
[二、C 语言中的判断语句](#二、C 语言中的判断语句)
[1. if 语句(单分支判断)](#1. if 语句(单分支判断))
[2. if...else 语句(双分支判断)](#2. if...else 语句(双分支判断))
[3. 嵌套 if 语句(多分支嵌套)](#3. 嵌套 if 语句(多分支嵌套))
[4. switch 语句(多等值判断)](#4. switch 语句(多等值判断))
[5. 嵌套 switch 语句](#5. 嵌套 switch 语句)
[6. 三元运算符 ? :(简化双分支)](#6. 三元运算符 ? :(简化双分支))
[实例 1:判断奇偶(输出)](#实例 1:判断奇偶(输出))
[实例 2:求两数最大值(赋值)](#实例 2:求两数最大值(赋值))
一、判断结构概述
判断结构的核心是根据条件的 "真 / 假" 执行不同代码块 ,是程序实现 "分支逻辑" 的基础。在 C 语言中,真假判定规则非常明确:
- 非零值(如
1、-5)或非空值(如非空字符串)被视为true(真); - 零(
0)或空值(如NULL)被视为false(假)。
所有判断语句均围绕这一规则展开,核心目标是 "按需执行代码"。
二、C 语言中的判断语句
1. if 语句(单分支判断)
作用
当单个条件为真时,执行指定代码块;条件为假时,跳过该代码块。
语法
if (布尔表达式) {
// 条件为真时执行的语句(可多条)
}
// 条件为假时,直接执行此处代码
- 布尔表达式:结果为 "真 / 假" 的表达式(如
num > 0、a == b); - 若语句块仅 1 条语句,
{}可省略(但推荐保留,增强可读性)。
实例:判断数字是否为正数
#include <stdio.h>
int main() {
int num = 8;
if (num > 0) { // 条件:num大于0(真)
printf("%d是正数\n", num); // 执行此句
}
printf("判断结束\n"); // 无论条件真假,都会执行
return 0;
}
// 运行结果:8是正数 → 判断结束
2. if...else 语句(双分支判断)
作用
解决 "二选一" 场景:条件为真时执行一个代码块,为假时执行另一个代码块,两个分支必执行其一。
语法
if (布尔表达式) {
// 条件为真时执行的语句
} else {
// 条件为假时执行的语句
}
实例:判断成绩是否及格
#include <stdio.h>
int main() {
int score = 75;
if (score >= 60) { // 条件:成绩≥60(真)
printf("成绩及格\n");
} else { // 条件为假时执行
printf("成绩不及格\n");
}
return 0;
}
// 运行结果:成绩及格
3. 嵌套 if 语句(多分支嵌套)
作用
当需要多层条件判断 时(如 "先判断是否及格,再判断是否优秀"),可在if或else内部嵌套另一个if语句。
语法
if (条件1) {
// 条件1为真时执行
if (条件2) {
// 条件1和条件2均为真时执行
} else {
// 条件1为真、条件2为假时执行
}
} else {
// 条件1为假时执行
}
实例:判断成绩等级
#include <stdio.h>
int main() {
int score = 92;
if (score >= 60) { // 第一层:是否及格
if (score >= 90) { // 第二层:是否优秀
printf("成绩优秀\n");
} else { // 及格但不优秀
printf("成绩良好\n");
}
} else { // 不及格
printf("成绩不及格\n");
}
return 0;
}
// 运行结果:成绩优秀
4. switch 语句(多等值判断)
作用
当需要判断一个变量与多个 "固定值" 是否相等 时(如 "根据数字输出星期几"),比嵌套if更简洁。
语法
switch (变量/表达式) { // 注意:变量/表达式必须是"整型"或"字符型"
case 常量1:
// 变量 == 常量1 时执行的语句
break; // 跳出switch(必须加,否则会"穿透"到下一个case)
case 常量2:
// 变量 == 常量2 时执行的语句
break;
// ... 更多case
default:
// 变量与所有case常量都不相等时执行(可选)
break;
}
- 关键规则:
case后必须是常量 (如1、'A'),不能是变量或表达式;break的作用是 "执行完当前 case 后退出 switch",若省略,会继续执行下一个 case(即使不匹配);default可放在任意位置,通常在最后,用于处理 "未匹配的情况"。
实例:根据数字输出星期几
#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n"); // 执行此句
break; // 跳出switch,避免穿透
case 4:
printf("星期四\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
// 运行结果:星期三
5. 嵌套 switch 语句
作用
在一个switch内部嵌套另一个switch,处理 "多层等值判断"(实际开发中较少用,易导致逻辑复杂)。
实例:判断月份所属季节(简化)
#include <stdio.h>
int main() {
int season = 1; // 1=春季,2=夏季...
int month = 2; // 2月
switch (season) {
case 1:
printf("春季:");
switch (month) { // 嵌套switch:判断春季的具体月份
case 1: printf("1月\n"); break;
case 2: printf("2月\n"); break;
case 3: printf("3月\n"); break;
}
break;
// ... 其他季节case
}
return 0;
}
// 运行结果:春季:2月
6. 三元运算符 ? :(简化双分支)
作用
是if...else的 "表达式形式",用于简单的二选一赋值或输出,代码更简洁。
语法
Exp1 ? Exp2 : Exp3;
- 执行逻辑:
- 先计算
Exp1(布尔表达式); - 若
Exp1为真,整个表达式的值 =Exp2的值; - 若
Exp1为假,整个表达式的值 =Exp3的值。
- 先计算
注意
- 三元运算符是 "表达式"(有返回值),可直接赋值给变量;
- 适合简单逻辑,复杂逻辑(如多条语句)仍需用
if...else。
实例 1:判断奇偶(输出)
#include <stdio.h>
int main() {
int num = 7;
// 条件:num%2==0(是否偶数),真则输出"偶数",假则输出"奇数"
(num % 2 == 0) ? printf("偶数") : printf("奇数");
return 0;
}
// 运行结果:奇数
实例 2:求两数最大值(赋值)
#include <stdio.h>
int main() {
int a = 5, b = 9, max;
// 条件:a>b,真则max=a,假则max=b
max = (a > b) ? a : b;
printf("最大值:%d", max);
return 0;
}
// 运行结果:最大值:9
三、总结:判断结构适用场景
| 判断结构 | 适用场景 | 优点 |
|---|---|---|
if |
单条件判断(仅需处理 "真" 的情况) | 简单直观 |
if...else |
双分支判断(需处理 "真 / 假" 两种情况) | 逻辑清晰,适合复杂语句 |
嵌套if |
多层条件判断(如成绩等级) | 灵活处理多分支逻辑 |
switch |
单变量多等值判断(如星期、月份) | 代码简洁,避免嵌套if冗余 |
三元运算符? : |
简单二选一(赋值或单条输出) | 代码紧凑,节省行数 |
核心原则:逻辑简单用三元 /if,二选一用 if...else,多等值用 switch,多层逻辑用嵌套 if。