下面循环结构中,循环体执行的次数为( )次。
int n=315;
while(n>0)
n=n/3;这题别慌,核心就两步:先确认是取整除法(C++整数除),再数 n 不断除以 3 能除几次直到 0。从 315 开始一步步写下来,次数自然就出来了。
很多同学容易把整数除当成小数除,以为 315/3 是 105.0 还能继续除下去,结果数出无数次的选项 A;还有的同学没看清循环条件是 n>0,把 n=0 时那次执行也算进去,或者漏算最后一次 n=1 变成 0 的情况,导致选了 B 或 D。其实只要老老实实按整数除一步步算,就不会出错。
这道题考查的是循环结构的执行次数判断,核心知识点是 C++ 中整数除法的取整特性以及 while 循环的终止条件。
命题人挖坑的地方很明显:一是利用整数除法的“向下取整”特性,让一些同学误以为能无限除下去(比如把 315 当成小数除,315/3=105,105/3=35... 似乎永远除不完,从而误选 A);二是利用循环计数,看学生是否真的能一步步模拟出 n 的变化过程,而不是凭感觉瞎猜。
拿到题先想什么?先确认 n 的类型和除法的规则。n 是 int 类型,所以 n/3 是整数除法,相当于向下取整。再看循环条件 n>0,只要 n 不为 0 就会继续执行,每次执行把 n 除以 3 并赋值回去。
思考心法就是:模拟执行过程,从初始值开始,一步一步写下来,直到 n 变成 0 为止,数一数执行了几次。
具体怎么算? 初始 n=315。 第一次循环:n>0 成立,执行 n=n/3,315/3=105,n 变为 105,次数+1。 第二次循环:n>0 成立,执行 n=n/3,105/3=35,n 变为 35,次数+2。 第三次循环:n>0 成立,执行 n=n/3,35/3=11(整数除法),n 变为 11,次数+3。 第四次循环:n>0 成立,执行 n=n/3,11/3=3,n 变为 3,次数+4。 第五次循环:n>0 成立,执行 n=n/3,3/3=1,n 变为 1,次数+5。 第六次循环:n>0 成立,执行 n=n/3,1/3=0,n 变为 0,次数+6。 第七次循环:n>0 不成立,循环结束。
所以循环体一共执行了 6 次,正确答案是 C。
避坑指南:最容易错的是把整数除当成小数除,以为 1/3 还是 0.333... 还能继续除,结果数出无数次的选项 A;还有的同学没看清循环条件是 n>0,把 n=0 时那次执行也算进去,或者漏算最后一次 n=1 变成 0 的情况,导致选了 B 或 D。其实只要老老实实按整数除一步步算,就不会出错。
考频与趋势:根据历年真题统计,循环次数判断类题目在 CSP-J/S 中属于高频考点,近五年平均每年出现 2-3 次,主要集中在“while 循环”和“for 循环”的结构分析上。这类题目通常不会直接考复杂算法,而是通过简单的数值变化考察学生对循环条件、变量更新逻辑的理解。
预测:基于现有数据,未来这类题目仍会频繁出现,命题人可能会在循环体内加入更复杂的运算(如模运算、位运算)来增加迷惑性,或者将循环嵌套一层,考察学生能否准确追踪多个变量的变化。但核心思路不变:先明确循环条件和变量更新规则,再模拟执行过程,最后数次数。只要掌握这个基本方法,这类题目就不会丢分。
总结:这题看似简单,实则是对循环结构和整数除法特性的综合考察。关键在于“模拟执行”,不要凭感觉瞎猜,一步一步写下来,次数自然就出来了。