【小宁的学习日记2 C语言】C语言判断
目录
一、判断结构概述
二、C 语言中的判断语句
1. if 语句(单分支判断)
作用
语法
实例:判断数字是否为正数
2. if...else 语句(双分支判断)
作用
语法
实例:判断成绩是否及格
3. 嵌套 if 语句(多分支嵌套)
作用
语法
实例:判断成绩等级
4. switch 语句(多等值判断)
作用
语法
实例:根据数字输出星期几
5. 嵌套 switch 语句
作用
实例:判断月份所属季节(简化)
6. 三元运算符 ? :(简化双分支)
作用
语法
注意
实例 1:判断奇偶(输出)
实例 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;// ... 更多casedefault:// 变量与所有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=bmax = (a > b) ? a : b;printf("最大值:%d", max);return 0;
}
// 运行结果:最大值:9
三、总结:判断结构适用场景
| 判断结构 | 适用场景 | 优点 |
|---|---|---|
if | 单条件判断(仅需处理 “真” 的情况) | 简单直观 |
if...else | 双分支判断(需处理 “真 / 假” 两种情况) | 逻辑清晰,适合复杂语句 |
嵌套if | 多层条件判断(如成绩等级) | 灵活处理多分支逻辑 |
switch | 单变量多等值判断(如星期、月份) | 代码简洁,避免嵌套if冗余 |
三元运算符? : | 简单二选一(赋值或单条输出) | 代码紧凑,节省行数 |
核心原则:逻辑简单用三元 /if,二选一用 if...else,多等值用 switch,多层逻辑用嵌套 if。
