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

问题描述 投票:0回答:3

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

#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;
  
}

现在我期待的是将添加示例中的数组的前 2 个元素,例如: 1+2=3;然后我想要这个结果 3 添加到数组 [2] 的第二个元素,即 3+2 = 5,然后 5+array[3] = 8 等等,直到数组结束的长度。我知道我做错了什么.我该如何解决这个问题?

arrays c loops addition
3个回答
3
投票

何时

  • i == 0
    然后
    array[i-1]
    出界
  • i == 9
    然后
    array[i+1]
    出界

这些使您的程序具有未定义的行为。

此外,

printf("%d\n",result,resultB);
two
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

2
投票

我在这里看到几个问题。

首先,

array[i+1]
会在
i=9
时访问一个未定义的内存区域(由于
array
的最大索引是
9
,访问
array[9+1]
显然是越界的)。

array[i-1]
时,
i=0
也会发生同样的情况。

请记住,C中的数组零基,并且第一个元素

0
最后一个在您的示例中是
9

Another problem is with your

printf
, you're using a single
%d
, but are trying to print two integer values.它应该是
%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

0
投票
#include <stdio.h>
int main()
{
   int array[9] = {1,2,3,4,5,6,7,8,9,10};
                        
   int result = 0;
   int resultB = 0;
   for(int i = 0 ;i < 9; i++)
   {
      result = array[i]+array[i-1];
      resultB = result+array[i];
      printf("%d\t%d\n",result,resultB);
     
   }
  return 0;
  
}

输出:

1   2
3   5
5   8
7   11
9   14
11  17
13  20
15  23
17  26

然而,如您所见,它应该遍历数组的其他元素,但似乎直到结果 11,它按预期工作然后之后,它只将数组的第三个元素添加到结果中,而结果应该增加到第四个元素到第五个元素等等?为什么会这样,因为我还在测试它:

1+2 = 3, 3+2 = 5, 5+3 = 8, 8+3 = 11,

但它接下来应该做 11+4 = 15 但是,它做 11+3,然后将数组中的第三个元素 +3 到我没想到的所有其他结果?希望我说清楚并感谢你的时间。

© www.soinside.com 2019 - 2024. All rights reserved.