☰
GESP二级C++选择判断题备考:高频语法陷阱与答题策略
2026/10/20 18:18:34 网站建设 项目流程

GESP二级的选择判断题,很多孩子不是不会,而是被“坑”在细节上——这句话我几乎每一轮备考都要跟学生讲一遍。作为带过多届考生的老师,我见过太多平时写代码没问题、一上机就AC,却在选择判断题上丢分严重的例子。原因很简单:写代码时可以靠编译器纠正语法错误,做选择题时只能靠脑子里那套“语法模型”,模型里任何一个模糊点都会被出题人精准命中。

这篇内容主要面向准备考GESP二级的学生、信息学竞赛刚入门的孩子,以及陪着备考的家长。我会把这几年带学生总结出来的考点地图、高频陷阱、错误选项设计规律和仿真题解析一次讲清楚。你不需要把C++语法学得多深,但只要你把下面这些细节吃透,选择判断题拿到高分的把握会大很多。

1. 二级选择判断题到底考什么:先懂考纲再谈刷题

1.1 考纲模块的“明面”与“暗面”

GESP二级的考纲,明面上列的是C++语法的基础模块:数据类型、运算符、顺序结构、选择结构、循环结构、一维数组、字符串基础、函数基础、指针入门、结构体初步,还有最基础的输入输出。但如果你只按这个清单去复习,大概率会漏掉真正拉分的“暗面”。

所谓暗面,就是那些考纲没有单独列出、却几乎每套卷子都会出现的“语法细节判断”。比如:int类型到底占几个字节在什么范围内、char类型能不能参与整数运算、for循环的循环体不加大括号时究竟管到哪一行、&&和||的短路求值会不会让后面的表达式不执行……这些点单个拿出来都不难,但它们恰恰是选择判断题最喜欢做文章的地方。

为什么?因为选择判断题的命题目标和编程题完全不同。编程题考的是“能不能把功能做出来”,选择判断题考的是“这个语法点你到底是真懂还是半懂”。半懂的人写代码时往往能蒙对,因为编译器会兜底;但考试没有编译器,出题人只需要把一处细节稍微改一改,就能把“半懂”的人筛出来。

我带过的一个学生A就是典型例子。他上机写题很顺手,但每次做模拟卷的选择题都错四五道。后来我把错题整理出来一看,几乎全是同一类问题:=和==混用、数组下标从0开始还是从1开始、i++和++i在表达式里的区别、else跟哪个if匹配。这些不是他不会,是他在写代码时从来没被“逼问”过这些细节。

所以,备考二级选择判断题的第一步,不是刷题,而是把考纲里每个模块的“边界”划清楚:什么情况是合法的,什么情况虽然能运行但结果是另一个样子,什么情况在考试里算错。边界清楚了,后面所有技巧才有意义。

1.2 选择、判断两种题型的命题倾向

二级卷子里,选择题和判断题的难度曲线不太一样。选择题一般是“给定代码问输出”和“概念辨析”两类;判断题则更像“一句话里找出一个刺”,句子本身通常是对教材原话的改写,改得越不起眼,越容易让人选错。

从比例上看,判断正误题里“对”和“错”并不是各占一半,很多孩子在拿不准时就猜“对”,这个策略其实很危险。我统计过几套模拟题,判断题大约六成结论是“错误”,因为出题人很清楚,考生对模糊表述的第一反应往往倾向于接受。也就是说,当你觉得某个判断题“好像对”时,反而要多留个心眼。

选择题的干扰项设计也有规律,这个我在第5部分专门展开。现在先把最重要的知识点陷阱过一遍,因为无论选项怎么设计,核心都是在考这些语法细节。

2. 数据、类型转换与运算优先级:选择判断题的失分重灾区

2.1 整数除法与取模:最容易算错的结果题

这是我每轮备考必讲的第一课。只要代码里出现a / b,你首先要问自己:a和b是什么类型?如果两个都是整数,那么除法的结果就是整数——准确地说,是向零取整后的整数部分。

