下面 C++ 代码可以计算 $1$ 到 $100$ 的累加和,采用的是穷举法。
int main()
{
int i, sum = 0;
for (int i = 1; i <= 100; i++)
sum += i;
cout << sum << endl;
cout << endl;
return 0;
}这题别急着看循环逻辑,先盯住变量声明。代码里 i 在函数头已经定义过,for 语句里又写了一遍 int i,这在 C++ 里是编译错误,程序根本跑不起来,所以直接选 B。
学生最容易犯的错误就是盯着算法看,觉得 for 循环 i 从 1 加到 100 逻辑完全正确,就误选 A。这道题的坑就在于它考的是语法而非算法,很多考生因为对变量作用域和重复声明规则不敏感,忽略了 for 循环里再次声明 int i 这个动作,导致编译报错。
这道题考查的是《C++ 语法》模块中关于变量声明与作用域的核心规则。命题人专门设计这种陷阱,就是要区分考生是只懂算法逻辑,还是真正掌握了 C++ 的语法规范。在 C++ 中,变量一旦在某个作用域内被声明,就不能在同一作用域内再次用相同的名字声明,哪怕类型和初始化值都一样也不行。这道题里,i 在函数开头已经用 int i 定义过了,后面 for 循环里又写了一遍 int i,这就是典型的重复声明错误。命题人利用考生对穷举法求和逻辑的熟悉度,诱导他们忽略语法细节,从而选出错误的 A 选项。
拿到这道题,第一步不要急着去模拟循环过程,先扫描代码的整体结构。看到 int i, sum = 0; 这一行,心里要明确:i 已经在这个作用域里有了。接着往下看,for (int i = 1; i <= 100; i++),这里又出现了一个 int i。根据 C++ 规则,这是非法的。编译器在预处理和编译阶段就会报错,程序无法进入运行阶段,自然也就不会输出 sum 的值。所以,无论循环逻辑多么完美,只要编译不过,答案就是 B。这是解题的关键切入点。