以下 C++ 代码用于实现每个整数对应的因数,如输入 12 ,则输出 1 2 3 4 6 12 ;如输入 18 ,则输出 1 2 3 6 9 18 。横线处应填入代码是( )。
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
________
{
cout<<i<<" ";
}
}这题核心就是判断整除。拿到题先看循环范围 i 从 1 到 n,然后想:怎么判断 i 是 n 的因数?用取模运算 n%i==0 最直接,余数为 0 说明整除,填 A 就对了。
最容易掉进两个坑:一是把取模%和除法/搞混,看到除号下意识想 n/i==0,结果在 i<=n 的循环里除法商永远大于等于 1,条件永远不成立;二是把整除和余数反了,选!=0 就把所有非因数都输出来了,完全违背题意。还有少数人连语法都忘了,以为 if 后面要写赋值,结果报语法错误。
【考点定位】 这道题出自 GESP C++ 四级《循环与条件》模块,考查的是因数枚举与取模运算的结合。命题人特意把“整除”这个数学概念翻译成代码里的条件判断,看学生是否真正理解“能被整除”在计算机里是用 % 取余来实现的。
【概念拆解:什么是因数?】 在数学里,如果整数 n 能被整数 i 整除,意味着 n 除以 i 的余数是 0。比如 12 能被 1 整除(12%1=0),能被 2 整除(12%2=0),能被 3 整除(12%3=0),也能被 4、6、12 整除,但 5、7、8、9、10、11 这些数除以 12 都有余数,所以不是因数。代码里要实现这个逻辑,就必须用取模运算符 %。
【解题思路:从循环到条件】 题目给出的框架是 for(int i=1;i<=n;i++),这意味着我们要遍历 1 到 n 的每一个整数。对于每个 i,我们需要判断它是不是 n 的因数。如果 i 是 n 的因数,就输出 i;否则跳过。因此横线处必须填一个条件表达式,判断 n 除以 i 的余数是否为 0。
在 C++ 中,取模运算 n%i 的结果就是余数。当 n%i==0 成立时,说明整除成立。所以正确的填空是 if(n%i==0)。
【逐项分析选项,为什么只有 A 对】 A. if(n%i==0) —— 完全正确。n%i 计算余数,==0 判断整除,逻辑严密,符合题意。 B. if(n/i==0) —— 错得离谱。在循环 i<=n 的前提下,n/i 的商至少是 1(当 i=n 时商为 1,当 i<n 时商更大),永远不可能等于 0。这个条件永远为假,程序一个数都不输出,直接判错。 C. if(n%i!=0) —— 把整除反了。!=0 意味着余数不为 0,也就是“不能整除”。如果填这个,程序会把所有非因数都输出来,比如输入 12 会输出 5 7 8 9 10 11,完全违背题目要求。 D. if(n/i!=0) —— 同样是反了,而且 n/i 在 i<=n 时确实不等于 0,所以这个条件永远为真,程序会把 1 到 n 全部输出,等于把题目做反了。
【命题人挖坑的套路】 这类题的命题人特别喜欢在符号上做文章。学生如果只背了“整除”这个概念,却忘了代码里是用 % 而不是 /,就会掉进 B 的坑。如果学生连“整除”和“余数”的关系没理顺,就会选 C 或 D。这些都是利用学生对基础语法和数学概念的模糊认识设计的陷阱。另外,题目故意没有给出任何提示,只给了一个空,就是要逼学生自己把“整除”翻译成代码逻辑。
【思考心法:拿到题先想什么?】 看到“因数枚举”,第一反应是循环。循环变量 i 从 1 到 n,判断条件就是整除。整除怎么判断?用取模。取模怎么写?n%i==0。就这么几步,答案自然出来了。不要一上来就去试选项,而是先自己想清楚逻辑,再回头核对选项,这样效率最高,也最不容易出错。
【避坑指南】 1. 别把 % 和 / 搞混。除法是求商,取模是求余数。整除看余数,不是看商。 2. 别把条件写反。==0 才是整除,!=0 才是非整除。考试时多看一眼题目要求,别凭感觉。 3. 别忽略循环范围。i<=n 时 n/i 永远不为 0,这是硬伤,选 B 的人基本没读懂循环条件。 4. 别只记结论。如果题目改成“求非因数”,或者循环改成 i*i<=n,逻辑就变了。刷到类似题,先问自己“命题人想考我什么”,别只盯着代码形式。
【考频与趋势】 从题库数据看,基础语法(含运算符)在 GESP 四级中占比很高。GESP 四级总共考过 186 题,其中运算符与表达式类题目占 37 题,约占四级总题量的 20%。而在整个题库中,运算符与表达式共考过 261 题,覆盖 9 个考试级别,逐年分布显示 2023 年考了 91 题,2024 年考了 41 题,2025 年考了 61 题,2026 年考了 14 题。可以看出,这类题目在近年考试中非常活跃,尤其是 2023 年和 2025 年都是小高峰。
具体到取模运算,虽然单独统计较少,但它是“因数枚举”“约数个数”“最大公约数”等经典算法的基础。在 GESP 四级《循环与条件》模块中,这类题目几乎是必考内容。从历年趋势看,2023 年四级题目数量激增(287 题),其中很可能包含大量类似的取模判断题;2024 年虽然总数下降,但运算符类题目依然保持较高频次(41 题),说明这类考点并未降温。
【未来预测】 基于现有数据,可以合理预测:
% 和 ==0 的组合。总之,这道题虽然简单,但它是通往更复杂算法的基石。掌握了“整除用取模”这个基本点,后面无论是求约数个数、最大公约数还是最小公倍数,都能迎刃而解。