斐波纳契序列误差C.

时间:2015-11-01 17:30:55

标签: c arrays for-loop sequence fibonacci

我有一个作业,我必须编写斐波那契的序列,然后打印前n个数字,其中n由用户输入。我写的是:

#include <stdio.h>
int main(int argc, char*argv[]){

int n, i, seq[n];
scanf("%d", &n);
seq[0]=0; seq[1]=1;
for(i=2; i<n; i++)
seq[i]=seq[i-1]+seq[i-2];

for(i=0; i<n; i++)
printf("%d ", seq[i]);
return(0);
}

直到n等于或大于9才有效。假设您输入8,则序列将为0 1 1 2 3 5 8 13。如果输入9或更大,则序列看起来像这样0 1 1 2 3 5 8 13 21 -9(随机数串)。

任何可以指出问题的人? Thx提前。

2 个答案:

答案 0 :(得分:4)

在值int n, i, seq[n];之前声明n以设置数组的长度。未初始化变量的行为未定义。

如上所述,您不需要数组来执行此分配。您只需要记住最后和当前的斐波纳契值。求它们产生新的,然后迁移电流 - &gt;最后和新的 - &gt;当前。将该逻辑放在由n控制的循环中。

答案 1 :(得分:2)

seq[n]是一个大小为n的可变长度数组,此时未初始化,导致未定义的行为。

而是先调用scanf 首先将某些值移至n然后定义int seq[n]

int n, i;
scanf("%d", &n);
int seq[n];

您还可以使用malloc

int n, i;
assert(1 == scanf("%d", &n));
int* seq = malloc(n * sizeof(*seq));

不过,不要忘记之后致电free