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;
}
应该是写一个函数,判断指定的数字是否为素数。
文章:【C语言】编写输出任意之间的所有素数(1-100)&前100个(100-200)所有素数 中也许有你想要的答案,请看下吧