You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

斐波那契程序输出异常:数组遍历与数值溢出问题求助

排查并修复斐波那契序列程序的异常输出

问题根源

  • 未初始化数组访问:hasil数组仅在第一个循环中填充了jbf-1个元素(索引1到jbf-1),但后续循环尝试访问索引从m到s-1的元素。当m >= jbf时,这些索引对应的数组元素从未被赋值,内存中是随机垃圾值,这就是输出出现奇怪数字的直接原因。
  • 序列生成数量不足:程序仅生成了jbf-1个斐波那契数,但实际需要生成到第m + jbf -1项,才能满足从第m项开始输出jbf个数的需求。
  • 项数索引对应混乱:初始直接输出b=1,导致序列起始位置错位,和用户期望的输出不匹配。

修复方案

  1. 先生成足够数量的斐波那契数,覆盖从第1项到m + jbf -1项的范围,确保后续访问的数组元素都已初始化。
  2. 统一数组索引与斐波那契项数的对应关系,避免错位。
  3. 移除提前输出的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:40:25