C语言程序高手进!大家看看这个斐波拉契数列的程序哪里不对啊?运行起来很奇怪!

如题所述

第1个回答  2014-08-19
不知道要啥怪的.我没看出错来.但是,输出的时候有个小错,但我不知道这个你有没有考虑到.就是:
scanf("%d", &j);你这里问用户要看第几个数.
printf("%d", a[j]);但这里输出的是第j+1个数.
改成printf("%d", a[j-1]);
我想起来了,4字节(int)的第26个数就溢出了.所以要用long long.再大就用无符号的.
如:
这个是第26个数: FFFFFFFFFF
这个是int能存的: FFFFFFFF
如果这样要赋值,那前面的两个F就会丢失.本回答被网友采纳
第2个回答  2014-08-19
你定义的数据类型就应改为long,打印输出用%ld追问

怎么改啊

追答

将a数组定义成long,x和j仍为int

追问

我改了

一些数字输入后出现正确的结果,但有些数输入后显示为0

但如果按照顺序输,这些数又显示正确的了

追答

什么意思?什么顺序

追问

我输入大一点的数为什么会出来负数?

追答

你的数组只有0-100的元素啊,你要输入多大啊

除非将数组元素定义大些

第3个回答  2014-08-19
运行后什么现象?追问

有负数出现啊

追答

因为你定义的是int,范围太小了造成溢出,所以有负数出现

main()
{
double a[101] = { 1, 1 };
int i, x;
for (i = 2; i <= 100; i++)
a[i] = a[i - 1] + a[i - 2];
while (1)
{
scanf("%ld", &x);
printf("%lg\n", a[x]);
}
}

这样就行了

本回答被提问者采纳
相似回答
大家正在搜