看这个代码:

int a = 7; int b = 2; cout << a / b;

输出是3,不是3.5。很多刚学C++的孩子会惯性写成3.5,这就是一道典型的送命题改法:把int改成double再除,结果才是3.5。出题人特别喜欢在选项里同时放3和3.5,就看你有没有注意到类型。

更有迷惑性的是负数除法。C++规定整数除法向零取整,也就是截断,而不是向负无穷取整。-7 / 2的结果是-3,因为-3是向零方向取的整。等下到竞赛阶段,有的语言向负无穷取整,结果就是-4了,但在GESP二级这个阶段,你就记“向零截断”四个字。

取模运算也有对应的坑。7 % 2等于1,这个大家都会;但-7 % 2等于多少?C++里取模结果的符号跟被除数一致,所以-7 % 2的结果是-1。判断题里经常出“取模结果不可能为负数”这种表述,你直接判错就好。

还有一个隐藏点:0能不能做除数?不能。整数除以0程序会直接崩溃,这在选择题里一般不会让你算出结果,但判断题可能会写成“任何整数除以0得到的商都是0”,这是错的,因为根本不能执行。遇到这种题,看清楚是“对违反规则行为的描述”还是“对规则本身的描述”,别被绕进去。

2.2 char与int的纠缠:字符型参与运算

二级的字符型考点几乎年年见。核心就一句话:char本质上是一个存储编码的小整数,它可以直接参与算术运算。

比如:

char c = 'A'; cout << c + 1;

这段代码输出的不是B,而是66。为什么?因为c + 1这个表达式中,char会先被提升为int再计算,结果是整数66。想输出B,得写cout << (char)(c + 1);。

反过来,把整数赋给字符变量也有门道:

char c = 65; cout << c;

这里c存的是65这个编码,输出时按字符解释,就是A。这个“整数与字符的互换”是判断题的热门选项:说“字符变量只能存储字母”是错的,字符变量存储的是整数编码,只是显示时映射成字符。

还要注意大小写字母的编码关系。'A'的编码是65,'a'的编码是97,两者相差32。选择题可能会给cout << ('a' - 'A');,结果是32,不是1。这种题会做的人觉得太简单,不会做的人会怀疑自己学了假C++。

2.3 隐式类型转换的几条硬规则

类型转换在二级考纲里不算难,但选择题特别喜欢混合出题。你记住这三条最常用的规则就行:

第一条,不同精度数据参与运算时,低精度会向高精度转换。int向double转,float向double转。所以1 / 2.0的结果是0.5,因为2.0是double,1被先转成double再除。

第二条,赋值操作时,右侧的值会向左侧变量的类型转换,可能发生截断。典型例子:

double d = 3.99; int a = d; cout << a;

输出是3,不是4,也不是3.99。这是直接截断小数部分,不四舍五入。很多孩子被数学里的四舍五入带偏,一看到就选错。

第三条,bool与整数之间的转换。非零即真,零为假。if (5)成立,if (0)不成立。单选题里出现过这种写法:

int x = 0; if (x = 1) { cout << "yes"; } else { cout << "no"; }

注意看,x = 1是赋值,不是判断相等。赋值后x的值为1,非零,所以进入if分支,输出yes。这个坑考过不知多少次:在if条件里用单等号,本质是给x赋值为1,条件恒成立。如果写成if (x == 1),才取决于x原来的值。

2.4 优先级、结合性与短路求值

优先级是二级比较头大的考点,但选择判断题通常只考几个高频组合,不需要背完整张表。你按这个顺序记就够用了:

第一梯队:括号()、取负-、取地址&第二梯队:乘除和取模* / %第三梯队:加减+ -第四梯队:移位(这一级基本不深考) 第五梯队:关系运算> < >= <=第六梯队:相等判断== !=第七梯队:逻辑与&&第八梯队:逻辑或||第九梯队:赋值=

