题目
下面的 C++ 代码执行后将输出 45。( )
int cnt;
for (int i = 0; i < 10; i++)
cnt += 1;
cout << cnt;
答案:B
考点
循环结构
解题思维
答案B。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
常见错误
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
详细解析(节选)
【考点】变量初始化|循环结构|累加运算
1. 🎯 考纲定位
- 考查《GESP 一级大纲》"基本语法与表达式"模块
- 命题人卡的是"只凭循环次数就断定结果"的直觉陷阱
2. 🧠 解题思维
- 先确认全局变量 int cnt 默认初始为 0(C++ 铁律)
- 再看 for 循环:i 从 0 到 9 共执行 10 次
- 每次 cnt += 1 累加 1,最终 cnt = 10
- 输出 10 ≠ 45,故选项 B 正确
3. 🪤 陷阱拆解
- 选项 A 是"直觉陷阱":题目只写循环次数=10,考生易忽略 cnt 初始值
- 命题人故意用 45 这个数字,逼你重新审视代码逻辑,而非机械套公式
- 最阴险细节:cnt += 1 看起来像乘法,实为加法,用 45 迷惑人
4. 🔄 反命题思维
- 若把循环改成"cnt += 4.5",输出 45 就对了,但一级不考浮点
- 若改成"for (int i = 0; i < 45; i++) cnt += 1",输出 45 也成立,但这样就把考点从"变量初始化"转移到了"循环次数与最终值的关系"
- 刷到类似题时,先问自己:"cnt 初始值是多少?循环体到底执行几次?累加的是多少?"这三问能避开所有数字陷阱。
同考点真题
- 第 23 题· NOIP 2008 普及组初赛试题 · 答案 23看解析 →
- 第 25 题· NOIP 2008 普及组初赛试题 · 答案 5 4 10 1 6 22 -59 -6 -11 -6看解析 →
- 第 26 题· NOIP 2008 普及组初赛试题 · 答案 DBGEFCA看解析 →
- 第 27 题· NOIP 2008 普及组初赛试题 · 答案 change[i] >= 'A' && change[i] <= 'Z'change[i] <= 'Z'str[i] >= 'A' && str[i] <= 'Z'str[i] <= 'Z'str[i] = change[str[i] - 'a'];ChangeString();看解析 →
- 第 28 题· NOIP 2008 普及组初赛试题 · 答案 a[left]a[j]<valuea[j]<=valuevalue>a[j]value>=a[j]a[i]>valuea[i]>=valuea[i]=value;i+1,right,nFindKth(left,i-1,n);看解析 →