Skip to content

C++ 判断

判断语句用于根据条件执行不同的代码块。C++ 提供了以下判断语句:if语句、if-else语句、if-else if-else语句和switch语句。

1. if 语句

if语句在条件为真时执行代码块。

1.1 基本语法

cpp
if (条件) {
    // 条件为真时执行的代码
}

1.2 示例

cpp
#include <iostream>

int main() {
    int age = 18;
    
    if (age >= 18) {
        std::cout << "你已经成年了" << std::endl;
    }
    
    return 0;
}

2. if-else 语句

if-else语句在条件为真时执行一个代码块,在条件为假时执行另一个代码块。

2.1 基本语法

cpp
if (条件) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}

2.2 示例

cpp
#include <iostream>

int main() {
    int age = 16;
    
    if (age >= 18) {
        std::cout << "你已经成年了" << std::endl;
    } else {
        std::cout << "你还未成年" << std::endl;
    }
    
    return 0;
}

3. if-else if-else 语句

if-else if-else语句用于检查多个条件。

3.1 基本语法

cpp
if (条件1) {
    // 条件1为真时执行的代码
} else if (条件2) {
    // 条件2为真时执行的代码
} else {
    // 所有条件都为假时执行的代码
}

3.2 示例

cpp
#include <iostream>

int main() {
    int score = 85;
    
    if (score >= 90) {
        std::cout << "优秀" << std::endl;
    } else if (score >= 80) {
        std::cout << "良好" << std::endl;
    } else if (score >= 70) {
        std::cout << "中等" << std::endl;
    } else if (score >= 60) {
        std::cout << "及格" << std::endl;
    } else {
        std::cout << "不及格" << std::endl;
    }
    
    return 0;
}

4. 嵌套 if 语句

if语句可以嵌套使用,即在一个if语句内部再使用另一个if语句。

4.1 示例

cpp
#include <iostream>

int main() {
    int age = 20;
    bool has_id = true;
    
    if (age >= 18) {
        if (has_id) {
            std::cout << "你可以进入酒吧" << std::endl;
        } else {
            std::cout << "你需要出示身份证" << std::endl;
        }
    } else {
        std::cout << "你还未成年" << std::endl;
    }
    
    return 0;
}

5. switch 语句

switch语句用于根据变量的值执行不同的代码块,适用于多个固定值的情况。

5.1 基本语法

cpp
switch (表达式) {
    case 值1:
        // 代码块1
        break;
    case 值2:
        // 代码块2
        break;
    default:
        // 默认代码块
}

5.2 示例

cpp
#include <iostream>

int main() {
    int day = 3;
    
    switch (day) {
        case 1:
            std::cout << "星期一" << std::endl;
            break;
        case 2:
            std::cout << "星期二" << std::endl;
            break;
        case 3:
            std::cout << "星期三" << std::endl;
            break;
        case 4:
            std::cout << "星期四" << std::endl;
            break;
        case 5:
            std::cout << "星期五" << std::endl;
            break;
        case 6:
            std::cout << "星期六" << std::endl;
            break;
        case 7:
            std::cout << "星期日" << std::endl;
            break;
        default:
            std::cout << "无效的日期" << std::endl;
    }
    
    return 0;
}

5.3 switch 语句的注意事项

  1. break 语句:每个case后面通常需要添加break语句,否则会继续执行下一个case的代码(这种现象称为"穿透")。

  2. default 分支default分支是可选的,用于处理所有case都不匹配的情况。

  3. 数据类型switch语句的表达式只能是整型或枚举类型。

5.4 switch 语句的穿透现象

cpp
#include <iostream>

int main() {
    int day = 3;
    
    switch (day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            std::cout << "工作日" << std::endl;
            break;
        case 6:
        case 7:
            std::cout << "周末" << std::endl;
            break;
        default:
            std::cout << "无效的日期" << std::endl;
    }
    
    return 0;
}

6. 条件运算符

条件运算符(三元运算符)是if-else语句的简洁形式。

6.1 基本语法

cpp
条件 ? 表达式1 : 表达式2

6.2 示例

cpp
#include <iostream>

int main() {
    int a = 10;
    int b = 20;
    
    int max = (a > b) ? a : b;
    std::cout << "最大值: " << max << std::endl;
    
    return 0;
}

7. 判断的应用示例

7.1 判断闰年

cpp
#include <iostream>

bool is_leap_year(int year) {
    if (year % 4 != 0) {
        return false;
    } else if (year % 100 != 0) {
        return true;
    } else {
        return (year % 400 == 0);
    }
}

int main() {
    int year = 2024;
    if (is_leap_year(year)) {
        std::cout << year << " 是闰年" << std::endl;
    } else {
        std::cout << year << " 不是闰年" << std::endl;
    }
    
    return 0;
}

7.2 计算器

cpp
#include <iostream>

int main() {
    char op;
    double num1, num2;
    
    std::cout << "输入运算符 (+, -, *, /): ";
    std::cin >> op;
    
    std::cout << "输入两个数字: ";
    std::cin >> num1 >> num2;
    
    switch (op) {
        case '+':
            std::cout << num1 << " + " << num2 << " = " << num1 + num2 << std::endl;
            break;
        case '-':
            std::cout << num1 << " - " << num2 << " = " << num1 - num2 << std::endl;
            break;
        case '*':
            std::cout << num1 << " * " << num2 << " = " << num1 * num2 << std::endl;
            break;
        case '/':
            if (num2 != 0) {
                std::cout << num1 << " / " << num2 << " = " << num1 / num2 << std::endl;
            } else {
                std::cout << "错误:除数不能为零" << std::endl;
            }
            break;
        default:
            std::cout << "错误:无效的运算符" << std::endl;
    }
    
    return 0;
}

7.3 成绩等级评定

cpp
#include <iostream>

char get_grade(int score) {
    if (score >= 90) {
        return 'A';
    } else if (score >= 80) {
        return 'B';
    } else if (score >= 70) {
        return 'C';
    } else if (score >= 60) {
        return 'D';
    } else {
        return 'F';
    }
}

int main() {
    int score;
    std::cout << "输入分数: ";
    std::cin >> score;
    
    char grade = get_grade(score);
    std::cout << "成绩等级: " << grade << std::endl;
    
    return 0;
}

8. 示例:综合运用

现在,让我们看一个综合运用各种判断语句的例子:

cpp
#include <iostream>

// 判断闰年
bool is_leap_year(int year) {
    if (year % 4 != 0) {
        return false;
    } else if (year % 100 != 0) {
        return true;
    } else {
        return (year % 400 == 0);
    }
}

// 成绩等级评定
char get_grade(int score) {
    if (score >= 90) {
        return 'A';
    } else if (score >= 80) {
        return 'B';
    } else if (score >= 70) {
        return 'C';
    } else if (score >= 60) {
        return 'D';
    } else {
        return 'F';
    }
}

int main() {
    // if 语句
    std::cout << "if 语句:" << std::endl;
    int age = 18;
    if (age >= 18) {
        std::cout << "你已经成年了" << std::endl;
    }
    std::cout << std::endl;
    
    // if-else 语句
    std::cout << "if-else 语句:" << std::endl;
    age = 16;
    if (age >= 18) {
        std::cout << "你已经成年了" << std::endl;
    } else {
        std::cout << "你还未成年" << std::endl;
    }
    std::cout << std::endl;
    
    // if-else if-else 语句
    std::cout << "if-else if-else 语句:" << std::endl;
    int score = 85;
    if (score >= 90) {
        std::cout << "优秀" << std::endl;
    } else if (score >= 80) {
        std::cout << "良好" << std::endl;
    } else if (score >= 70) {
        std::cout << "中等" << std::endl;
    } else if (score >= 60) {
        std::cout << "及格" << std::endl;
    } else {
        std::cout << "不及格" << std::endl;
    }
    std::cout << std::endl;
    
    // 嵌套 if 语句
    std::cout << "嵌套 if 语句:" << std::endl;
    age = 20;
    bool has_id = true;
    if (age >= 18) {
        if (has_id) {
            std::cout << "你可以进入酒吧" << std::endl;
        } else {
            std::cout << "你需要出示身份证" << std::endl;
        }
    } else {
        std::cout << "你还未成年" << std::endl;
    }
    std::cout << std::endl;
    
    // switch 语句
    std::cout << "switch 语句:" << std::endl;
    int day = 3;
    switch (day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            std::cout << "工作日" << std::endl;
            break;
        case 6:
        case 7:
            std::cout << "周末" << std::endl;
            break;
        default:
            std::cout << "无效的日期" << std::endl;
    }
    std::cout << std::endl;
    
    // 条件运算符
    std::cout << "条件运算符:" << std::endl;
    int a = 10;
    int b = 20;
    int max = (a > b) ? a : b;
    std::cout << "最大值: " << max << std::endl;
    std::cout << std::endl;
    
    // 判断闰年
    std::cout << "判断闰年:" << std::endl;
    int year = 2024;
    if (is_leap_year(year)) {
        std::cout << year << " 是闰年" << std::endl;
    } else {
        std::cout << year << " 不是闰年" << std::endl;
    }
    std::cout << std::endl;
    
    // 成绩等级评定
    std::cout << "成绩等级评定:" << std::endl;
    score = 85;
    char grade = get_grade(score);
    std::cout << "分数: " << score << ", 等级: " << grade << std::endl;
    
    return 0;
}

小结

C++ 判断语句包括:

  1. if 语句

    • 基本语法:if (条件) { 代码块 }
  2. if-else 语句

    • 基本语法:if (条件) { 代码块1 } else { 代码块2 }
  3. if-else if-else 语句

    • 基本语法:if (条件1) { 代码块1 } else if (条件2) { 代码块2 } else { 代码块3 }
  4. 嵌套 if 语句:在一个if语句内部再使用另一个if语句

  5. switch 语句

    • 基本语法:switch (表达式) { case 值1: 代码块1; break; ... default: 默认代码块; }
    • 注意事项:break语句、default分支、数据类型限制
  6. 条件运算符

    • 基本语法:条件 ? 表达式1 : 表达式2

关键概念:

  • 条件表达式:返回布尔值的表达式
  • 代码块:由花括号{}包围的一组语句
  • 短路求值:逻辑与和逻辑或运算符具有短路求值的特性

掌握判断语句是编写 C++ 程序的基础,在后续章节中,我们将学习 C++ 的函数。