C语言cygwin编译器,不知道为什么会发生这种情况

时间:2013-03-10 20:47:44

标签: c compiler-errors nested-loops

我的工作是用c证明fermats理论不正确。所以我所做的就是嵌套循环,非常容易阅读。

这是代码:

#include <stdio.h>
#include <math.h>

quadtest(unsigned long long int a, unsigned long long int b, unsigned long long int c, unsigned        int n)
{
if ((pow(a,n)+pow(b,n))==pow(c,n))
    return 1;
else
    return 0;

}    

main()
{
unsigned long long int a;
unsigned long long int b;
unsigned long long int c;
unsigned int n;

//a=1;  b=1;    c=1;    n=1;
for(n=2; n<100; n++)
{
printf("\nn=%d",n);
    for(c=1; c<500; c++)
    {
        printf("\ntrying now c=%d and n=%d",c,n);       
        for(b=1; b<500; b++)
        {
            if (quadtest(a,b,c,n)) break;
            //printf("\nb=%d, n=%d",b,n);

        }
        for(a=1; a<500; a++)
        {
            if (quadtest(a,b,c,n)) break;
            //printf("\na=%d, n=%d",a,n);   
        }
    }
    printf("\nthe right values to prove fermats theory wrong are n=%d,c=%d,b=%d,a=%d",n,c,b,a);
}       





}

编译后,我得到“尝试c =随机数,n = 0.n由于某种原因总是等于0,即使它永远不应该是0。

我也得到类似“正确的值来证明fermats理论错误是n = 99,c = 500,b = 0,a = 500”

再一次,a,b,c或n都不应该是0.不确定问题是什么

1 个答案:

答案 0 :(得分:1)

您的代码有两个明显的问题:

您定义了几个变量,每个变量都被初始化,但a除外。您使用a未初始化来调用函数。这是未定义的行为,可以解释您的问题。

其次,您在printf中使用了不正确的说明符。 %d用于int; %llu适用于unsigned long long。使用错误的说明符可能导致输出不正确的值。