shawshanke 发表于 2021-1-28 20:21:52

求助,一个简单的C语言for循环问题

用数组求小于某个数的前n项斐波那契数列,本来是个很简单的问题,我的代码如下
# include <stdio.h>
#define MAX 128
int main()
{
    int a={0};
    a=1;
    a=2;
    int i;
    for(i=2;a<4000;i++)
    {
      a=a+a;
      printf("a[%d]=%d\n",i,a);
    }
      return 0;
}
然而编译结果是这样。。。for一直循环下去直到值溢出,有大佬知道这是为什么吗{:10_312:}

xieglt 发表于 2021-1-28 20:48:33

# include <stdio.h>
#define MAX 128
int main()
{
        //数组只定义了128个元素,循环到了3999,肯定溢出啊。
        //而且斐波那契数列到第45项 int 类型就装不下了。
    int a={0};
    a=1;
    a=2;
    int i;
    for(i=2;a<4000;i++)
    {
      a=a+a;
      printf("a[%d]=%d\n",i,a);
    }
        return 0;
}

shawshanke 发表于 2021-1-28 21:03:29

xieglt 发表于 2021-1-28 20:48


大佬,是不是我对for循环理解有误啊,它不是应该在数组a的第i项大于4000的时候跳出循环吗,为什么没有跳出

李京 发表于 2021-1-28 21:07:03

shawshanke 发表于 2021-1-28 21:03
大佬,是不是我对for循环理解有误啊,它不是应该在数组a的第i项大于4000的时候跳出循环吗,为什么没有 ...

你的for判断条件不对,a【i】还没有赋值你就去判断了
应该用a去判断

shawshanke 发表于 2021-1-28 21:07:45

xieglt 发表于 2021-1-28 20:48


好吧我好像明白了,每结束一次循环后i增1,此时a(i)为零,条件永远为真,我傻了,感谢解答

shawshanke 发表于 2021-1-28 21:09:21

李京 发表于 2021-1-28 21:07
你的for判断条件不对,a【i】还没有赋值你就去判断了
应该用a去判断

谢谢!

李京 发表于 2021-1-28 21:11:39

shawshanke 发表于 2021-1-28 21:09
谢谢!

互相帮助,不客气!

xieglt 发表于 2021-1-28 21:21:26

shawshanke 发表于 2021-1-28 21:09
谢谢!

不好意思,我看错了,4楼的解答是正确的。
页: [1]
查看完整版本: 求助,一个简单的C语言for循环问题