GESP二级通关必看:5道真题揭秘循环与分支的“逻辑陷阱”

四季读书网 1 0
GESP二级通关必看:5道真题揭秘循环与分支的“逻辑陷阱”

很多同学在顺利通过 GESP 一级后,会觉得二级只是多学了几个单词(if, for, while),应该很简单。

但根据 CCF 官方的统计数据和考场表现来看,二级是很多孩子遇到的第一个“拦路虎”。为什么?因为从一级到二级,编程思维发生了一个质的飞跃:从“按顺序执行”变成了“按逻辑执行”

GESP 二级要求考生熟练掌握关系与逻辑运算、多重分支结构、各种循环结构以及嵌套循环。代码不再是从第一行跑到最后一行,而是会在中间跳跃、重复、判断。

今天,我们从 AdaCpp 的 GESP 真题库中精选了 5 道最具代表性的二级真题,带大家拆解其中的逻辑陷阱。

01 逻辑运算符的优先级陷阱

在二级的选择题中,逻辑表达式的计算是必考题。很多同学容易混淆 &&(与)、||(或)和 !(非)的运算顺序。

GESP二级通关必看:5道真题揭秘循环与分支的“逻辑陷阱”-第1张图片-四季读书网

【真题重现】

若变量 a = 5b = 10c = 20,则表达式 (a > b) || (b < c && a < c) 的值是?

A. true

B. false

C. 10

D. 20

【深度解析】

这道题考查的是逻辑运算符的优先级:! > && > ||

1.首先看括号内的比较:

a > b (5 > 10) 为 false

b < c (10 < 20) 为 true

a < c (5 < 20) 为 true

2.原式变为:false || (true && true)

3.根据优先级,先算 &&true && true 结果为 true

4.最后算 ||false || true 结果为 true

答案:A

备考干货
:在 C++ 中,true 对应的数值是 1,false 对应的是 0。如果题目问数值,要能够灵活转换。

02 switch-case 的“穿透”现象

分支结构除了 if-elseswitch-case 也是二级大纲的重点,而这里最大的坑就是 break 语句。

【真题重现】

阅读以下代码,输出结果是多少?

int x = 2;
switch (x) {
    case 1: cout << "A";
    case 2: cout << "B";
    case 3: cout << "C"; break;
    default: cout << "D";
}

【深度解析】

很多同学看到 x=2,匹配到 case 2,输出了 "B" 就结束了。错!

switch 语句中,如果匹配到的 case 后面没有 break,程序会继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。这叫做“穿透”现象。

1.x=2,跳转到 case 2,执行 cout << "B".

2.case 2 没有 break,程序继续向下执行 case 3

3.执行 cout << "C".

4.遇到 break,跳出 switch。

正确输出:BC

03 循环中的“差一错误” (Off-by-one)

循环结构(for/while)是二级的核心。最容易丢分的地方不是循环体怎么写,而是循环多少次

【真题重现】

计算 1 到 100(含)之间所有偶数的和。

int sum = 0;
for (int i = 1; i < 100; i++) {
    if (i % 2 == 0) {
        sum += i;
    }
}
cout << sum;

这段代码能得到正确结果吗?

【深度解析】

不能。题目要求是 1 到 100 (含)

代码中的条件是 i < 100,这意味着当 i 变成 100 时,循环条件不满足,循环终止。因此,100 这个偶数没有被加进 sum 中。

这是典型的“差一错误”。正确的写法应该是 i <= 100

AdaCpp 学习建议
:在 AdaCpp 的在线 IDE 中,你可以输入这段代码并运行。如果结果不对,可以使用我们的 AI 智能助手功能。选中代码,点击“解释代码”或“查找Bug”,AI 会明确告诉你循环边界的问题,并给出修复后的代码。对于初学者来说,这种即时反馈能极大地加深对逻辑的理解。

04 嵌套循环与图形打印

二级考试中最后两道编程题,往往有一道是图形打印或简单的数学规律题,这通常需要用到双层循环。

【真题重现】

输入一个整数 n,输出 n 行的直角三角形。例如 n=3 时输出:

*
**
***

【解题思路】

这需要两层循环:

外层循环控制行数(从第 1 行到第 n 行)。

内层循环控制每一行打印的星号数量。

观察规律:第 i 行有 i 个星号。

【参考代码】

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {      // 外层循环控制行
        for (int j = 1; j <= i; j++) {  // 内层循环控制列
            cout << "*";
        }
        cout << endl; // 每打完一行要换行
    }
    return 0;
}

易错点:忘记在内层循环结束后输出 endl 进行换行,导致所有星号挤在一行。

05 简单数学逻辑:数位分离

虽然二级不考复杂的数论,但“水仙花数”、“回文数”等需要拆解整数各位数字的题目属于简单计算范畴,是二级的高频考点。

【真题重现】

输入一个三位数,输出它个位、十位、百位数字之和。

【深度解析】

这道题考查对取模运算(%)和整数除法(/)的综合运用。

假设输入数字为 n

1.个位n % 10 (例如 123 % 10 = 3)

2.十位(n / 10) % 10 (例如 123 / 10 = 12,12 % 10 = 2)

3.百位n / 100 (例如 123 / 100 = 1,因为是整数除法)

很多同学在处理十位时,容易写成 n % 100,这会得到 23 而不是 2,导致计算错误。


总结与备考建议

GESP 二级考试虽然没有复杂的算法,但对逻辑的严密性要求很高。break 漏写、循环边界搞错、整数除法精度丢失,这些细节往往决定了是 90 分还是 59 分。

如何高效备考?

1.多动手写代码:光看书是不够的,必须亲自敲代码,观察程序的运行结果。

2.利用工具纠错:推荐使用 AdaCpp 平台进行练习。

零门槛环境:打开浏览器就能写 C++,不需要花几个小时去配置复杂的编译器环境。

L1入门基础课程:我们的 L1 课程完整覆盖了 GESP 1-2 级的所有知识点,从变量到循环嵌套,都有系统的视频讲解和配套练习。

海量真题库:AdaCpp 收录了从 2023 年至今的 78 套 GESP 真题。你可以在线刷题,系统会自动判题。如果做错了,AI 助手会像真人老师一样,一步步引导你发现逻辑漏洞,而不是直接丢给你一个答案。

距离下一次 GESP 考试越来越近了,希望大家都能避开这些逻辑陷阱,顺利通关!

GESP二级通关必看:5道真题揭秘循环与分支的“逻辑陷阱”-第2张图片-四季读书网

关注【AdaCpp】公众号

回复 “GESP” 获取最新考试大纲与备考白皮书

回复 “真题” 免费体验 GESP 在线真题测评

让 AI 陪你快乐学编程,轻松拿证书!

上一个当前已是最后一个了

下一个当前已是最新一个了

抱歉,评论功能暂时关闭!