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

C语言如何打印50项斐波那契数列?n=50时运行异常如何解决

故障原因

代码n取50时运行异常和数值溢出没关系,是两个低级逻辑错误导致的:

  • 数组越界:你定义的arr[50]合法下标只有0~49,但原来的循环逻辑在n=50时,循环变量j会一路加到51,直接读写数组范围外的内存,属于C语言里典型的未定义行为,轻则输出乱码,重则程序直接崩溃。
  • 循环边界写错了:要输出n项斐波那契,只需要把数组前n个位置填上数就行,原来的循环不管n是多少都会多算好多项,哪怕n取1、2这种很小的值,也存在越界风险。

额外提一句:unsigned long long是64位无符号整数,最多能存到第93项斐波那契数,存前50项完全没压力,根本不需要换大数库之类的复杂方案。

修复后代码
#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    // 加个输入校验,避免输入超出1~50范围导致异常
    if (n < 1 || n > 50) {
        printf("请输入1到50之间的整数\n");
        return 1;
    }
    unsigned long long arr[50] = {0, 1};

    // 从第3项(下标2)开始填数,填到第n项就停,不会越界
    for (int j = 2; j < n; j++)
    {
        arr[j] = arr[j-2] + arr[j-1];
    }

    for (int i = 0; i < n; i++)
    {
        printf("%d => %llu\n", i, arr[i]);
    }

    return 0;
}
效果验证

修复后输入50可以正常运行,最后一项(下标49)的输出值为7778742049,结果正确,全程没有越界访问,不会出现运行崩溃、输出乱码的问题。

内容的提问来源于stack exchange,提问作者romjan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:16:10