【问题标题】:Function returning sum of even numbers in an array返回数组中偶数和的函数
【发布时间】:2016-03-28 14:16:02
【问题描述】:

所以给我的提示是“写一个函数,给定一个整数数组并返回数组中偶数的总和。函数没有给出数组的长度,而是数组中的最后一个数字为 -1。例如,如果数组包含 {2,3,5,4,-1},则函数返回 6。使用标题 int sumEven(int myArray[])。"

到目前为止我写的代码是

 #include <iostream>
using namespace std;

int sumEven(int myArray[]){

int sum = 0;

for (int i=0; i++;){

if (myArray[i] >=0) {
    sum+=myArray[i];
}
}
return sum;

}

但它总是返回零?我没有看到我在这里做错了什么

【问题讨论】:

  • 因为i++(当i0)将被评估为false,for循环根本不会运行。

标签: c++ arrays


【解决方案1】:

for() 循环的典型参数顺序如下:

for(&lt;initialize variable&gt;; &lt;end condition&gt;; &lt;increment variable&gt;)

在您的示例中,您将 i++ 作为 for 循环的第二个参数,这是不正确的。它将返回 0(因为 i 从 0 开始,并且 i++ 是后增量,所以它返回 0 然后递增到 1)并且您的 for 循环将立即退出,因为 0 的计算结果为 false。

请将结束条件替换为您描述的结束条件:myArray[i] != -1。您还应该在将数字添加到 sum 之前检查该数字是否为偶数,这可以通过检查除以 2 时的余数是否为 0 来完成。

#include <iostream>
using namespace std;

int sumEven(int myArray[]){

    int sum = 0;

    for (int i=0; myArray[i] != -1; i++){
        if(myArray[i] % 2 == 0)
            sum += myArray[i];
    }

    return sum;
}

【讨论】:

    【解决方案2】:

    错误在for 循环中。您应该将for 循环更改为for (int i=0; ; i++),并且您还应该添加一个break 语句以退出for 循环。

    using namespace std;
    
    int sumEven(int myArray[]){
    
    int sum = 0;
    
    for (int i=0; ; i++){
    
        if (myArray[i] >=0) {
            sum+=myArray[i];
        }
        else
        {
            break;
        }
    }
    return sum;
    
    }
    

    【讨论】:

      【解决方案3】:
      int sumEven(int arr[]) {
          int sum = 0;
          // int len = (sizeof(arr)/sizeof(*arr));  // Since this will not work for all cases.
          // auto len = end(arr) - begin(arr);
          for (int i = 0; arr[i] >= 0; i++) {
              if(arr[i]%2==0)
                  sum += arr[i];
          }
          return sum;
      }
      

      【讨论】:

      • end(arr) - begin(arr); 也不起作用。注意arr 只是一个指针,而不是数组。你试过你的代码吗?
      • @WhozCraig :同意,感谢您的指出。我已经编辑了我的答案,请检查它。
      • @WhozCraig:完成:)
      【解决方案4】:

      我猜

      for (int i=0; i++;){
      

      不进行迭代,导致继续循环的条件是“i++” - 初始为零。

      用下面的例子替换它

      for (int i=0; i < array_length; i++;){
      

      【讨论】:

      • 不,没有array_length
      • 我明白了:),但它应该是。在不知道数组大小的情况下如何遍历数组?
      • OP 提到了它。 "函数没有给出数组的长度,但是数组的最后一个数是-1。"
      • 好的,错过了。在这种情况下,已经提供了正确的解决方案:for (int i=0; ; i++){
      • WhozCraig,你错过了新的“;”在行:)
      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多