GESP 一级 · GESP 202309 C++ 一级 第 15 题

选择题 · 答案 A · 考点:循环控制

← 整套速查表 GESP 一级 全部真题

题目

执行以下 C++ 语言程序后,输出结果是( )。

int n = 5, s = 1;
for (; n = 0; n--)
    s *= n;
cout << s << endl;
答案:A

考点

循环控制

解题思维

这题别急着模拟循环,关键看条件里那个n=0是什么。赋值表达式的值就是赋的值(0),在布尔判断里是假,所以循环一次都不进,s保持初值1。

常见错误

最容易把n=0看成n==0,以为条件成立,进去执行一次s*=n把s变成0,选B。还有人没注意赋值优先级,以为会先判断再赋值,或者误以为循环会跑完5次算出120选C。其实只要记住赋值表达式有返回值,且返回值是赋的值,就能一眼看出条件为假。

详细解析(节选)

考点定位

GESP一级《循环结构》模块,核心考察对循环条件求值规则的理解。命题人卡住的是考生对“赋值表达式在条件判断中的行为”这一底层语法——绝大多数人会习惯性把n = 0当成n == 0,导致整题做错。

解题思维(拆解与通法)

看到for (; n = 0; n--)先定位三重结构:初值已定义、条件在中间、更新在最后。关键观察:条件是n = 0,这是赋值表达式,不是比较;赋值表达式的值是赋值的值(0),在布尔上下文中为假。

推理链:条件为假 → 循环体跳过 → 更新n--不执行 → s保持初始值1 → 输出1。

这一类题的通法是:遇到循环条件里出现单个运算符,先判断是赋值还是比较,再回忆运算符优先级——赋值优先级低于逻辑非和关系运算符,所以它一定会先被求值并产生值。

陷阱拆解(命题人的套路)

反命题思维(教练升华)

如果把条件改成n > 0,循环会执行5次,s变成120,答案翻到C;如果改成n = n - 1,循环条件永远为假,s还是1。一句话提醒:刷到循环条件里出现单个运算符的题,先问自己“这是赋值还是比较?赋值的话值是什么?”

考频与趋势

基础语法:题库共考过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题。 控制结构:题库共考过429题,覆盖7个考试级别(2009-2026);逐年分布:2009年2题、2023年81题、2024年138题、2025年160题、2026年45题、null年3题;分赛事:GESP一级133题、GESP二级133题、GESP三级84题、GESP四级76题、CSP入门级1题、NOIP提高组初赛1题、NOIP普及组初赛1题。 循环结构:题库共考过609题,覆盖12个考试级别(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题、null年1题;分赛事:GESP二级172题、GESP一级139题、GESP三级89题、GESP四级87题、NOIP普及组初赛56题、NOIP提高组初赛23题、GESP五级16题、GESP六级9题、CSP入门级8题、CSP提高级5题、GESP七级3题、GESP八级2题。 循环控制:题库共考过5题,覆盖3个考试级别(2019-2024);逐年分布:2019年2题、2023年2题、2024年1题;分赛事:CSP提高级2题、GESP二级2题、GESP一级1题。

预测

暂无足够依据预测未来可能怎么考。

同考点真题

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