【问题标题】:Program to find sum of elements in a given array程序查找给定数组中元素的总和
【发布时间】:2022-01-09 05:41:49
【问题描述】:

我必须找到给定数组中的元素,并且我在其他站点中找到了一个程序,但是当我尝试以我的方式解释代码时,我遇到了错误。

这是来自另一个网站:

#include <iostream>
using namespace std;

// function to return sum of elements
// in an array of size n
int sum(int arr[], int n)
{
    int sum = 0; // initialize sum

    // Iterate through all elements
    // and add them to sum
    for (int i = 0; i < n; i++)
        sum += arr[i];

    return sum;
}

int main()
{
    int arr[] = { 12, 3, 4, 15 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Sum of given array is " << sum(arr, n);
    return 0;
}

这是我的:

#include <iostream>
using namespace std;
int Function(int arr[], int Broi)
{
    int suma = 0;
    for (int i = 0; i < Broi; i++) {
        cin >> arr[Broi];
        suma += arr[i];
    }
    return suma;
}

int main()
{
    int arr;
    int Broi = sizeof(arr) / sizeof(arr[0]);
    cout << "Srednoto Aritmetichno e: " << Function(arr[], broi);
    return 0;
}

第一个程序也给出了数组的数字,但我希望用户在你写 arr 的长度时输入>>它们。

【问题讨论】:

  • std::vector 和 push_back 会是更好的 c++ 解决方案。
  • int arr; 这是一个整数。这不是一个数组。
  • 错误是什么?结果错误?那是因为您写信给arr[Broi],但添加了arr[i]。您根本不需要使用数组。只需将数字读入int 并将其添加到suma。您没有在任何地方使用个人号码
  • 虽然你甚至需要一个数组来解决这个问题?您可以在不使用数组的情况下对任意数量的用户输入求和。
  • 旁注:使用最新的编译器,您可以将sizeof(arr) / sizeof(arr[0]) 替换为std::size(arr)。请注意,要使任何一个工作,arr 必须是一个数组,并且该数组不能通过将 decayed to a pointer 传递给函数或对其执行数学运算来获得。

标签: c++ arrays


【解决方案1】:

您的代码根本没有声明一个数组。它声明了一个int

你在 cmets 中说过:

任务是读取10个数字,并将它们放入数组中

因此,您应该在main() 中声明一个 10-int 数组,并在将其传递给Function() 之前 用用户值填充它,类似于原始代码的操作方式。用户输入并不真正属于Function()

试试类似的方法:

#include <iostream>
using namespace std;

int Function(int arr[], int Broi)
{
    int suma = 0;
    for (int i = 0; i < Broi; i++) {
        suma += arr[i];
    }
    return suma;
}

int main()
{
    int arr[10];

    cout << "Enter 10 numbers: ";
    for(int i = 0; i < 10; ++i){
        cin >> arr[i];
    }

    cout << "The sum is: " << Function(arr, 10);
    return 0;
}

【讨论】:

    【解决方案2】:

    arr[Broi] 行越界访问数组,导致未定义行为,因为数组仅包含单个元素。即使它由Broi 元素组成,它也会越界访问数组,因为有效的索引将是0Broi - 1

    在 cmets 部分(但不在问题中),您声明您应该从用户那里读取 10 数字。如果arr 指向10 元素数组而不是1 元素,那么写arr[i] 而不是arr[Broi] 是有意义的。

    解决这个问题的最简单方法是根本不使用数组:

    #include <iostream>
    
    constexpr int NUM_INPUTS = 10;
    
    int main()
    {
        int input;
        int sum = 0;
    
        for ( int i = 0; i < NUM_INPUTS; i++ )
        {
            //prompt user for input
            std::cout << "Please enter integer #" << i + 1 << ": ";
    
            //attempt to read integer from user
            if ( ! ( std::cin >> input ) )
            {
                std::cout << "Input failure!\n";
                return 1;
            }
    
            //add user input to sum
            sum += input;
        }
    
        //print sum
        std::cout << "\nThe sum of all numbers is: " << sum << ".\n";
    
        return 0;
    }
    

    但是,由于您在 cmets 部分中声明您应该使用数组,那么您可能应该首先将 std::cin 中的所有 10 数字读入 10 元素的数组,然后计算总和之后:

    #include <iostream>
    #include <cstdlib>
    
    constexpr int NUM_INPUTS = 10;
    
    void input_array( int arr[] )
    {
        for ( int i = 0; i < NUM_INPUTS; i++ )
        {
            //prompt user for input
            std::cout << "Please enter integer #" << i + 1 << ": ";
    
            //attempt to read integer from user
            if ( ! ( std::cin >> arr[i] ) )
            {
                std::cout << "Input failure!\n";
                std::exit( EXIT_FAILURE );
            }
        }
    }
    
    int calculate_sum( int arr[] )
    {
        int sum = 0;
    
        for ( int i = 0; i < NUM_INPUTS; i++ )
        {
            sum += arr[i];
        }
    
        return sum;
    }
    
    int main()
    {
        int arr[NUM_INPUTS];
    
        //fill array with user input
        input_array( arr );
    
        //print sum
        std::cout << "\nThe sum of all numbers is: " << calculate_sum( arr ) << ".\n";
    
        return 0;
    }
    

    两个程序都有以下输出:

    Please enter integer #1: 20
    Please enter integer #2: 30
    Please enter integer #3: 10
    Please enter integer #4: 5
    Please enter integer #5: 31
    Please enter integer #6: 17
    Please enter integer #7: 6
    Please enter integer #8: 14
    Please enter integer #9: 18
    Please enter integer #10: 50
    
    The sum of all numbers is: 201.
    

    【讨论】:

      【解决方案3】:

      没有太多复杂功能的简单修复如下:

      #include <iostream>
      
      int Function( int* const array, const std::size_t elementCount)
      {
          int suma { };
      
          for ( std::size_t idx = 0; idx < elementCount; ++idx )
          {
              std::cin >> array[ idx ];
              suma += array[ idx ];
          }
      
          return suma;
      }
      
      int main( )
      {
          int myArray[ 4 ] { };
          int suma = Function( myArray, sizeof( myArray ) / sizeof( *myArray ) );
          std::cout << "Srednoto Aritmetichno e: " << suma << '\n';
      
          return 0;
      }
      

      就是这样。您可以将myArray 的大小更改为适合堆栈内存的任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        相关资源
        最近更新 更多