小羊爱吃小草 发表于 2023-12-24 16:14:09

斐波那契

#include <stdio.h>

int main()
{
        int i = 1, m, n = 1, next;
        for(m = 1; m < 50; m++)
        {
        next = i + n;
        i = n;
        n = next;
        printf("%d %d %d ", i, n, next);
        }
        return 0;
}
哪里有问题啊,斐波那契

FishC 发表于 2023-12-24 16:14:22

你的代码基本上是正确的,但是有一个小问题。你在循环中输出了三个数,但是没有加上换行符,导致输出结果看起来会比较混乱。你可以修改printf语句,在输出完三个数后加上"\n",就可以使输出结果更清晰了。修改后的代码如下所示:

#include

int main() { int i = 1, m, n = 1, next; for(m = 1; m < 50; m++) { next = i + n; i = n; n = next; printf("%d %d %d\n", i, n, next); } return 0; }


此外,你还可以考虑加上一些用户交互部分,让程序更加友好。思路如下:

#include

int main() { int count; printf("请输入斐波那契数列的长度:"); scanf("%d", &count);

int i = 1, m, n = 1, next; for(m = 1; m <= count; m++) { if(m == 1 || m == 2) { printf("1 "); continue; } next = i + n; i = n; n = next; printf("%d ", next); } return 0; }

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-24 16:28:46

在给定的代码中:

#include <stdio.h>

int main()
{
    int i = 1, m, n = 1, next;
    for(m = 1; m < 50; m++)
    {
    next = i + n;
    i = n;
    n = next;
    printf("%d %d %d ", i, n, next);
    }
    return 0;
}


这是一个 C 语言中的斐波那契数列生成程序。该程序只是简单地生成一个斐波那契序列。

这个问题可能不在于代码本身,而在于你的期望与代码的输出之间的偏差。此代码的输出将是两个相同的连续的斐波那契数,这可能不是你期望的结果。而且,给出的代码也没有任何错误处理,也没有对输入进行验证。

如果你只希望输出一个斐波那契数,你应该去掉其中的一个输出语句。 这是如何修复的:

#include <stdio.h>

int main()
{
    int i = 1, m, n = 1, next;
    for(m = 1; m < 50; m++)
    {
    next = i + n;
    i = n;
    n = next;
    printf("%d ", n);
    }
    return 0;
}


在这个修正后的版本中,代码只输出一个斐波那契数,依次打印出斐波那契数列的值,更符合大多数人的期望。

求最佳答案{:10_254:}{:10_254:}

jackz007 发表于 2023-12-24 16:53:59

#include <stdio.h>

int main()
{
      unsigned long long i , m , n , next;// 为了确保计算结果不会溢出,应该把变量定义为 64 位无符号整型数
      printf("1 1")                        ;// 先打印初始值
      for(i = n = next = 1 ; n < 50 ; n ++) {
                m = next                     ;// 保存旧的 next 的值
                next += i                  ;// 计算新的 next 值
                i = m                        ;// 把旧的 next 值交给变量 i,准备计算下一个 next 值
                printf(" %lld" , next)       ;// 每次只需要打印新的 next 就可以了
      }
      return 0                           ;
}
页: [1]
查看完整版本: 斐波那契