新人求解为何输出如此奇怪?

验证哥德巴赫猜想,输入任一大于二的偶数,输出两素数。

 #include <stdio.h>
int main()
{
    int m,a,b=0,c=0,d,e,n,i,j;
    scanf("%d",&m);
    for(i=3;i<m;i=i+2)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                b=1;
                break;/*判断i是否为素数*/
            }
        }
            e=i;
            d=n-e;
        for(j=2;j<m/2;j++)
        {
            if(d%j==0)
            {
                c=1;
                break;/*判断d是否为素数*/
            }
        }
        if(b==0&&c==0&&e!=d)
        {
            if(d>m/2)
            {
                printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
            }
        }
        b=0;c=0;
    }
    return 0;
}

以下是改好的程序,结合了上面两位大神的回答

 #include <stdio.h>
int main()
{
    int m,b=0,c=0,d,e,i,j;
    scanf("%d",&m);
    for(i=3;i<m;i=i+2)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                b=1;
                break;
            }
        }
            e=i;
            d=m-e;
        for(j=2;j<d/2;j++)
        {
            if(d%j==0)
            {
                c=1;
                break;
            }
        }
        if(b==0&&c==0&&e!=d)
        {
            if(d>m/2)
            {
                printf("%d %d\n",e,d);
            }
        }
        b=0;c=0;
    }
    return 0;
}

为什么i从3开始循环。很明显,输入4你就得不到结果
还有下面的循环目测不是m/2而是d/2
还有是d=m-e,n你没用到。


给你修改了下,你参考下

#include <stdio.h>
int main()
{
    int m,a,b=0,c=0,d,e,i,j;
    scanf("%d",&m);
    for(i=2;i<m;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                b=1;
                break;/*判断i是否为素数*/
            }
        }
        if (i == 2) b=0;
        e=i;
        d=m-e;
        for(j=2;j<d/2;j++)
        {
            if(d%j==0)
            {
                c=1;
                break;/*判断d是否为素数*/
            }
        }
        if (d < 2) c=1;
        if(b==0&&c==0&&e!=d)
        {
            if(d>m/2)
            {
                printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
            }
        }
        b=0;c=0;
    }
    return 0;
}
  1. d=n-e;要改为d=m-e; 2.for(j=2;j<m/2;j++)循环里面j<d/2;虽然j<m/2也可以得到正确结果,但是明显走了更多的无用的循环. 3.要判断素数为2的情况.