C语言快速入门教程
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
  • 基础教程

    • Hello World 深入理解
    • 变量详解
    • 数据类型详解
    • 运算符详解
    • 输入输出详解
    • 条件判断 if-else
    • 循环语句
    • 函数详解
    • 数组详解

条件判断 if-else

让程序能够做出选择和判断!

if 语句

基本语法

if (条件) {
    // 条件为真时执行
}

示例

#include <stdio.h>

int main() {
    int age = 20;
    
    if (age >= 18) {
        printf("你已经成年了!\n");
    }
    
    return 0;
}

流程图

graph TB
    A[开始] --> B{age >= 18?}
    B -->|是| C[输出:你已经成年了]
    B -->|否| D[跳过]
    C --> E[结束]
    D --> E

if-else 语句

语法

if (条件) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}

示例

#include <stdio.h>

int main() {
    int score = 75;
    
    if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
    return 0;
}

if-else if-else 多分支

语法

if (条件1) {
    // 条件1为真
} else if (条件2) {
    // 条件2为真
} else if (条件3) {
    // 条件3为真
} else {
    // 所有条件都不满足
}

示例:成绩等级

#include <stdio.h>

int main() {
    int score = 85;
    
    if (score >= 90) {
        printf("等级:A(优秀)\n");
    } else if (score >= 80) {
        printf("等级:B(良好)\n");
    } else if (score >= 70) {
        printf("等级:C(中等)\n");
    } else if (score >= 60) {
        printf("等级:D(及格)\n");
    } else {
        printf("等级:F(不及格)\n");
    }
    
    return 0;
}

嵌套 if

if语句内部还可以有if语句:

#include <stdio.h>

int main() {
    int age = 20;
    int hasLicense = 1;  // 1表示有驾照
    
    if (age >= 18) {
        if (hasLicense) {
            printf("可以开车\n");
        } else {
            printf("成年了,但没有驾照\n");
        }
    } else {
        printf("未成年,不能开车\n");
    }
    
    return 0;
}

优化建议

嵌套太深会难以阅读,能用逻辑运算符的尽量用:

// 可以简化为
if (age >= 18 && hasLicense) {
    printf("可以开车\n");
} else {
    printf("不能开车\n");
}

switch 语句

适合多个固定值的判断:

语法

switch (表达式) {
    case 值1:
        // 代码块1
        break;
    case 值2:
        // 代码块2
        break;
    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;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("无效的日期\n");
    }
    
    return 0;
}

break 的重要性

如果忘记写break,会"穿透"执行:

#include <stdio.h>

int main() {
    int num = 2;
    
    switch (num) {
        case 1:
            printf("一\n");
        case 2:
            printf("二\n");  // 执行这里
        case 3:
            printf("三\n");  // 也执行!
        default:
            printf("其他\n"); // 还执行!
    }
    
    return 0;
}

输出:

二
三
其他

重要

除非有特殊需求,每个case后面都要加break!

实战案例

案例1:BMI计算器

#include <stdio.h>

int main() {
    float height, weight, bmi;
    
    printf("请输入身高(米):");
    scanf("%f", &height);
    
    printf("请输入体重(千克):");
    scanf("%f", &weight);
    
    bmi = weight / (height * height);
    
    printf("\n你的BMI指数:%.2f\n", bmi);
    
    if (bmi < 18.5) {
        printf("体重过轻\n");
    } else if (bmi < 24) {
        printf("体重正常\n");
    } else if (bmi < 28) {
        printf("体重过重\n");
    } else {
        printf("肥胖\n");
    }
    
    return 0;
}

案例2:简易登录系统

#include <stdio.h>
#include <string.h>

int main() {
    char username[20];
    char password[20];
    
    printf("=== 登录系统 ===\n");
    printf("用户名:");
    scanf("%s", username);
    
    printf("密码:");
    scanf("%s", password);
    
    if (strcmp(username, "admin") == 0 && 
        strcmp(password, "123456") == 0) {
        printf("\n登录成功!欢迎 %s\n", username);
    } else {
        printf("\n用户名或密码错误!\n");
    }
    
    return 0;
}

