C语言程序——输出1-100之间所有素数(通过返回值的方式实现)

C语言程序——输出1-100之间所有素数(通过返回值的方式实现)


# include 

int f(int i);

int main(void)

{
    int j;

    for(j=2; j<=100; j++)
    {
        printf("%d\n", f(j));
    }

    return 0;
}

int f(int i)
{
    int k;
    for(k=2; kif(0 == i%k)
            break;
    }
    if (k == i)
        return k; 
}

运行结果是反复输出232中间穿插其他素数,请问怎么修改才能使输出结果正常?或者为什么不能通过这种方式实现?

修改处见注释,供参考:

#include <stdio.h>
int f(int i);
int main(void)
{
    int j;

    for(j=2; j<=100; j++)
    {
        if (f(j))    //修改
            printf("%d\n", j);
    }
    return 0;
}

int f(int i)
{
    int k;
    for(k=2; k<i; k++)
    {
        if(0 == i%k)
            break;
    }
    if (k == i)
        return 1; //return k; 修改
    else
        return 0;  //修改
}

你这个代码没有给全,但是我看了看大概是这样:f函数如果发现i不是素数是没有任何返回值的,这就导致main函数中如果i不是素数printf就接受不到值,那该怎么输出呢,程序只好认为f函数返回了某个内存区里的值(232)。所以解决方案是让f函数在发现i不是素数时返回-1,然后main函数检测返回值不为-1才输出。
代码修改建议如下:

# include <stdio.h>
# include<math.h>
 
int f(int i);
 
int main(void)
 
{
    int j;
 
    for(j=2; j<=100; j++)
    {
    if(f(j)!=-1)
        printf("%d\n", f(j));
    }
 
    return 0;
}
 
int f(int i)
{
    int k;
    for(k=2; k<=sqrt(i);k++)
    {if(0 == i%k)
            return -1;  }
    return i; 
}

好像是因为在f()函数if只对 k==i的条件进行了判断,其他情况没有返回值,而导致程序当k!=i自动返回了某一个内存处的值导致(因为f()函数是一个int型返回值的函数,所以他一般是一定会返回一个int型值的)。手动添加对k!=i的情况进行判断,返回一个约定值即可。修改如下:

 
# include <stdio.h>
 
int f(int i);
 
int main(void)
 
{
    int j;
 
    for(j=2; j<=100; j++)
    {
        int result = f(j);
        if(result!=-1){
            printf("%d ",result);
        }
        //printf("%d\n",f(j));
    }
 
    return 0;
}
 
int f(int i)
{
    int k;
       
    for(k=2; k<i; k++)
    {
        if(0 == i%k){
            
            break;
        }
            
    }
    if (k == i){
    //    printf("k==i,k=%d\n",k);
        return k; 
    }
        
   else 
        return -1;
       
        
        
}
 

img

应该是写一个函数,判断指定的数字是否为素数。

文章:【C语言】编写输出任意之间的所有素数(1-100)&前100个(100-200)所有素数 中也许有你想要的答案,请看下吧