4.2 if语句

正在加载视频播放器…

GESP C++ 一级:if 语句精讲

核心目标:掌握 if、if-else、if-else if-else、嵌套 if 的写法,理解条件真假、代码块、执行流程,能结合关系运算符和逻辑运算符解决分支问题。
if 看条件,条件为真就执行;条件为假就跳过或走 else;多分支从上到下判断,一旦成立,后面不再判断。


一、if 语句是什么

if 是分支结构语句,用来根据条件决定程序走哪条路。

基本思想:

如果 条件成立,就执行某些语句;
否则,执行另一些语句或什么都不做。

示例:

int score;
cin >> score;

if (score >= 60) {
    cout << "及格" << endl;
}

如果 score >= 60 成立,输出“及格”;否则什么都不输出。


二、if 的三种基本形式

1. 单分支:if

语法:

if (条件) {
    语句块;
}

示例:

int a;
cin >> a;

if (a > 0) {
    cout << "正数" << endl;
}

执行流程:

  • 条件为真:执行 {} 里的语句。
  • 条件为假:跳过 {},继续执行后面的代码。

2. 双分支:if-else

语法:

if (条件) {
    语句块1;
} else {
    语句块2;
}

示例:

int a;
cin >> a;

if (a % 2 == 0) {
    cout << "偶数" << endl;
} else {
    cout << "奇数" << endl;
}

执行流程:

  • 条件为真:执行语句块1。
  • 条件为假:执行语句块2。
  • 两个分支只会执行一个。

3. 多分支:if-else if-else

语法:

if (条件1) {
    语句块1;
} else if (条件2) {
    语句块2;
} else if (条件3) {
    语句块3;
} else {
    语句块4;
}

示例:成绩等级

int score;
cin >> score;

if (score >= 90) {
    cout << "A" << endl;
} else if (score >= 80) {
    cout << "B" << endl;
} else if (score >= 70) {
    cout << "C" << endl;
} else if (score >= 60) {
    cout << "D" << endl;
} else {
    cout << "E" << endl;
}

执行流程:

  1. 先判断条件1,成立就执行语句块1,后面全部跳过。
  2. 条件1不成立,再判断条件2。
  3. 条件2不成立,再判断条件3。
  4. 如果所有条件都不成立,执行 else。

重点:多分支是“从上到下,一真即停”。


三、条件表达式

if 后面的括号里是条件表达式,结果是一个 bool 值:

  • true:真,执行。
  • false:假,不执行。

1. 关系表达式

if (a > b) { }
if (a == b) { }
if (a != b) { }
if (a >= 60 && a <= 100) { }

2. 逻辑表达式

if (a > 0 && b > 0) { }      // 两个都大于 0
if (a == 0 || b == 0) { }    // 至少一个等于 0
if (!flag) { }               // flag 为假时执行

逻辑运算符:

运算符 含义 说明
&& 逻辑与 两边都真才真
|| 逻辑或 一边真就真
! 逻辑非 真变假,假变真

3. 直接使用变量

C++ 中:

  • 0 表示假。
  • 非 0 表示真。
int a = 1;
if (a) {
    cout << "真";
}

等价于:

if (a != 0) {
    cout << "真";
}

4. 布尔变量

bool flag = true;

if (flag) {
    cout << "成立";
}

等价于:

if (flag == true) {
    cout << "成立";
}

四、代码块与花括号

1. 只有一条语句时可以省略花括号

if (a > b)
    cout << a << endl;

但强烈建议永远写花括号,避免出错。

2. 多条语句必须用花括号

if (a > b) {
    cout << "a 大" << endl;
    cout << a << endl;
}

如果不加花括号:

if (a > b)
    cout << "a 大" << endl;
    cout << a << endl;   // 这行不受 if 控制,总会执行

3. 花括号的作用

  • 把多条语句组合成一个语句块。
  • 让 if 或 else 控制整个块。
  • 提高代码可读性。

五、嵌套 if

if 里面还可以再写 if。

示例:判断三个数中的最大值

int a, b, c;
cin >> a >> b >> c;

int maxv;
if (a > b) {
    if (a > c) {
        maxv = a;
    } else {
        maxv = c;
    }
} else {
    if (b > c) {
        maxv = b;
    } else {
        maxv = c;
    }
}

cout << maxv << endl;

更简单的写法:

int maxv = a;
if (b > maxv) maxv = b;
if (c > maxv) maxv = c;
cout << maxv << endl;

悬空 else 问题

else 总是和最近的、未匹配的 if 配对。

if (a > 0)
    if (b > 0)
        cout << "都正";
else
    cout << "a 不正";

这里的 else 实际和里面的 if (b > 0) 配对,不是和外面的 if (a > 0)。

解决方法:加花括号。

if (a > 0) {
    if (b > 0) {
        cout << "都正";
    }
} else {
    cout << "a 不正";
}

六、常见分支模型

1. 判断正负零

int n;
cin >> n;

if (n > 0) {
    cout << "正数";
} else if (n < 0) {
    cout << "负数";
} else {
    cout << "零";
}

2. 判断奇偶

if (n % 2 == 0) {
    cout << "偶数";
} else {
    cout << "奇数";
}

3. 求两个数最大值

if (a > b) {
    cout << a;
} else {
    cout << b;
}

4. 求三个数最大值

int maxv = a;
if (b > maxv) maxv = b;
if (c > maxv) maxv = c;
cout << maxv;

