文章

【GESP】C++一级考试大纲知识点梳理(考点7,8,11), (4) 逻辑运算与分支结构

程序如果不只是“流水账”,就需要具备做判断的能力。GSEP 一级考试的核心难点往往就出现在条件判断和下一篇的循环上。本篇涉及考点 7811

(7)掌握逻辑运算与(&&)、或(||)、非(!)。 (8)掌握关系运算:大于、大于等于、小于、小于等于、等于、不等于。 (11)掌握分支结构程序的编写,掌握 if 语句、if-else 语句、switch 语句,了解三目运算。

一级考点系列:


一、关系运算 (Relational Operators)

对应考点:(8)掌握关系运算:大于、大于等于、小于、小于等于、等于、不等于。

关系运算就是“比较”,结果只有两种:真 (true/1)假 (false/0)

符号含义示例结果
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于4 <= 5true
==等于5 == 5true
!=不等于5 != 3true

⚠️ 高频扣分点:C++ 中判断相等用由两个等号组成的 ==。一个等号 = 是赋值! if (a = 5) 永远为真(因为先把 5 赋给 a,表达式的值为 5,非 0 即真),这是初学者最容易犯的逻辑错误。


二、逻辑运算 (Logical Operators)

对应考点:(7)掌握逻辑运算与(&&)、或( )、非(!)。

当我们需要组合多个条件时(例如:既要大于 10,又要小于 20),就需要用到逻辑运算。

符号名称含义口诀
&&逻辑与 (AND)两个条件都成立,结果才为真一假则假,全真才真
||逻辑或 (OR)两个条件只要有一个成立,结果就为真一真则真,全假才假
!逻辑非 (NOT)颠倒黑白真变假,假变真

示例:判断变量 x 是否在区间 [10, 20] 内:

  • x >= 10 && x <= 20 (正确)
  • ⚠️ 高频扣分点10 <= x <= 20 (错误!这是数学写法,C++ 会先算 10<=x 得到 0 或 1,再用 0 或 1 去比较 <=20,结果永远是真)

三、分支结构 (Control Flow)

对应考点:(11)掌握分支结构程序的编写,掌握 if 语句、if-else 语句、switch 语句,了解三目运算。

3.1 if 语句

也就是“如果…就…”。

1
2
3
if (条件) {
    // 条件成立时执行的代码
}

3.2 if-else 语句

也就是“如果…就…,否则…”。

1
2
3
4
5
if (条件) {
    // 条件成立时执行
} else {
    // 条件不成立时执行
}

3.3 多重分支 (if-else if-else)

用于处理多种情况。

1
2
3
4
5
6
7
8
9
10
int score = 85;
if (score >= 90) {
    cout << "优秀";
} else if (score >= 80) {
    cout << "良好"; // 满足 >=80 且 <90
} else if (score >= 60) {
    cout << "及格";
} else {
    cout << "不及格";
}

3.4 switch 语句

适用于整数字符类型的等值判断。结构清晰,但不够灵活(不能直接判断范围)。

1
2
3
4
5
6
7
8
9
10
11
char grade = 'A';
switch (grade) {
    case 'A':
        cout << "Great!";
        break; // 别忘了 break,否则会穿透往下执行
    case 'B':
        cout << "Good!";
        break;
    default: // 相当于 else
        cout << "Other";
}

3.5 三目运算符 (? :)

一种简写的 if-else,格式为:条件 ? 真值 : 假值

1
2
int a = 10, b = 20;
int maxVal = (a > b) ? a : b; // 如果 a > b,取 a,否则取 b

四、经典案例:判断闰年

这是一个几乎必考的逻辑题。规则

  1. 能被 4 整除,但不能被 100 整除。
  2. 或者,能被 400 整除。

这就是一个综合运用逻辑运算符的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main() {
    int year;
    cin >> year;
    
    // 逻辑翻译:(被4整除 AND 不被100整除) OR (被400整除)
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        cout << year << " 是闰年" << endl;
    } else {
        cout << year << " 是平年" << endl;
    }
    
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权