在下列代码的横线处填写( ),可以使得输出是 “2”。
#include <iostream>
using namespace std;
int main() {
int array[5] = {3, 7, 5, 2, 4};
int min = 0;
for (int i = 0; i < 5; i++)
if (______) // 在此处填写代码
min = array[i];
cout << min << endl;
return 0;
}这题考的是数组遍历找最小值,但坑在min初值设成0。拿到题先想:数组里全是正数,0比它们都小,这条件永远不成立。所以得先判断if里填啥能触发min更新,再算算填进去后min最后能不能变成2。
学生最容易犯两个错:一是惯性思维,觉得min=0是默认值,直接用>或<去比,完全没意识到0比所有数组元素都小,导致条件永远为假;二是把if条件误写成赋值语句,或者混淆了找最大值和最小值的逻辑。
【考点】数组遍历求最值模型|条件判断逻辑|变量初始化陷阱
这题属于GESP三级必考的“数组遍历求最值”模型。命题人专盯“min初始值设错”这一细节——考生常把min=0当作默认值,却忘了数组元素全为正数时0比所有元素小,导致if条件永远不成立。
解题思维:先锁定目标——要让min最终等于2。2是数组最小值,所以if条件必须只在array[i]==2时成立。min初值为0,0>2为假、0<2为真,看似B行?但追一遍:i=0时0<3成立,min变3;i=1时3<7成立,min变7;后面全小于,min定格7。A同理,min=0永远不触发,输出0。C是赋值不是条件,min直接变4。三种逻辑全错,选D。
陷阱拆解:A项利用“认为min初始0小,用>找最值”的惯性思维;B项更阴险——表面像找最小,实则把min当最大值在递增;C项偷换概念,把if条件写成赋值语句。最致命的是min=0这个初始化,若数组含负数就全对了,命题人用全正数组卡住的就是“没考虑初始化场景”。
反命题思维:若把min=0改成min=100,A就变成正确答案;若改为min=-1,B才成立。遇到此类题先自问:“min初始值选错会毁掉整个逻辑吗?”
【考频与趋势】 基础语法(含数组遍历)题库共考过1295题,覆盖11个考试级别(2008-2026);逐年分布:2008年1题、2011年1题、2019年3题、2023年287题、2024年413题、2025年401题、2026年109题、null年80题;分赛事:GESP 一级332题、GESP 二级283题、GESP 三级215题、GESP 四级186题、GESP 七级91题、GESP 八级79题、GESP 六级78题、GESP 五级23题、CSP 提高级3题、CSP 入门级3题、NOIP 提高组 初赛2题。 运算符与表达式(含if条件判断)题库共考过261题,覆盖9个考试级别(2007-2026);逐年分布:2007年4题、2008年1题、2009年4题、2010年5题、2014年1题、2019年3题、2020年2题、2021年1题、2022年1题、2023年91题、2024年41题、2025年61题、2026年14题、null年32题;分赛事:GESP 一级72题、GESP 二级70题、GESP 三级47题、GESP 四级37题、CSP 入门级12题、NOIP 普及组 初赛9题、CSP 提高级7题、NOIP 提高组 初赛6题、GESP 五级1题。
【预测】 从数据看,2023-2025年基础语法和运算符考频极高(287+413+401题),且GESP三级占比稳定(215题)。未来这类“数组遍历+条件判断”的陷阱题仍将是高频考点,尤其是min初值设错、条件逻辑写反等细节。暂无足够依据预测具体年份或题型变化。