将数组元素添加到C#中的每个其他元素

mcdcgff0  于 2023-03-07  发布在  C#
关注(0)|答案(3)|浏览(188)

我有一个问题,在添加数组的每个元素,然后添加数组中的下一个元素的结果,我已经尝试了不同的方法,但不能让它工作这里是代码示例:

#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,我能解决这个问题吗?

tkclm6bt

tkclm6bt1#

何时

  • i == 0,则array[i-1]超出范围
  • i == 9,则array[i+1]超出范围

这会使程序具有未定义的行为。
同样,printf("%d\n",result,resultB);在堆栈上放置了 * 两个 * int,但您只告诉printf使用一个,要么删除一个,要么添加一个%d
解决这些问题后:

#include <stdio.h>

#define SIZE(x) (sizeof (x) / sizeof *(x))

int main(void) {
    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int result = 0;
    int resultB = 0;
    
    for (int i = 1; i < SIZE(array) - 1; i++) {
//               ^                  ^^^
        result = array[i] + array[i + 1];
        resultB = result - array[i - 1];
        printf("%d %d\n", result, resultB);
//                 ^^
    }
}

该算法将生成以下输出:

5 4
7 5
9 6
11 7
13 8
15 9
17 10
19 11
kadbb459

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或者类似的东西。
我将改写如下:

#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 = 1 ;i < 10; i++)
   {
      result = array[i]+array[i-1];
      resultB = result+array[i];
      printf("%d\t%d\n",result,resultB);
   }

   return 0; 
}

此版本代码的输出如下所示:

3   5
5   8
7   11
9   14
11  17
13  20
15  23
17  26
19  29
unftdfkk

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 //结果
等等直到这结束
正如你所看到的每次结果被相加然后再被加到数组中的下一个元素
因此输出将是:

5
8
11
15
19
24
29

相关问题