如何制作斐波纳契方程? (关于未初始化变量的错误)

时间:2015-09-22 18:00:09

标签: c

#include<stdio.h>

int main(void)
{
    int a, b, c, n;

    printf("What  Fibonacci number would you like?:");
    scanf("%d", &n);

    if (n == 0 || n == 1)
        return printf("%d", n);
    else
    for (c = 0; c < n; c++)
    {
        c = a + b;
        a = b;
        b = c;
    }
    printf("%d ", c);

return 0;

}

我已经制作了使用Fibonacci方程的程序。但是我在编译期间遇到以下错误:

Error   1   error C4700: uninitialized local variable 'a' used  d:\computer programming c++\20150923\20150923\20150923-1.c  15  1   20150923
Error   2   error C4700: uninitialized local variable 'b' used  d:\computer programming c++\20150923\20150923\20150923-1.c  15  1   20150923

我该如何解决?

3 个答案:

答案 0 :(得分:2)

编译器是正确的,你必须在使用前初始化变量,例如

int a = 0, b = 1, c = 0, n = 0; // etc.

否则,如果您读取未初始化变量的值,则会触发undefined behaviour(在使用C或C ++等语言时应尽量避免)。

确实如评论中所述,将c作为循环索引是没有意义的。

答案 1 :(得分:0)

您必须初始化声明的变量。由于你没有声明a和b,编译器会抛出错误。

您还需要将> su > cd /var/cache/dnf/epel-2b6dfc5904c26562/repodata > mkdir throwaway > mv 49c4e3bd54f19136521be9b254830c954369cc22ce1b661db502ebef13b0004c-updateinfo.xml.bz2 throwaway 更改为c<n才能获得所需的斐波纳契数

所以你的最终代码将如下所示:

c<=n

答案 2 :(得分:0)

除了初始化a和b之外,代码还需要为循环计数器使用单独的变量(我用过i)。通过使用无符号int,n可以高达47,结果= 2971215073.我将求和更改为c = b + a,因为这对应于fib(i)= fib(i-1)+ fib(i-2);

#include<stdio.h>

int main(void)
{
    unsigned int a=0, b=1, c, i, n;

    printf("What  Fibonacci number would you like?:");
    scanf("%d", &n);

    if (n == 0 || n == 1){
        printf("%u\n", n);
        return 0;
    }
    for (i = 2; i <= n; i++)
    {
        c = b + a;
        a = b;
        b = c;
    }
    printf("%u\n", c);
    return 0;
}