[英]Given an array of integers, find the sum of its elements. where is the error?
[英]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
元素組成,它也會越界訪問數組,因為有效索引將是0
到Broi - 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.