5. 判断闰年

if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
    cout << "闰年";
} else {
    cout << "平年";
}

6. 成绩等级

if (score >= 90) {
    cout << "A";
} else if (score >= 80) {
    cout << "B";
} else if (score >= 70) {
    cout << "C";
} else if (score >= 60) {
    cout << "D";
} else {
    cout << "E";
}

7. 判断三角形

if (a + b > c && a + c > b && b + c > a) {
    cout << "能构成三角形";
} else {
    cout << "不能构成三角形";
}

8. 字符判断

char c;
cin >> c;

if (c >= '0' && c <= '9') {
    cout << "数字";
} else if (c >= 'A' && c <= 'Z') {
    cout << "大写字母";
} else if (c >= 'a' && c <= 'z') {
    cout << "小写字母";
} else {
    cout << "其他字符";
}

七、if 与 switch 的简单对比

一级主要考 if,switch 了解即可。

项目 if switch
判断条件 范围、关系、逻辑都可以 通常判断相等
常用场景 大小比较、范围判断 固定取值分支
示例 if (score >= 60) switch (op)
灵活度 高 较低

一级建议:优先掌握 if。


八、易错点

  1. = 与 == 混淆

    if (a = 1)    // 错误:这是赋值,条件恒为真
    if (a == 1)   // 正确:判断相等
    
  2. if 条件后多写分号

    if (a > b);   // 错误:分号让 if 空执行
    cout << a;    // 这行总会执行
    

    正确:

    if (a > b) {
        cout << a;
    }
    
  3. else 悬空

    if (a > 0)
        if (b > 0)
            cout << "都正";
    else
        cout << "a 不正";   // else 实际和里面的 if 配对
    

    建议加花括号。

  4. 花括号漏写导致多条语句不受控

    if (a > b)
        cout << "a 大" << endl;
        cout << a << endl;   // 不受 if 控制
    
  5. 范围判断连写

    if (0 < a < 10)        // 错误逻辑
    if (a > 0 && a < 10)   // 正确
    
  6. 逻辑运算符优先级错误

    if (a > 0 || b > 0 && c > 0)   // && 优先级高于 ||
    

    建议加括号:

    if ((a > 0 || b > 0) && c > 0)
    
  7. 多分支顺序错误

    if (score >= 60) {
        cout << "D";
    } else if (score >= 90) {
        cout << "A";
    }
    

    这样 95 分也会输出 D。应把范围大的条件放前面或按从高到低判断。

  8. 浮点数直接用 == 比较

    double a = 0.1 + 0.2;
    if (a == 0.3) { }   // 可能不成立
    
  9. 输出多余提示语
    考试时不要输出“请输入”等提示。

  10. 忘记初始化变量
    在 if 中赋值,但某些分支没赋值就使用,结果不确定。


九、阅读程序写结果

题目 1

int a = 5, b = 3;
if (a > b) {
    cout << "A";
} else {
    cout << "B";
}

输出:

A

题目 2

int a = 5, b = 3;
if (a < b) {
    cout << "A";
} else {
    cout << "B";
}

输出:

B

题目 3

int score = 85;
if (score >= 90) {
    cout << "A";
} else if (score >= 80) {
    cout << "B";
} else if (score >= 70) {
    cout << "C";
} else {
    cout << "D";
}

输出:

B

题目 4

int a = 0;
if (a) {
    cout << "真";
} else {
    cout << "假";
}

输出:

假

题目 5

int a = 5;
if (a = 0) {
    cout << "真";
} else {
    cout << "假";
}

输出:

假

解释:a = 0 是赋值,表达式的值为 0,即 false。

题目 6

int a = 5;
if (a = 1) {
    cout << "真";
} else {
    cout << "假";
}

输出:

真

解释:a = 1 是赋值,表达式的值为 1,即 true。
这是错误写法,不要模仿。

题目 7

int a = 3, b = 5;
if (a > 0 && b > 0) {
    cout << "都正";
} else {
    cout << "不是都正";
}

输出:

都正

题目 8

int y = 2000;
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
    cout << "闰年";
} else {
    cout << "平年";
}

输出:

闰年

十、速查表

需求 写法
单分支 if (条件) { ... }
双分支 if (条件) { ... } else { ... }
多分支 if (条件1) { ... } else if (条件2) { ... } else { ... }
判断大于 if (a > b)
判断相等 if (a == b)
判断范围 if (a > 0 && a < 10)
判断奇偶 if (n % 2 == 0)
判断闰年 if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
逻辑与 &&
逻辑或 ||
逻辑非 !
布尔变量判断 if (flag)
取反判断 if (!flag)

十一、总结

if 语句是一级考试中分支结构的核心。记住七句话:

  1. if 看条件,条件为真就执行。
  2. if-else 二选一,只会执行一个分支。
  3. if-else if-else 从上到下判断,一真即停。
  4. 多条语句必须加花括号。
  5. else 和最近的未匹配 if 配对,建议加花括号。
  6. = 是赋值,== 是判断相等,不要写错。
  7. 范围判断要写成 a > 0 && a < 10,不能连写 0 < a < 10。

复习时多练“阅读程序写结果”和“根据条件写程序”两类题,重点注意条件顺序、花括号、==、逻辑运算符和边界值。考试中先读清题目条件,再确定用哪种 if 结构,最后检查输出格式。