C编程中的Fibonacci系列,其中FIRST 2编号由用户给出

时间:2016-10-02 17:54:32

标签: c

当第一个数字为1且第二个数字为2且长度为5时,它应为1 2 3 5 8。但是我的输出总是1 2 1 3 4。我似乎无法找到问题。

另一项输入是25。输出为2 5 1 6 7。第3个数字是1不应该在那里。我应该更改或添加什么?

*这已经是提交的硬件,是的,我错了,我已经得到了扣除。现在我只想解决这个问题,以便我可以研究这个。

int main()
{
  int i, lenght = 0, fib, sum, sum1, sum2, a, b, c;
  printf("\nFirst number: ");
  scanf("%d", &a);
  printf("\nSecond number: ");
  scanf("%d", &b);
  printf("\nHow long?: ");
  scanf("%d", &lenght);

  {
    while ((a > b) || ((lenght < 2) || (lenght > 100)))
    {
      printf("\nFirst number: ");
      scanf("%d", &a);
      printf("\nSecond number: ");
      scanf("%d", &b);
      printf("\nHow long?: ");
      scanf("%d", &lenght);
    }
  }

  printf("%d\t%d\t", a, b);
  printf("%d\t", fib);
  for (i = 3; i < lenght; i++) {
    if (i <= 1) fib = i;
    else {
      a = b;
      b = fib;
      fib = a + b;
    }

    printf("%d\t", fib);
  }
}

4 个答案:

答案 0 :(得分:2)

第一次打印fib时(在for循环之前),您尚未分配任何内容。

答案 1 :(得分:0)

在打印fib=a+b;值之前添加fib。 它是一个很好的编码习惯,可以在使用之前初始化所有变量(特别是在C中)。

答案 2 :(得分:0)

你的代码对我来说很奇怪。我试着简化你的代码。看一次:

sub.Popen(['cd', './10dir')

希望它有用!!

答案 3 :(得分:0)

由于这是用于研究,您的代码存在问题:您不需要复制对scanf()的调用,只需将其中一个变量初始化为失败(您执行了此操作:lenght = 0)和让循环做它的事情;选择一个缩进样式并坚持下去;如果你是C的新手,总是要包括花括号,即使语言说它们是可选的;你(正确)允许长度为2,但然后打印三个数字;您的if (i <= 1)子句是无操作,因为循环以for (i = 3;开头,因此i永远不会少于3。

总而言之,我们得到的结论是:

#include <stdio.h>

int main() {
    int length = 0, a, b;

    while (length < 2 || length > 100 || a > b ) {
        printf("\nFirst number: ");
        (void) scanf("%d", &a);
        printf("\nSecond number: ");
        (void) scanf("%d", &b);
        printf("\nHow long?: ");
        (void) scanf("%d", &length);
    }

    printf("%d\t%d\t", a, b);

    for (int i = 2; i < length; i++) {
        int fib = a + b;

        printf("%d\t", fib);

        a = b;
        b = fib;
    }

    printf("\n");

    return 0;
}

请注意,输入错误检查不足以防止出现问题。例如。 b可能大于a,但如果输入随机数,仍然会使序列混乱。你假设用户知道从斐波那契序列中输入两个相邻的项目,这些项目很难测试。