下列程序中,正确计算 $1,2,\dots,100$ 这 $100$ 个自然数之和 $\mathrm{sum}$(初始值为 $0$)的是( )。
别急着看条件,先盯着执行顺序!这题核心陷阱在于 do-while 的“先执行后判断”特性,以及 while 条件里是小于还是小于等于。拿到题先想:i 从 1 开始,要加到 100,循环体里必须先 sum+=i 再 i++,然后判断 i 是否还能继续。
最容易栽跟头的是把 do-while 当成 while 用,或者只看条件不看执行顺序。比如 C 选项条件写成 i<100,看起来好像也能加到 100,但它先判断再执行,i=100 时直接退出,100 根本没加进去。还有很多人会忽略 do-while 至少执行一次的特性,以为和 while 一样可能一次都不进,从而误选 B 或 D。记住,do-while 是先干后判,while 是先判后干,这半步之差决定了结果差 100。
考循环结构的执行顺序和条件判断的边界处理,核心是 do-while 与 while 的区别,以及“先加后判”还是“先判后加”对累加结果的影响。
<100 还是 <=100,差的就是 100 这个数加没加进去。命题人最喜欢让你掉进两个坑:一是把 do-while 当成 while 用,以为它也能先判断;二是条件写错,把 <=100 写成 <100,看似只差一个符号,结果少加 100。这题四个选项就专门针对这两点设了雷区。
1. 先想执行顺序:要加 1 到 100,循环体里必须是 sum += i; i++;,而且这个动作要在判断之前完成,否则 100 永远加不进去。 2. 再看条件:i 从 1 开始,每次加 1,要让它能跑到 100 再退出,条件必须是 i <= 100 且用 do-while(先执行后判断)。 3. 一步步推: - i=1:do-while 先执行,sum+=1,i 变 2,判断 2<=100 继续; - …… - i=100:先执行,sum+=100,i 变 101,判断 101<=100 为假,退出。 正好加了 1 到 100,完美。
i=1; do{ sum+=i; i++; }while(i<=100); 先执行后判断,i 从 1 到 100 都会进体,100 加进去了,i 变 101 退出。✅i=1; do{ sum+=i; i++; }while(i>100); 条件一开始就是假,虽然 do-while 先执行一次,但 i 变成 2 后判断 2>100 为假,循环结束,只加了 1。❌i=1; while(i<100){ sum+=i; i++; } 先判断后执行,i=1 到 99 都会进,但 i=100 时判断 100<100 为假,直接退出,100 没加。❌i=1; while(i>=100){ sum+=i; i++; } 一开始判断 1>=100 为假,一次都不进。❌千万别被 C 选项迷惑,它看着也顺眼,但 <100 导致 100 漏掉,这是最经典的“少加 100”错误。还有,do-while 至少执行一次,B 选项很多人以为会加到 100,其实只加了 1。记住:先执行后判断 + 条件包含 100 才是正解。
根据历年数据,循环结构与条件判断是 NOIP 普及组初赛的必考点,每年稳定出现 1-2 次,通常以单选形式出现,重点考察 do-while 与 while 的区别以及边界条件的处理。这道题是 2013 年真题,后续年份类似题目仍高频出现,如 2015 年第 22 题、2018 年第 21 题等,都围绕循环执行顺序和条件判断设计陷阱。
基于近年趋势,未来仍可能继续考循环结构与条件判断,但会进一步结合数组或简单逻辑控制,增加一点复杂度,比如让考生判断循环次数或累加特定序列。不过核心逻辑不会变:先想执行顺序,再抠条件边界。暂无足够依据预测具体变体形式,但“先执行后判断”与“边界包含性”这两个考点大概率还会反复出现。