用数组计数的时候哪里越界了?

来源:百度知道 编辑:UC知道 时间:2024/06/20 07:46:54
我的程序如下:
#include <iostream>
using namespace std;

void main()
{
int i,j[30],k[30];
j[1]=1,k[1]=0;
for(i=0;i<20;i++)
{
if(i>=3)
{j[i]=j[i-1]+j[i-3];
}
else
j[i]=1;
if(i>=3)
k[i]=k[i-1]+j[i]-j[i-3];
else
k[i]=k[i-1]+j[i];
}
cout<<j[i]<<endl<<k[i]<<endl<<"THE total is:"<<j[i]+k[i];
}
程序运行后却出现越界 结果是一个很小的负数。。。哪个大哥帮忙指点下~

因为你的i是从0开始,而
if(i>=3)
k[i]=k[i-1]+j[i]-j[i-3];
else
k[i]=k[i-1]+j[i];
这个判断语句在i=0时会转到“else”分支上,就会出现
k[0]=k[-1]+j[0]。
这才是越界的原因。

我想改正的办法是:
for(i=0;i<20;i++)
改为:
for(i=1;i<20;i++)

j[i]=j[i-1]+j[i-3];

数组中的第一个索引是0,你在这句话中使用的 j[i-1] 在第一次会是 j[0-1]
当然就会数组越界了

你就不会调试?这样的提问长不了编程功夫