案例3:电费计算器

#include <stdio.h>

int main() {
    float usage, cost;
    
    printf("请输入用电量(度):");
    scanf("%f", &usage);
    
    if (usage <= 100) {
        cost = usage * 0.5;
    } else if (usage <= 200) {
        cost = 100 * 0.5 + (usage - 100) * 0.6;
    } else {
        cost = 100 * 0.5 + 100 * 0.6 + (usage - 200) * 0.8;
    }
    
    printf("用电量:%.2f度\n", usage);
    printf("电费:%.2f元\n", cost);
    
    return 0;
}

案例4:简易菜单系统

#include <stdio.h>

int main() {
    int choice;
    
    printf("=== 学生管理系统 ===\n");
    printf("1. 添加学生\n");
    printf("2. 删除学生\n");
    printf("3. 查询学生\n");
    printf("4. 退出系统\n");
    printf("请选择(1-4):");
    scanf("%d", &choice);
    
    switch (choice) {
        case 1:
            printf("你选择了:添加学生\n");
            break;
        case 2:
            printf("你选择了:删除学生\n");
            break;
        case 3:
            printf("你选择了:查询学生\n");
            break;
        case 4:
            printf("退出系统...\n");
            break;
        default:
            printf("无效的选择!\n");
    }
    
    return 0;
}

练习题

练习1:判断奇偶数

输入一个整数,判断是奇数还是偶数。

练习2:判断三角形

输入三条边,判断能否构成三角形,如果能,判断类型(等边、等腰、普通)。

练习3:计算器菜单

制作一个带菜单的计算器:

1. 加法
2. 减法
3. 乘法
4. 除法
请选择:

答案参考

查看答案

练习1:

#include <stdio.h>

int main() {
    int num;
    
    printf("请输入一个整数:");
    scanf("%d", &num);
    
    if (num % 2 == 0) {
        printf("%d是偶数\n", num);
    } else {
        printf("%d是奇数\n", num);
    }
    
    return 0;
}

练习2:

#include <stdio.h>

int main() {
    int a, b, c;
    
    printf("请输入三条边(用空格分隔):");
    scanf("%d %d %d", &a, &b, &c);
    
    if (a + b > c && a + c > b && b + c > a) {
        printf("能构成三角形\n");
        
        if (a == b && b == c) {
            printf("等边三角形\n");
        } else if (a == b || b == c || a == c) {
            printf("等腰三角形\n");
        } else {
            printf("普通三角形\n");
        }
    } else {
        printf("不能构成三角形\n");
    }
    
    return 0;
}

练习3:

#include <stdio.h>

int main() {
    int choice;
    float a, b, result;
    
    printf("=== 计算器 ===\n");
    printf("1. 加法\n");
    printf("2. 减法\n");
    printf("3. 乘法\n");
    printf("4. 除法\n");
    printf("请选择:");
    scanf("%d", &choice);
    
    printf("请输入两个数:");
    scanf("%f %f", &a, &b);
    
    switch (choice) {
        case 1:
            result = a + b;
            printf("%.2f + %.2f = %.2f\n", a, b, result);
            break;
        case 2:
            result = a - b;
            printf("%.2f - %.2f = %.2f\n", a, b, result);
            break;
        case 3:
            result = a * b;
            printf("%.2f * %.2f = %.2f\n", a, b, result);
            break;
        case 4:
            if (b != 0) {
                result = a / b;
                printf("%.2f / %.2f = %.2f\n", a, b, result);
            } else {
                printf("错误:除数不能为0\n");
            }
            break;
        default:
            printf("无效的选择\n");
    }
    
    return 0;
}

知识点总结

  • ✅ if - 单条件判断
  • ✅ if-else - 二选一
  • ✅ if-else if - 多分支
  • ✅ 嵌套if - 条件套条件
  • ✅ switch - 固定值判断
  • ✅ 别忘了break!

下一步

👉 循环语句

最近更新: 2025/12/26 14:29
Prev
输入输出详解
Next
循环语句