C语言打印1-100质数代码中count初始化位置影响运行的原因
质数打印代码中count初始化位置的影响分析
问题场景
你提供的打印1-100质数的C代码,当count变量在声明时初始化(int i, num, count=0;)无法正常运行,但将count=0;放在外层for循环内部时可以正常工作,原因如下:
核心逻辑差异
你的代码逻辑是:外层循环遍历每个数num,内层循环检查num是否存在2到num/2之间的因数,若存在则将count加1并跳出循环;最后通过count == 0且num != 1判断该数是否为质数并打印。
当
count在声明时初始化:
这个初始化操作只会执行一次——程序进入main函数时,count被设为0。但后续外层循环迭代时,count不会自动重置:- 比如检查到非质数(如num=4)时,
count会被设为1; - 下一次循环检查num=5时,
count仍保持1,导致判断条件count == 0不成立,无法识别5是质数; - 后续所有数的判断都会因为
count不为0而被跳过,自然无法正常输出所有质数。
- 比如检查到非质数(如num=4)时,
当
count=0;放在外层循环内部:
每次迭代到新的num时,都会先将count重置为0,确保每次判断当前num是否为质数时,都是从“无因数”的初始状态开始统计,能准确反映当前数的因数情况,代码因此可以正常运行。
修正后的完整代码
// C Program to Print Prime Numbers From 1 to 100 #include <stdio.h> int main() { int i, num, count; // Checking for prime numbers for (num = 1; num <= 100; num++) { count = 0; for (i = 2; i <= num/2; i++) { if (num % i == 0) { count++; break; } } // Checking and Printing Prime Numbers if (count == 0 && num != 1) { printf("%d ", num); } } return 0; }
内容的提问来源于stack exchange,提问作者Sheikh Ismail Hossain Habib
相关产品推荐
相关产品推荐