这个顺序其实已经很靠后了,真正的考点在“关系运算符高于逻辑与和逻辑或”,以及“逻辑与高于逻辑或”。很多人会误以为&&比==优先级高,其实错了,==先算。给你一个式子:

int a = 1, b = 2; cout << (a == 1 && b == 2);

这行其实是先算a == 1得真,再算b == 2得真,最后两个真做&&,输出1。如果你脑子里顺序不对,很容易把整个式子拆成(a == (1 && b)) == 2这种离谱结构,那就彻底错了。

短路求值是另一个天天考的点。&&只要左边为假,右边就不执行;||只要左边为真,右边就不执行。出题人会通过改变右表达式来考察:

int a = 0; if (a != 0 && 100 / a > 5) { // 这行不会执行 }

因为a != 0是假,整个&&表达式已经确定为假,后面的100 / a根本不会去算,也就不会发生除零错误。判断题如果写“短路求值可以避免某些表达式被计算”,这是对的。选择题问你“表达式右侧是否执行”,你要能根据左侧结果直接判断。

这里多说一句:很多孩子背得住“短路求值”四个字,但真到了题里,看到100 / a就觉得要崩溃。关键是要养成从左往右看执行流程的习惯,而不是把整个表达式当静态数学式。这是思维方式的差别,一旦转过来,短路题就是送分题。

3. 选择结构与循环结构:控制流里的经典“脑补”陷阱

3.1 悬空else:else到底跟谁配对

悬空else问题在二级里出现的频率不算最高,但一旦出现,错误率就很高。规则只有一句话:else与最近的、还没有匹配的if结合。出题人通常会故意把代码压缩成一行,让你看不清结构:

int x = 0; if (x > 0) if (x > 5) cout << "A"; else cout << "B";

这个else看起来好像跟第一个if配对,实际上它配对的是第二个if。因为第二个if离它更近。x等于0时,第一个if条件为假,整个嵌套直接跳过,什么都没输出。很多孩子会选输出B,错。

这类题在平时练习中特别好处理:你只要把缩进按真实逻辑重新排一遍,一眼就能看出来。考试时可以动笔,把代码重新分层写清楚,比干瞪眼强太多。GESP二级是纸质或机考笔答,允许草稿演算,所以这个习惯一定要养成。

3.2 for循环的三段式与执行次数

for循环是二级循环结构里最核心的考点,考法非常固定:数清楚执行次数。

先记住一个基本公式:for(初始化; 条件; 更新),执行顺序是初始化 -> 判断条件 -> 执行循环体 -> 更新 -> 再判断条件……所以“条件首次为假”的那一次,循环体不会执行。这个结论很重要,判断题经常考“for循环的循环体至少会执行一次”,这是错的,条件一开始不满足,一次都不执行。

执行次数的计算,看清区间就能定。for (int i = 0; i < 10; i++)执行10次,i取值0到9;for (int i = 1; i <= 10; i++)也执行10次,i取值1到10。选择题喜欢把这两种混在一起,让你算输出总和。解法就是先确定区间长度,再确定步长,最后用长度除以步长。

步长的坑在i += 2这类写法上。for (int i = 0; i < 10; i += 2)的取值是0、2、4、6、8,一共5次。很多孩子会数成10次,因为他们默认每次都加1。看清更新表达式,是循环题的第一条生命线。

还有一种特殊规定:for循环的三个部分都可以省略。省略初始化表示不初始化,省略条件表示恒真,省略更新表示不更新。判断“for(;;)是一个死循环”这种表述,是对的。如果选择题让你判断for(;;)的执行情况,你要能识别出它是无限循环结构。

3.3 while与do-while的边界差异

while和do-while的唯一区别,是do-while至少执行一次循环体。这个区别看着简单,但特别适合出判断题。

来看一个经典题:

int x = 0; while (x < 0) { x++; }

循环体执行次数是0。另一个版本:

int x = 0; do { x++; } while (x < 0);

循环体执行次数是1,因为先执行后判断,x从0变成1后,条件1 < 0为假,退出。两种写法输出分别为0和1,出题人只要把while改成do-while就能制造一道新题。

很多孩子在学这个区别时能理解,但做题时粗心没看到是do-while,直接用while逻辑想,就会错。我的建议是:看到任何带do的循环,先在草稿上画一个“先做一次再判断”的箭头;看到普通while,画一个“先判断再做”的箭头。两种图一旦画出来,执行次数就不会错。

3.4 break和continue:跳出哪里、跳过哪次

break和continue是二级循环部分比较喜欢考的操作题。

break的作用是跳出当前这一层循环,不是跳出所有循环。嵌套循环里,内层遇到break只会跳出内层,外层继续正常执行。判断题爱写“break可以终止所有循环”,这是错的。

continue的作用是跳过本次循环的剩余语句,直接进入下一次循环。注意“剩余语句”这四个字,循环内continue后面的代码这轮不执行,但循环更新照常进行。看这个例子:

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

i等于2、4时,continue直接跳到更新,sum不加2也不加4;最后sum是1+3+5=9。选择题如果给你问sum的值,你要能在草稿上把1到5都列出来,逐项勾掉被跳过的项。

switch里的break也值得单独说。switch分支如果没有break,会继续向下执行下一个case,这叫“穿透”。二级的选择题经常给一个不带break的switch,让你算输出。口诀很简单:没有break就穿下去。

4. 数组、字符串、函数与指针:把“概念题”变成送分题

4.1 数组初始化与下标越界

数组是二级考纲中第一次真正引入“批量数据”概念的地方,命题集中在三个点:下标范围、初始化方式、越界后果。

下标范围是最基础的。int a[5];声明了一个长度为5的数组,合法下标是a[0]到a[4],没有a[5]。判断题几乎必考“数组下标从1开始”,这个说法是错的,C++数组下标从0开始。

初始化规则也要清楚。不完全初始化时,没有被明确赋值的元素自动被填充为0。比如:

int a[5] = {1, 2};

a[0]是1,a[1]是2,a[2]到a[4]都是0。判断题写“未初始化的全局数组元素值为随机数”,这里有个前提要区分:全局数组默认就是0,局部数组不初始化才是随机值。出题人很爱把“全局”和“局部”混在一句话里,看清修饰词再判断。

下标越界在考试里考的是“后果认知”,而不是让你运行。越界访问不会报编译错误,但运行时会访问到数组外的内存,结果不确定,可能读到垃圾值,也可能导致程序崩溃。判断题写“数组越界访问一定会导致程序崩溃”是错的,因为结果是未定义的,不是必然崩溃。这个“未定义行为”的概念很多孩子第一次接触,需要特别强调:它不是说一定会发生什么,而是说“什么都有可能”。

4.2 string与字符数组的易混细节

二级阶段字符串主要分两种:string类和C风格字符数组。考试常混在一起考,先分清再加小心。

string的操作很直观。s.length()和s.size()都返回字符串长度。注意返回类型是size_t,本质是无符号整数。如果拿它跟负数比较会出现非常反直觉的结果,二级一般不太深入,但判断题出现过“s.length()的返回值可以直接与int比较”这种说法,其实这里有个隐患,考试教材层面通常认为是允许的,但如果题目设了负数比较的陷阱,就要小心。

字符数组的规则相对旧一些。char s[10] = "hello";会在末尾自动补一个'\0'作为结束标志,所以实际能用的有效字符是9个,如果存了10个字符就不够放结束符了。判断题“字符数组的末尾一定会有结束符”这种表述,要看是否主动加'\0',C字符串常量初始化时自动带,但某些手工赋值方式不带。二级一般以自动带为主。

字符串比较也有一个方向性问题:string类型的==、<、>比较的是字典序,不是长度。它是按字符一个一个比过去,一旦比出大小就返回结果。选择题问“"abc" < "abd"的结果”,答案是1(真),因为前两个字符相同,第三个c小于d。比较长度应该用length()函数,日常初学者容易搞混的地方。

4.3 函数的值传递:形参实参的关系

函数部分二级不考递归,也不考引用传递,重点就两个:值传递机制和返回值行为。

值传递是考得最透的:函数参数接收的是实参的副本,函数内部对形参的任何修改都不会影响实参。最经典的交换函数陷阱:

void swap(int a, int b) { int t = a; a = b; b = t; } int main() { int x = 1, y = 2; swap(x, y); cout << x << " " << y; }

输出是1 2,不是2 1。因为swap里交换的是形参a和b,实参x、y的值根本没动。这道题我几乎每届都考,每届都有孩子选错。你只要记住一句话:值传递是复印件,复印件改坏了,原件不受影响。

函数返回值的判断题也很有迷惑性。void类型的函数表示无返回值,可以用return;直接结束函数,但不能写return 某个值;。反过来说,非void函数必须有return语句返回对应类型的值。判断“所有函数都一定会有返回值”是错的,void就是没有。

4.4 指针的“地址”与“解引用”

指针是二级里偏抽象的部分,但选择判断不会考太深,集中在三个符号的关系上:&取地址、*声明指针和解引用。

先看声明规则:

int x = 42; int* p = &x;

p存的是x的地址,*p是通过地址访问x的值。判断题常写“*p可以出现在赋值号的左边也可以出现在右边”,这是对的。左边是写操作,比如*p = 5;会修改x的值为5;右边是读操作,比如cout << *p;会输出x当前的值。

指针的陷阱在于把“指针的值”和“指针指向的值”搞混。看这个题:

int a = 3; int b = 8; int* p = &a; p = &b;

问:这段代码执行后,*p的值是多少?答案是8。因为p本来指向a,后来改变为指向b,取到的就是b的值。如果你心里想的是“p还指向a”,就错了。p存的是地址,地址可以改变,这是指针的核心特性。

还有一个高频判断题:“两个指针可以用==来比较它们是否指向同一个地址。”这是对的。p == q比较的是地址相同与否,不是比较它们指向的值。题面如果写成“比较两个指针是否指向同一个值”,那就错了,那比的是*p == *q。

5. 从选项设计反推答题策略:出题人比你想象的更“套路”

5.1 错误选项的四种典型制造方法

做选择判断题,最吃亏的复习方式是“只背正确结论,不看错误说法”。因为考试从来不问你“哪个是对的”,而是让你“选出正确的那个”,你必须能在四个选项里认出三个错误说法的“制造工艺”。

我总结了一下二级选择判断题里错误选项的四种典型设计方法,孩子们一旦看穿,正确率能明显提高。

第一种叫“临近改动法”。出题人拿一个正确结论,只改一个符号或一个数字。比如把i < 10改成i <= 10,执行次数就从10次变成11次;把输出a改成输出&a,就从输出值变成输出地址。这种题考的不是逻辑,是细心。

第二种叫“概念混搭法”。把两个相近的知识点缝在一起,让人以为它是同一个东西。比如把“数组下标从0开始”和“循环从1开始”混在一起,制造一道“数组下标应该从1开始以便循环方便”的伪命题。你要能识别出两个概念的边界在哪。

第三种叫“扩大适用范围法”。把一个只在特定条件下成立的结论,改成“任何情况下都成立”。比如“全局数组默认初始化为0”是对的,改成“所有数组默认初始化为0”就错了,因为局部数组不初始化是随机值。判断题里出现“所有”“任何”“一定”“必须”这类词,八成是在用这个方法。

第四种叫“偷换条件法”。题干明明是int型运算,选项却按浮点运算的结果来写;题干明明问x的值,选项写*p的值。这类错误选项需要你返回题干重新对条件,而不是顺着选项往下读。

5.2 判断题里的绝对化表述

判断题的关键词策略,在应试圈里算“老生常谈”,但确实有效。你要特别警惕这些词:所有、任何、一定、必然、绝对、只、唯一、必须、不能。

举几个典型的真/假例子:

“所有的数据类型都可以直接进行加减运算”是错的。比如字符串类型之间的“减”就不存在(虽然string可以拼接,但不能直接相减)。这种说法立不住脚,因为“所有”和“直接”是两个放大镜。

“一个函数只能有一个返回值”这个表述要看怎么理解。在二级范围里,函数的return语句确实只能返回一个值,但如果题目说“函数可以返回多个值”在二级语境下是错的。可有的判断题会玩文字游戏:“一个函数可以包含多条return语句”,这个反而是对的,因为多个return分支可以存在,但执行到哪个算哪个。

看到绝对化表述,先不要急着判错。有些绝对化结论其实是C++语法注定的,比如“数组下标越界属于未定义行为”是确定的。判断的核心是看这个“绝对”是否被语法规则真正支持,而不是看到绝对词就条件反射判错。当然,考试策略上,遇到拿不准的绝对化表述,倾向于判错的成功率会高一些,因为命题人设计判断题时确实偏爱这种陷阱。

5.3 考场上最稳的三种验证方法

选择判断题不像编程题能跑代码,但你可以在草稿纸上“手写运行”。

第一种叫“代入法”。把具体数字代入变量,沿着代码一行一行走,用箭头标注变量的变化。尤其是循环题,列出i的每次取值,把sum的变化写成一串等式。这个方法笨,但绝对可靠。

我带学生训练时,会要求他们做循环题时永远画“表格法”:行是变量,列是每轮循环结束后的值。等到考试时,即使不画完整表格,也要把关键轮次标出来。

第二种叫“排除法”。先看有没有明显错误,比如符号反了、类型不对、边界错了。把明显错误的选项划掉,剩下的二选一或三选一,正确率会提高很多。尤其是概念题,出题人在两个相近选项中往往只有一个是对的,排除掉绝对化或扩大化的那个,剩下的基本就是正解。

第三种叫“反例法”。判断题里,如果你想证明一个说法是错的,只需要构造一个反例,不用推翻它的所有逻辑。比如“所有数组未初始化时都是0”这句话,你只要在函数里写int a[3];然后说这个局部数组值不确定,一个反例就够判错了。这个是学编程的人该有的思维习惯:证伪比证明快。

6. 仿真题演练:按考试节奏逐题拆解

6.1 单选题组:结果题与概念题混搭

下面这组题是我从历届高频考点里挑出来重组而成的仿真题,难度贴近二级正式卷。建议你先自己用笔算一遍,再往下看解析。

单1:

int a = 5, b = 2; cout << a / b << " " << a % b;

A.2.5 1
B.2 1
C.2 2
D.2.5 0

解析:a和b都是int,a / b结果是整数2,不是2.5;a % b是5除以2的余数,为1。选B。这题体现的就是2.1说的“整数除法陷阱”,几乎所有二级考生都跑不掉。

单2:

int x = 0; if (x = 3) { cout << "yes"; } else { cout << "no"; }

A.yes
B.no
C. 编译错误
D. 输出不确定

解析:if (x = 3)是赋值语句,不是相等比较,x被赋值为3,条件表达式的值是3,非零即为真,所以输出yes。选A。这个考点我在2.3里专门强调过,真到模拟卷里,还会有一堆孩子因为“条件判断怎么会改变x”而选错。

单3:

int sum = 0; for (int i = 0; i <= 10; i += 3) { sum += i; } cout << sum;

A. 12
B. 15
C. 18
D. 22

解析:i取值:0、3、6、9,下一次变成12,不满足i <= 10,退出。sum = 0 + 3 + 6 + 9 = 18。选C。这里两个坑:一是别把步长当成1,二是边界是<= 10,所以9进来,12不进来。

单4:

char ch = 'a'; ch = ch - 32; cout << ch;

A.65
B.1
C.A
D.a

解析:'a'的编码是97,减32得到65,赋回给ch后,输出时按字符解析,就是大写A。选C。这题考的是字符参与运算和小写转大写的规则,我在2.2里讲过。

单5:

int arr[5] = {0}; arr[0] = 1; for (int i = 1; i < 5; i++) { arr[i] = arr[i - 1] * 2; } cout << arr[4];

A. 8
B. 16
C. 32
D. 2

解析:arr[0] = 1,循环从1到4,依次让后一个等于前一个的两倍:1、2、4、8、16。arr[4]是第5个元素,为16。选B。这题考的是数组下标从0开始的习惯。如果心里想的是“第4个元素”,会算出8,正好落到A选项。

6.2 判断题组:边改边讲为什么错

判1:“for循环的循环体至少会执行一次。”

错误。如果初始化后第一次判断条件就为假,循环体一次都不会执行。这是3.2提到的考点。正确的说法是“do-while的循环体至少会执行一次”。

判2:“局部数组未初始化时,元素的默认值是不确定的。”

正确。局部数组在栈上分配内存,没有自动清零的保证,读到的可能是随机值。这和全局数组默认初始化为0是两种情况,注意区分。

判3:“字符串"abc"的长度是4,因为还包含结束符。”

错误。"abc"这个字符串常量的长度是3,结束符'\0'不算在长度内。sizeof("abc")才是4,因为包含了结尾的'\0'。这里是把sizeof和strlen/length搞混了,二级经常在这里做文章。

判4:“函数内部修改形参的值,不会影响调用处的实参。”

正确。值传递的机制决定了形参是实参的副本,修改副本不影响原件。这就是4.3讲的swap陷阱。

判5:“break语句可以立即终止所有层的循环。”

错误。break只能终止距离它最近的那一层循环或switch。嵌套循环里,内层break只跳出内层,外层继续执行。这道题是绝对的送分题,答错了就说明3.4的内容还没过。

判6:“逻辑表达式a && b && c中,只要a为假,b和c就不会被计算。”

正确。&&从左向右求值,一旦遇到假就短路,后面所有表达式都不执行。这个判断题考察的就是2.4里的短路求值机制。

6.3 仿真题里的规律总结

做完这11道仿真题,你会发现一个规律:几乎没有一道题是考“你会不会写这个语法”,全部在考“你对这个语法的边界有没有概念”。

比如单1考整数除法,不是考你会不会写a / b,而是考你清不清楚int除以int会发生截断;判1考的是for循环的先判断后执行顺序,不是考你会不会写for。这种感觉就像是你知道怎么开车,但考试考的是“刹车距离和什么有关”,你得懂原理才能答对。

所以,后续刷题的时候,每做完一道题,我建议你额外问自己一句:如果我是出题人,我会怎么改这个题让它变得更有迷惑性?把这个思路反过来用,你的备考就不仅仅是做对一道题,而是掌握了一类题。

二级的选择判断题,说到底考的是精确性。写代码时可以靠编译器的报错来修正自己,但选择判断题里没有编译器,你脑子里那个“语法解释器”的准确度就直接决定得分。平时每遇到一个模糊点,不要放过,马上查清楚、写进错题本,这是最笨也最有效的方法。

最后再分享一个小技巧:考前一周,把自己积累的错题按“数据类型陷阱”“控制结构陷阱”“数组指针陷阱”分类过一遍,然后做两三套仿真卷,卡着时间完成。真正上了考场,你会发现很多题的选项设计似曾相识,因为出题人翻来覆去用的就是这几个套路。稳住细节,二级选择判断题拿高分没有那么玄乎。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询