为什么代码运行显示素数只有0-10内的

#include<stdio.h>
#include<math.h>
int main()
{
int a[99],i,d,n,e=0,f=0;
printf("素数为:");
for(i=1;i<=99;i++)
{
a[i-1]=i;
d=sqrt(i);
for(n=2;n<=d;n++)
{
if(a[i-1]%n==0)
e=1;
}
if(e==0)
{
printf("%d\t",a[i-1]);
f++;
}
if(f%5==0)
printf("\n");
}
return 0;

}

因为你的e在一次等于1之后就没有变了,所以应该把e定义在循环内,每次循环都重置为零

img


望采纳😘😘

问问题也需要学问,代码需要注释

代码建议有一点注释,变量太多,看起来有点费劲

代码修改如下,有帮助望采纳

#include<stdio.h>
#include<math.h>
int main()
{
    int a[99],i,d,n,f=0;
    printf("99以内的素数为:\n");
    for(i=2; i<=99; i++) //这里要从2开始判断 
    {
        int e=0; //每次循环开始都要把e重新初始化为0,不然你后面的判断就没用了
        a[i-1]=i;
        d=sqrt(i);
        for(n=2; n<=d; n++) //你这个循环对1来说是没有用的,1要么不算进来,要么单独判断 
        {
            if(a[i-1]%n==0)
                e=1;
        }
        if(e==0)
        {
            printf("%d\t",a[i-1]);
            f++;
            if(f%5==0) //这里这个换行判断要放在里面来,存在连续五个以上的数都不是素数的情况 
                printf("\n");
        }

    }
    return 0;
}

img

题主的代码修改如下,问题见注释处,供参考:

#include<stdio.h>
#include<math.h>
int main()
{
    int a[99],i,d,n,e=0,f=0;
    printf("素数为:\n");
    for(i=1;i<=99;i++)
    {
         a[i-1]=i;
         d=sqrt(i);
         e=0; //e是数 i 是否为素数的标志位,每次一个新的i,e要先置零e=0;
         for(n=2;n<=d;n++)
         {
            if(a[i-1]%n==0)
               e=1;
         }
         if(e==0 && i!=1)// 1 不是素数,所以要排除在外
         {
            printf("%d\t",a[i-1]);
            f++;
            if(f%5==0) printf("\n");
         }
    }
    
    return 0;
}