为何这段C++质数查找代码模板无法运行?求问题解析
代码无法正常运行的原因解析
首先贴出原代码:
#include <stdio.h> int main() { int list[10]; int a,b,c; int d=1; int e=0; printf("Enter a starting number to find 10 prime numbers: "); scanf("%d",&a); printf("Enter a ending number to find 10 prime numbers: "); scanf("%d",&b); for(c=0;c<10;c++) { while(a<b) { while(d<a) { if(a%d==0) { e=1; } d++; } a++; } if(e==0) { list[c]=a; printf("%d is prime.",list[c]); } } }
以下是导致代码失效的核心问题:
质数判断逻辑完全错误
- 质数判断的除数
d初始值为1,任何整数除以1都余0,所以e会被直接设为1,导致所有数都会被判定为非质数。正确的质数判断应该从2开始遍历到sqrt(a),而非从1开始。 - 每次判断新数字时,未重置
d和e的值。比如判断完第一个数后,d已累加到较大数值,后续判断其他数时d<a的条件直接不成立,完全跳过判断逻辑。
- 质数判断的除数
循环嵌套逻辑混乱,无法持续查找质数
- 外层
for循环目标是找10个质数,但内层while(a<b)会一次性把a递增到等于b,之后外层循环继续执行时,a已不小于b,再也不会进入内层循环检查任何数字,自然找不到足够的质数。 - 代码未检查初始输入的
a是否为质数,直接执行a++,导致起始数如果是质数会被跳过。
- 外层
状态变量未正确重置
- 标记非质数的变量
e在每次判断新数字前未重置为0,一旦某个数触发e=1,后续所有数字的判断都会沿用这个状态,永远无法判定为质数。
- 标记非质数的变量
数组与输出的潜在问题
- 如果
a到b范围内找不到10个质数,list数组中未被赋值的元素会保留垃圾值,但代码仍会尝试访问这些元素。 - 找到质数后的输出没有换行,导致所有结果挤在一起,可读性极差。
- 如果
内容的提问来源于stack exchange,提问作者melowies
相关产品推荐
相关产品推荐

