一个偶数总能表示为两个素数之和。

mingzhentanni 2011-05-03 01:13:49
#include "stdio.h"
#include "math.h"
main()
{ int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{ for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else break; //为什么不加这句话就出不来呀,还有哪个高人能解释下每个break后运行那条语句吗?
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
}
...全文
1039 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mingzhentanni 的回复:]
我觉得既然如果程序能执行到if(c>sqrt(b))就代表没有其他可能了,或者说可以不加else break;这句了,但为什么得加呢,求高人给出不加与加后的改变!
[/Quote]

求人不如求己, 设个断点,单步运行一下很难吗?
flysnowhite 2011-05-04
  • 打赏
  • 举报
回复
自己按步调试调试就可以。按F10或F11。
staticabc 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mingzhentanni 的回复:]
我觉得既然如果程序能执行到if(c>sqrt(b))就代表没有其他可能了,或者说可以不加else break;这句了,但为什么得加呢,求高人给出不加与加后的改变!
[/Quote]
你觉得程序应该结束了,那么怎么结束呢,这就要跳出for循环体;如果不加else break;这句,那么程序会接着做
    for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
//else break;
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
直到b>a/2.
toadzw 2011-05-04
  • 打赏
  • 举报
回复
看看基本知识吧,break的作用是跳出循环啊
mingzhentanni 2011-05-03
  • 打赏
  • 举报
回复
我觉得既然如果程序能执行到if(c>sqrt(b))就代表没有其他可能了,或者说可以不加else break;这句了,但为什么得加呢,求高人给出不加与加后的改变!
海盗医生 2011-05-03
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "math.h"
main()
{
int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else break; //为什么不加这句话就出不来呀,还有哪个高人能解释下每个break后运行那条语句吗?
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
//break直接跳出了FOR循环体,到了这里,函数直接了
}
luciferisnotsatan 2011-05-03
  • 打赏
  • 举报
回复
break 在这里,就是跳出当前的for(c=2;c<=sqrt(b);c++)循环。
無_1024 2011-05-03
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "math.h"
int main()
{
int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
{
if(b%c==0)
break;
if(c>sqrt(b))
d=a-b;
else
break; //为什么不加这句话就出不来呀,还有哪个高人能解释下每个break后运行那条语句吗?
}//break跳出当前循环
for(c=2;c<=sqrt(d);c++)
{
if(d%c==0)
break;
}
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
return 0;
}

bdmh 2011-05-03
  • 打赏
  • 举报
回复
如果不break,后续代码可能就会更改结果,自己调试就清楚了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