繁体   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