错例:
用筛选法求100以内的素数:
#include<stdio.h>
void main()
{
int a[101],i,j,w;
for(i=1;i<101;i++)
a[i]=i;
a[1]=0;
for(i=2;i<101&&a[i]!=0;i++)
for(j=i+1;j<101&&a[j]!=0;j++)
if(a[j]%i==0) a[j]=0;
for(i=1;i<101;i++)
if(a[i]!=0) printf("%5d",a[i]);
printf("/n");
getch();
}
输出结果:2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
错误分析:for循环括号中的表达式2是判断循环是否进行下去的判断条件,你把绿色部分理解成如下:
for(i=2;i<101;i++)
{
if(a[i]==0) continue;
for(j=i+1;j<101;j++)
{
if(a[j]==0) continue;
if(a[j]%i==0) a[j]=0;
}
}
但程序进行到i=3,j=4是,a[j]=0,所以内层循环跳出,i=4,a[i]=0,所以最外层循环跳出,程序只把2之后2的倍数的数归零。
本文通过一个具体的C语言程序实例,展示了使用筛选法求解100以内素数时出现的一个常见错误,并深入分析了错误原因。指出在双重循环中对条件判断不当导致程序提前终止的问题。
905

被折叠的 条评论
为什么被折叠?



