簡體   English   中英

程序查找給定數組中元素的總和

[英]Program to find sum of elements in a given array

我必須在給定數組中找到元素,並且在其他站點中找到了一個程序,但是當我嘗試以我的方式解釋代碼時,出現錯誤。

那是來自另一個網站:

#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 的長度時 cin>> 它們。

arr[Broi]正在越界訪問數組,導致未定義的行為,因為數組僅包含單個元素。 即使它由Broi元素組成,它也會越界訪問數組,因為有效索引將是0Broi - 1

在評論部分(但不是在問題中),您說您應該從用戶那里讀取10數字。 如果arr指向一個包含10元素而不是1個元素的數組,那么寫arr[i]而不是arr[Broi]是有意義的。

該問題的最簡單解決方案是根本不使用 arrays:

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

但是,由於您在評論部分聲明您應該使用 arrays,那么您可能應該首先將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;
}

這兩個程序都有以下 output:

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.

您的代碼根本沒有聲明數組。 它聲明了一個int

你在評論中說:

任務是讀取 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;
}

沒有太多復雜功能的簡單修復如下所示:

#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的大小更改為適合堆棧 memory 的任何大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM