我这一串代码应该怎么修改呢(打印出1000-3000内的所有素数,每五个一行)

#include<stdio.h>
#include<math.h>

int main()
{
    int i,j,k=0,q;
    
    for(i=1000;i<=3000;i++)
    {
        q=sqrt(i);
        for(j=2;j<=q;j++)
        {
            if(i%j==0)
            {
                break;
            }
        }
        if(j>q)
        {
            printf("%d",i);
            k++;
            if(k%5==0)printf("\n");
        }
        else break;
    }
} 

1、效果如下

img

2、详细代码解释如下


/*
1)打印出1000-3000内的所有素数
2)每五个一行
3)素数:一般指质数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数
*/

#include<stdio.h>
#include<math.h>
 
int main()
{
    int i,j,k=0,q;
    
    for(i=1000;i<=3000;i++)
    {
        //算术平方根,sqrt(9)=3
        //目的是获取到最大得自然数范围
        //比如:81=9*9,所以可以通过算术平方根来获取最大得自然数范围
        q=sqrt(i); 
        
        //遍历范围内的自然数,是否有被整数的
        //有,则表示不是质数,继续下一个循环
        for(j=2;j<=q;j++)
        {
            if(i%j==0)
            {
                break;
            }
        }
        
        //如果j>q说明已经遍历完,则说明是质数
        //如果有被整数是会提前结束,则说明不是质数
        if(j>q)
        {
            printf("%d\t",i); //输出质数,并加一个空格隔开
            k++;
            if(k%5==0){
                //5个换行
                printf("\n");
            }
        }
        //else break  //当存在一个不是质数时,就结束了循环,直接跳出循环了
    }
} 
 

//else break;

注释掉即可

望采纳!

多了一句else break; 这句加了刚开始循环就被终止了,因此没有输出。
改正如下:

#include<stdio.h>
#include<math.h>
 
int main()
{
    int i,j,k=0,q;
    
    for(i=1000;i<=3000;i++)
    {
        q=sqrt(i);
        for(j=2;j<=q;j++)
        {
            if(i%j==0)
            {
                break;
            }
        }
        if(j>q)
        {
            printf("%5d",i);
            k++;
            if(k%5==0)
            printf("\n");
        }
    }
} 

测试图:

img

如有帮助,还请帮忙点下采纳!感谢!