c语言程序,验证哥德巴赫猜想,任何一个大于6的偶数,可表示为两个素数之和,每五组换一行!!!哪儿有错
#include<stdio.h>#include<math.h>intmain(void){intkai(intn);inti=3,j,m=0,num;while(i<...
#include <stdio.h> #include <math.h> int main(void) { int kai(int n); int i=3,j,m=0,num; while(i<=100) { if(kai(i)==1) { for(j=3;j<=100-i;j++) { if(kai(j)!=0) { num=i+j; if(num%2==0&&num>=6&&num<=100) { printf("%d=%d+%d ",num,i,j); m++; if(m%5==0) printf("\n"); } } }i++; } } } int kai(int n) { int i,m; m=sqrt(n); for(i=2;i<=m;i++) { if(n%i==0) {return 0; break;} if(i>m) return 1; } }
展开
2个回答
展开全部
算法上没有看 逻辑上的问题可以给你点一下:
首先 i++的位置是错误的,你现在i++ 的位置会让你的程序进入死循环,i++不应该在if判断中,因为如果if某次不为真,则永远无法执行i++,导致while一直为真,所以就成死循环了。
还有kai函数中,kai的返回值不只有1和0,m=sqrt(n); m的值起初的时候为1,总之是小于你for循环中i的初始值的 ,所以for循环会执行不到,函数正常结束,返回一个随机的整数值,这样就导致了你main函数中的if判断是否等于1或0时出问题。
首先 i++的位置是错误的,你现在i++ 的位置会让你的程序进入死循环,i++不应该在if判断中,因为如果if某次不为真,则永远无法执行i++,导致while一直为真,所以就成死循环了。
还有kai函数中,kai的返回值不只有1和0,m=sqrt(n); m的值起初的时候为1,总之是小于你for循环中i的初始值的 ,所以for循环会执行不到,函数正常结束,返回一个随机的整数值,这样就导致了你main函数中的if判断是否等于1或0时出问题。
追问
大神啊!!谢谢、现在明白了!
展开全部
#include <stdio.h>
#include <math.h>
int main(void)
{
int kai(int n);
int i=3,j,m=0,num;
while(i<=100)
{
if(kai(i)==1)
{
for(j=3;j<=100-i;j++)
{
if(kai(j)!=0)
{
num=i+j;
if(num%2==0&&num>=6&&num<=100)
{
printf("%d=%d+%d ",num,i,j);
m++;
if(m%5==0) printf("\n");
}
}
}
i++;
}
}
}
int kai(int n)
{
int i,m; m=sqrt(n);
for(i=2;i<=m;i++)
{
if(n%i==0)
{return 0; break;}
if(i>m) return 1;
}
}
main();
#include <math.h>
int main(void)
{
int kai(int n);
int i=3,j,m=0,num;
while(i<=100)
{
if(kai(i)==1)
{
for(j=3;j<=100-i;j++)
{
if(kai(j)!=0)
{
num=i+j;
if(num%2==0&&num>=6&&num<=100)
{
printf("%d=%d+%d ",num,i,j);
m++;
if(m%5==0) printf("\n");
}
}
}
i++;
}
}
}
int kai(int n)
{
int i,m; m=sqrt(n);
for(i=2;i<=m;i++)
{
if(n%i==0)
{return 0; break;}
if(i>m) return 1;
}
}
main();
追问
哪里错了呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询