【小宁的学习日记2 C语言】C语言判断

目录

一、判断结构概述

[二、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 > 0a == 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 语句(多分支嵌套)

作用

当需要多层条件判断 时(如 "先判断是否及格,再判断是否优秀"),可在ifelse内部嵌套另一个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;
}
  • 关键规则:
    1. case后必须是常量 (如1'A'),不能是变量或表达式;
    2. break的作用是 "执行完当前 case 后退出 switch",若省略,会继续执行下一个 case(即使不匹配);
    3. 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;
  • 执行逻辑:
    1. 先计算Exp1(布尔表达式);
    2. Exp1为真,整个表达式的值 = Exp2的值;
    3. 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

相关推荐
2401_841495645 小时前
【数据结构】基于Prim算法的最小生成树
java·数据结构·c++·python·算法·最小生成树·prim
祈祷苍天赐我java之术7 小时前
解析常见的限流算法
java·数据结构·算法
Shinom1ya_8 小时前
算法 day 34
算法
啊董dong8 小时前
课后作业-2025-10-26
c++·算法·noi
liu****8 小时前
1.模拟算法
开发语言·c++·算法·1024程序员节
小猪咪piggy8 小时前
【算法】day10 分治
数据结构·算法·排序算法
又是忙碌的一天8 小时前
算法学习 13
数据结构·学习·算法
June`8 小时前
前缀和算法:高效解决区间和问题
算法·1024程序员节
再卷也是菜8 小时前
算法基础篇(9)倍增与离散化
c++·算法