NOIP 普及组初赛 · NOIP 2016 普及组初赛试题 第 12 题

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

← 整套速查表 NOIP 普及组初赛 全部真题

题目

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

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

则与上述程序段修改 $s$ 值的功能等价的赋值语句是()。

答案:B

考点

循环结构

解题思维

这道题考循环累加的本质。拿到这种 for 循环,别被变量 b 晃眼,直接看循环体在算什么、循环跑了几趟。s 初始是 a,循环里每次 s 都加 1,一共跑了 c 次,所以最终就是 a 加上 c 个 1,直接写成 s = a + c 就对了。

常见错误

最容易栽跟头的就是盯着循环变量 b 看,误以为循环结束后 b 等于 c,从而选 A。其实 b 在循环结束时已经自增了,等于 c+1,而且 b 只是计数器,跟 s 的累加过程没关系。另一个坑是 C 选项,看到 s = s + c 觉得是‘加 c 次’,但题目里 s 的初始值被重置成了 a,不是原来的 s,所以不能直接套用。记住,循环等价变换只看‘加了多少次’和‘每次加多少’,跟循环变量名无关。

详细解析(节选)

考点与概念

这道题考查的是循环结构的等价变换,核心在于理解循环变量在循环结束后到底是多少,以及循环体执行了多少次。

在 C/C++ 等语言中,for (b = 1; b <= c; b++) 这个循环的完整流程是: 1. 初始化:把 b 设为 1。 2. 条件判断:检查 b 是否小于等于 c。 3. 循环体:如果条件成立,执行循环体(这里是 s = s + 1)。 4. 迭代:b 自增 1(b++)。 5. 回到步骤 2。

当循环结束时,意味着条件 b <= c 第一次不成立。因为 b 每次只加 1,所以循环结束时,b 的值一定是 c + 1。这是一个非常经典的陷阱,很多同学会直觉地认为循环结束时 b 等于 c,从而掉进坑里。

命题视角:为什么考这个?

命题人特别喜欢在这种基础循环里挖坑,目的很明确:

这类题目在 NOIP 普及组初赛里出现频率不低,属于高频考点。从题库数据来看,循环结构总共考过 609 题,覆盖从 2008 年到 2026 年的所有年份(2008 年 7 题、2009 年 3 题、2010 年 3 题、2011 年 6 题、2012 年 5 题、2013 年 7 题、2014 年 8 题、2015 年 4 题、2016 年 12 题、2017 年 11 题、2018 年 13 题、2019 年 4 题、2022 年 1 题、2023 年 77 题、2024 年 128 题、2025 年 158 题、2026 年 161 题)。在分赛事分布上,GESP 二级考过 172 题,GESP 一级考过 139 题,NOIP 普及组初赛考过 56 题。这说明循环不仅是算法题的基础,也是初赛选择题的常客,尤其是 GESP 和 NOIP 普及组,必须熟练掌握。

同考点真题

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