#include<stdio.h>
#include<math.h>
int main()
{
int i,j,n,a[101];//求100以内的素数
for(i=1;i<101;i++)
a[i]=i;
a[1]=0;
for(i=2;i<sqrt(100);i++)
for(j=i+1;j<101;j++)
{
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for(i=2,n=0;i<101;i++)
{
if(a[i]!=0){
printf("%5d",a[i]);
n++;
}
if(n==0){
printf("\n");
return 0;
}
}
}
等于0的话,取余数就没意义了
初始化数组的时候,a[1]=0
初始化的时候,a[1]等于0,在for循环中,a[j]=0;这里也会把a[j]设为0,a[i]为0表示i不是素数,而且,a[j]等于0的时候,if(a[j]%a[i]==0)这里会崩溃。所以,如果if(a[i]!=0&&a[j]!=0)省略的话,要么a[i]得到的是0(没有意义),要么会导致程序崩溃。
有更多语句是会出现0的 ,仔细读一下代码
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!