簡體   English   中英

編寫一個接受一維數組並計算元素總和並顯示它的C ++函數

[英]Write a C++ function that accepts a 1-D array and calculates the sum of the elements, and displays it

我想創建一個定義1d數組,計算元素總和並顯示該總和的函數。 我編寫了以下代碼,但是我不知道使用指針和其他高級編碼技術。

#include <iostream>

using namespace std;


int main()
{
int size;
int A[];

cout << "Enter an array: \n";
cin << A[size];

int sum;

int sumofarrays(A[size]);

sum = sumofarrays(A[size]);
cout << "The sum of the array values is: \n" << sum << "\n";
}


int sumofarrays(int A[size])
{
int i;
int j = 0;
int sum;
int B;

        for (i=0; i<size; i++)
                {
                        B  = j + A[i];
                        j = B;
                }

sum = B;
return(sum);
}

嘗試編譯此代碼時,出現以下錯誤:

SumOfArrays.cpp:19:18:錯誤:調用的對象類型'int'不是函數或函數指針sum = sumofarrays(size)

如果僅使用了std::vector<int> A類的容器作為數據。 然后,您的總和將變為:

int sum = std::accumulate(A.begin(), A.end(), 0);

然后,每個專業程序員都將很快了解您要做什么。 這有助於使您的代碼具有可讀性和可維護性。

開始使用C ++標准庫。 讀一本好書,如《 Stroustrup》。

請選擇拔示巴的答案-這是正確的答案。 就是說,除了我上面的評論之外,我還想提供一些提示:

1)您需要了解堆棧上的數組(例如“ int A [3]”)和堆(例如由malloc或new分配的指針)之間的區別。 這里有一定程度的細微差別,因此我將不做全部介紹,但是,如果您要使用C或C ++編程,則必須學習這一點,這一點非常重要-即使最佳實踐是盡可能避免使用指針,並且只需使用stl容器! ;)

2)我不會告訴您使用特定的縮進樣式。 但請選擇一個並保持一致。 您會以這種隨意的方法使其他程序員發瘋;)同樣,大寫也是如此。

3)變量名應始終有意義(可能存在例外,否則,無意義的循環計數器(對於“ i”來說,這是標准的))。 沒有人會看您的代碼並立即知道“ j”或“ B”的含義。

4)實施的算法僅需要這些變量的一半。 沒有必要使用所有這些臨時對象。 只需將sum聲明為“ int sum = 0;”即可。 然后在循環中執行“ sum + = A [i];”

5)最佳實踐是-與過去不同,在過去不可能-僅在需要使用變量的地方聲明變量,而不是事先聲明。 因此,例如,您不需要在循環之前聲明B或j(如上所述,實際上並不需要),您只需在循環內部聲明它們即可,例如“ int B = j + A [i ];“ 和“ int j = B;”。 更好的是“ const int”,因為沒有任何改變。 但最好的是,如#4所述,根本不要使用它們,只需使用sum-您實際上關心的唯一變量;)

這同樣適用於for循環-除非在某種情況下需要查看循環從何處中斷,否則應在循環內部聲明“ i”(“ for(int i = ....”)),而不是在循環外部進行聲明。完成(在您的示例中是不可能的)。

6)盡管這里並沒有什么區別,但是您應該養成在for循環中使用“ ++ i”而不是“ i ++”的習慣。 實際上,它僅對類有影響,與整​​數之類的基本類型無關,但是前綴遞增的算法通常比后綴遞增的算法快一點。

7)您確實意識到自己在這里兩次調用了sumOfArrays,對嗎?

int sum;

int sumofarrays(A[size]);

sum = sumofarrays(A[size]);

您真正的意思是:

const int sum = sumofarrays(A);

或者,您可能根本跳過了將其分配給變量的操作,而只是在cout中簡單地調用了它。 目標是使用盡可能少的代碼不會引起混淆。 因為多余的多余代碼只會增加將某人扔掉或包含未檢測到的錯誤的幾率。

只是不要走太遠,做一個大雜燴,或者嘗試用單線的“技巧”太“聰明”,當他們第一次看它們時,沒人會理解! ;)

8)我個人建議-在此階段-避免像瘟疫那樣“使用”電話。 重要的是,必須每次都顯式調用“ std :: ....”,以了解stl的組成部分。 另外,如果您曾經編寫過其他人可能使用的.h文件,則您不想(通過習慣)通過“使用”調用來污染它們,而這將對其他人的代碼產生影響。

您是一個初學者,沒關系-您會學習! :)

暫無
暫無

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

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