该程序测试Goldbach的猜想,打印给定的偶数整数作为两个素数的总和。在打印第一个之后,给定的整数将迭代2,然后找到该整数的两个素数之和。依此类推,直到程序被用户中断。
这个问题是该程序打印了一个' 0'在每次执行的print语句之后。
代码:
#include <stdio.h>
#include <math.h>
int GC(int goldsum); //function prototype
int main()
{
int goldsum;
printf("Enter an even integer greater than 5: ");
scanf("%d", &goldsum);
printf("%d\n", GC(goldsum));
goldsum = goldsum + 2;
printf("%d\n", GC(goldsum));
}
int GC(int goldsum) //function definition
{
int i, j; //prime addends
int div1, div2; //divisors
char prime1, prime2;
for (i=2 ;i<goldsum ;i++) //when number is less than goldsum, run this loop iterating by 1
{
prime1 = 1;
for (div1=2 ;div1<i ;div1++) //this loop determines if "i" is prime.
if (i % div1 == 0) //if yes, the prime number is stored in "i"
prime1 = 0;
if (prime1)
{
for (j=3; j<goldsum; j+=2) //when number is less than goldsum, run this loop iterating by 2
{
prime1 = 1;
for (div2=2; div2<j; div2++) //this loop determines if "j" is prime.
if(j % div2 == 0) //if yes, the prime number is stored in "j"
prime1 = 0;
if (prime1)
if (i + j == goldsum) //If i + j = goldsum, it prints the result.
{
printf("%d + %d = %d\n",i ,j , goldsum);
return 0;
}
}
}
}
return 0;
}
输出:
Enter an even integer greater than 5: 10
3 + 7 = 10
0
5 + 7 = 12
0
我希望它看起来像:
Enter an even integer greater than 5: 10
3 + 7 = 10
5 + 7 = 12
答案 0 :(得分:0)
也许你误解了我们放入return 0;
的{{1}}。每个函数都必须返回我们想要的值。在main的情况下,我们想要0因为这意味着一切都很好。对于您的函数,返回值应该是您想要的。
编辑:重新阅读问题并添加以下内容:由于您不希望函数返回值,因此您应将其声明为main()
而不是void
中的所有值,因为所有您想要的打印功能在您的功能中。
Void函数不返回值,这就是你想要的。
答案 1 :(得分:0)
仅使用GC(goldsum);
而不是printf("%d\n", GC(goldsum));