斐波那契程序输出异常:数组遍历与数值溢出问题求助
排查并修复斐波那契序列程序的异常输出
问题根源
- 未初始化数组访问:
hasil数组仅在第一个循环中填充了jbf-1个元素(索引1到jbf-1),但后续循环尝试访问索引从m到s-1的元素。当m >= jbf时,这些索引对应的数组元素从未被赋值,内存中是随机垃圾值,这就是输出出现奇怪数字的直接原因。 - 序列生成数量不足:程序仅生成了
jbf-1个斐波那契数,但实际需要生成到第m + jbf -1项,才能满足从第m项开始输出jbf个数的需求。 - 项数索引对应混乱:初始直接输出
b=1,导致序列起始位置错位,和用户期望的输出不匹配。
修复方案
- 先生成足够数量的斐波那契数,覆盖从第1项到
m + jbf -1项的范围,确保后续访问的数组元素都已初始化。 - 统一数组索引与斐波那契项数的对应关系,避免错位。
- 移除提前输出的
b值,改为从数组中读取对应起始位置的元素。
修复后的代码
#include <stdio.h> int main() { int jbf, m, s; int hasil[100]; printf("============================ \n"); printf("| Program Fibonacci | \n"); printf("============================ \n"); printf("enter number of rows : "); scanf("%d", &jbf); printf("starting from line: "); scanf("%d", &m); // 计算需要生成到的最后一项索引 s = m + jbf - 1; if (jbf > 0 && m > 0 && s <= 100) { int a = 0, b = 1; // 初始化第1项(对应索引0) hasil[0] = b; // 生成第2到第s项的斐波那契数 for (int i = 1; i < s; i++) { int c = a + b; hasil[i] = c; a = b; b = c; } // 从第m项(对应索引m-1)开始输出jbf个元素 for (int i = m - 1; i < s; i++) { printf("%d ", hasil[i]); } } else { printf("Invalid input: ensure values >0 and total terms <=100"); } return 0; }
验证
当输入jbf=12(输出12个元素),m=5(从第5项开始),程序会输出:5 8 13 21 34 55 89 144 233 377 610 987;如果你的正确输出开头是1,说明你对项数的计数从0开始,只需将m改为2即可得到对应结果。
内容的提问来源于stack exchange,提问作者Dodek Mardana
相关产品推荐
相关产品推荐

