【问题标题】:adding all numbers inside an Array in c++在c ++中将所有数字添加到数组中
【发布时间】:2016-04-27 04:10:02
【问题描述】:

我刚开始在大学学习 C++,我的任务是做以下事情:我必须编写一些代码,使用迭代(即循环)来计算整数数组中项目的累积和; 我的代码是:

int main() {
    int myArray[] = {1,2,3,4,5};
    int i;
    int j;
    j+= myArray[]; 
    for(i=0;i<5;i++){
    printf("%d\n",myArray[j]);
  }
}    

虽然这段代码没有产生我正在寻找的东西,而且我对接下来应该做什么感到困惑。

【问题讨论】:

  • 这是为你编译的吗?
  • No 错误如下: 第 5 行:错误:在 ']' 标记编译之前预期的主表达式由于 -Wfatal-errors 而终止。 @保罗鲁尼
  • 将错误添加到问题中。
  • 你想让j变成15吗?
  • 不管您的 实际 问题如何,您都应该改掉使用短变量名而不是本地化循环变量的习惯,然后将其范围限定为循环本身,例如 @ 987654323@。 没有理由将累加器变量称为j。改正这个坏习惯和成群结队的开发人员,他们将来必须维护你的代码,他们会赞美你而不是诅咒你的母亲产生了这种卑鄙的问题:-)

标签: c++ arrays loops sum


【解决方案1】:
int main() {
    int myArray[] = {1,2,3,4,5};
    int sum = 0;
    for(int i=0; i<5; i++)
        sum += myArray[i] ;

    std::cout << sum;   
}

这里sum被初始化为0,并且数组中的每个元素都被循环添加到sum中。

您可以使用std::accumulate 来做同样的事情,因此您不必担心数组的大小。

#include <iostream>
#include <algorithm>

int main() {
    int myArray[] = {1,2,3,4,5};
    std::cout << std::accumulate(std::begin(myArray), std::end(myArray), 0);
} 

请注意,std::begin() 和 std::end() 是在 C++11 中引入的。对于早期版本,您将不得不使用指针:

std::accumulate(myArray, myArray + 5, 0);

【讨论】:

  • 请注意,std::begin() 和 std::end() 是在 C++11 中引入的。对于早期版本,您将不得不使用指针:std::accumulate(myArray, myArray + 5, 0);
【解决方案2】:

我已经用 cmets 和一行代码编辑了你的代码。请检查它们。

#include <cstdio>

int main() {
    // Array and index into it.

    int myArray[] = {1,2,3,4,5};
    int i;

    // Initialise sum to zero for starting.

    int sum = 0;

    // Adding whole array will not work (though it would be nice).
    // Instead, go through array element by element.

    // j += yArray[];
    for (i = 0; i < 5; i++) { 
        // Add element to sum and output results.

        sum += myArray[i];
        printf ("Adding %d to get %d\n", myArray[i], sum);
    }

    // Output final result.

    printf ("Final sum is: %d\n", sum);
}

还请注意,我根据您的问题使用了printf,但您确实应该使用 C++ 流工具进行输入和输出。

该代码的输出是:

Adding 1 to get 1
Adding 2 to get 3
Adding 3 to get 6
Adding 4 to get 10
Adding 5 to get 15
Final sum is: 15

【讨论】:

  • for 循环中的 5 可能最好写成sizeof(myArray) / sizeof(*myArray),如果您想在某个时候更改所述数组的长度。当然,这是原始代码的问题,而不是您的答案所特有的问题。
  • 你说得对,但我不确定 OP 是否理解这种命令,并且它只能在 main 函数中使用。因此,我坚持使用基础知识和对原始代码的最小更改。
  • 谢谢@GiladMitrani,我需要能够理解每一行如何影响输出,这是很好的解释!干杯
【解决方案3】:

请注意,&lt;algorithm&gt; 有一个功能:

const int myArray[] = {1,2,3,4,5};
const int sum = std::accumulate(std::begin(myArray), std::end(myArray), 0);

如果你想自己做循环,你可以使用 for-range (c++11 起):

const int myArray[] = {1, 2, 3, 4, 5};
int sum = 0;

for (auto e : myArray) {
    sum += e;
}

【讨论】:

    【解决方案4】:

    您需要将j+= myArray[] 放入循环中,并将i 放入myArray 的[] 中以执行求和操作。因此,您的代码可以修改如下,以匹配您想要执行的操作。在对数组中的所有元素求和后,它退出 for 循环,并像第二个 printf 一样打印最终的总和。请注意,j 已替换为 sum 以便可读。

    int main() {
        int myArray[] = {1,2,3,4,5};
        int sum=0; // sum
        for(int i=0; i<5; i++){
            sum += myArray[i];
            printf("%d\n", myArray[i]);
        }
        printf ("Sum: %d \n", sum);
    }
    

    你可以在link 看到一个可运行的代码。希望对您有所帮助。

    【讨论】:

      【解决方案5】:
      int main() {
          int yourArray[] = {1,2,3,4,5};
          int sum = 0;
          for(int i=0; i<5; i++) {
              sum = sum + yourArray[i] ;
              std::cout << sum;   
          }
      }
      

      在上面的代码中,for循环会迭代5次,每次将数组中的一个值添加到sum变量中。

      在第一次迭代中,sum 的值为 0,yourArray[0] 的值为 1,所以sum = 0 + 1;。

      在第二次迭代中,sum 的值为 1,yourArray[1] 的值为 2,所以sum = 1 + 2;。

      等等……

      每次迭代完成后,我们输出sum,即1、3、6、10、15。

      所以 15 是数组所有值的总和。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        • 2016-07-15
        • 1970-01-01
        • 2011-04-03
        • 2018-11-04
        • 2015-08-18
        相关资源
        最近更新 更多