我有一个问题,在添加数组的每个元素,然后添加数组中的下一个元素的结果,我已经尝试了不同的方法,但不能让它工作这里是代码示例:
#include <stdio.h>
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10};
int result = 0;
int resultB = 0;
for(int i = 0 ;i < 10; i++)
{
result = array[i]+array[i+1];
resultB = result-array[i-1];
printf("%d\n",result,resultB);
}
return 0;
}
现在我所期待的是数组的前两个元素,如示例中所示,将被添加,例如:1+2 = 3;然后我想把这个结果3加到数组[2]的第二个元素上,即3+2 = 5,然后5+数组[3] = 8,依此类推,直到数组的长度结束。我知道我在做一些事情wrong.how,我能解决这个问题吗?
3条答案
按热度按时间tkclm6bt1#
何时
i == 0
,则array[i-1]
超出范围i == 9
,则array[i+1]
超出范围这会使程序具有未定义的行为。
同样,
printf("%d\n",result,resultB);
在堆栈上放置了 * 两个 *int
,但您只告诉printf
使用一个,要么删除一个,要么添加一个%d
。解决这些问题后:
该算法将生成以下输出:
kadbb4592#
我看到了几个问题。
首先,当
i=9
时,array[i+1]
将访问未定义的内存区域(由于array
的最大索引是9
,因此访问array[9+1]
显然是越界的)。当
i=0
时,array[i-1]
也会发生同样的情况。请记住,C中的数组是从零开始的,在您的示例中,第一个元素是
0
,最后一个元素是9
。另一个问题是你的
printf
,你使用了一个**%d
,但是试图打印两个整数值,它应该是%d\t\%d\n
或者类似的东西。我将改写如下:
此版本代码的输出如下所示:
unftdfkk3#
数组[] = {1,2,3,4,5,6,7,8,9,10}
预期结果值示例
数组[0]+[1] = 3 //结果为3
那么
结果+数组[1],即(结果值为3)+数组[1] = 5 //这次结果为5
那么
结果+数组[2],即(结果值为5)+数组[2] = 8 //现在结果为8
那么
结果+数组[2],即(结果值为8)+数组[2] = 11 //结果
那么
结果+数组[3],即(结果值为11)+数组[3] = 15 //结果
那么
结果+数组[3],即(结果值为15)+数组[3] = 19 //结果
那么
结果+数组[4],即(结果值为19)+数组[4] = 24 //结果
那么
结果+数组[4],即(结果值为24)+数组[4] = 29 //结果
等等直到这结束
正如你所看到的每次结果被相加然后再被加到数组中的下一个元素
因此输出将是: