CSP-J 入门级 · CSP 2019 入门级第一轮 第 4 题

选择题 · 答案 A · 考点:循环结构

← 整套速查表 CSP-J 入门级 全部真题

题目

若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 $0$)

s = a;  
for (b = 1; b <= c; b++) s = s - 1;  

则与上述程序段功能等价的赋值语句是()

答案:A

考点

循环结构

解题思维

这题核心就是数循环跑了多少次。先别急着想b最后是多少,盯着循环条件b<=c和步长b++,一眼就能看出b从1数到c,正好c次。每次s减1,那总共就是减了c个1,直接写成s=a-c就完事了。

常见错误

最容易掉进命题人设的‘陷阱’里,就是盯着循环结束后b的值(c+1)去凑答案,误选s=a-b,完全没读懂题目问的是‘功能等价’而非‘循环变量状态’。还有人会机械地想s=s-c,忽略了s在循环外已经被赋值为a了,直接改s没意义。其实只要抓住‘执行次数×每次变化量’这个基本逻辑,就不会被这些干扰项带偏。

详细解析(节选)

考点一句话:本题考查for循环执行次数的判定与整体功能等价转换,属于循环结构的基础应用。

把概念说人话:for循环的三要素是初始化、判断条件和步进。这里b从1开始,只要b不超过c就继续跑,每次跑完b加1。这意味着b会依次取1,2,3,...,c这些值,一旦b变成c+1,条件b<=c就不成立了,循环立刻结束。所以循环体s=s-1被执行了c次,这是解题的绝对核心。

命题人的挖坑思路:命题人特意把循环变量b保留到了c+1,就是想诱导你盯着b的最终值去凑答案。比如看到b最后是c+1,你可能下意识认为s和b有关系,从而误选s=a-b(选项B);或者看到s在循环里被减了,就以为可以直接在s上操作,选s=s-c(选项C)。这些选项看起来都有点道理,但都不符合题目要求的‘功能等价’——题目问的是整个程序段运行完后的效果,而不是某个中间状态或循环变量的值。

拿到题怎么想:先读一遍程序,s=a,然后一个for循环,每次s减1,循环条件是b从1到c。脑子里立刻浮现一个画面:s从a开始,减一次变成a-1,再减一次变成a-2,……,减了c次之后,s就变成了a-c。这就是整个程序段的功能。至于b最后是多少,根本不重要,题目没问b,只问s的等价赋值。

一步步推演: 1. 初始:s = a 2. 第一次循环(b=1):s = a - 1 3. 第二次循环(b=2):s = a - 2 4. 第三次循环(b=3):s = a - 3 5. …… 6. 第c次循环(b=c):s = a - c 7. 循环结束,b变成c+1,但s已经定格在a-c了

所以,整个程序段等价于一条简单的赋值语句:s = a - c。

验证一下:随便给组数,比如a=10, c=3。程序跑完s=10-1-1-1=7。而a-c=10-3=7,结果一致。再试a=5, c=1,程序s=5-1=4,a-c=5-1=4,也对。这说明我们的推导是稳健的。

避坑总结:千万别被b的最终值迷惑,题目问的是‘功能等价’,不是‘循环变量状态’。s=a-b是错的,因为b在循环结束后是c+1,s=a-(c+1)显然不对。s=s-c也是错的,因为s在循环外已经被赋值为a了,直接改s没意义。只有s=a-c才准确表达了整个程序段的效果。

考频与趋势:循环结构是信息学竞赛最基础的考点之一,题库里共考过609题,覆盖从2008年到2026年的12个级别。从逐年分布看,2008-2018年每年考3-13题不等,2019年考了4题,2022年突然跳到77题,2023年更是飙升到128题,2024年158题,2025年161题,2026年161题,呈现明显的爆发式增长趋势。分赛事来看,GESP二级考了172题,一级139题,三级89题,四级87题,NOIP普及组初赛56题,提高组初赛23题,CSP入门级8题,提高级5题,GESP五级16题,六级9题,七级3题,八级2题。这说明循环结构在各级别、各类赛事中都高频出现,尤其是GESP二级和一级,以及NOIP普及组初赛,是必考内容。

未来预测:基于上述数据,循环结构的考频在近年持续上升,且分布在各个级别和赛事中,可以预测未来几年它仍将是高频考点,尤其在GESP二级、一级、NOIP普及组初赛和CSP入门级中。命题人可能会继续从循环次数、循环变量状态、循环体功能等价等角度出题,难度可能从简单计数逐渐过渡到结合数组、累加、累乘等复合操作。但无论如何,掌握循环次数的判定和整体功能等价转换,是应对这些题目的基本功,必须扎实练好。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断