【C++练习】21.C++中,计算数组元素的平均值
·
目录
-
- 方法一:使用循环遍历数组
- 方法二:使用标准库函数 `std::accumulate`
- 方法三:使用 C++11 的范围循环
- 方法四:使用指针遍历
- 方法五:使用 STL 容器和算法
- 方法六:使用 Lambda 表达式
在C++中,计算数组元素的平均值有多种方法,以下是几种常见的方法及其实现思路、代码示例和说明:
方法一:使用循环遍历数组
思路:通过循环遍历数组,将所有元素累加到一个变量中,然后将累加结果除以数组的长度,得到平均值。
代码示例:
#include <iostream>
using namespace std;
double calculateAverage(int arr[], int size) {
double sum = 0;
for (int i = 0; i < size; ++i) {
sum += arr[i];
}
return sum / size;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
double average = calculateAverage(arr, size);
cout << "Average: " << average << endl;
return 0;
}
说明:
sizeof(arr) / sizeof(arr[0])用于计算数组的长度。- 循环中将每个元素累加到
sum中,最后计算平均值。
方法二:使用标准库函数 std::accumulate
思路:使用 <numeric> 头文件中的 std::accumulate 函数来计算数组元素的总和,然后除以数组的长度。
代码示例:
#include <iostream>
#include <numeric>
using namespace std;
double calculateAverage(int arr[], int size) {
double sum = accumulate(arr, arr + size, 0.0);
return sum / size;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
double average = calculateAverage(arr, size);
cout << "Average: " << average << endl;
return 0;
}
说明:
std::accumulate的第三个参数是累加的初始值,这里使用0.0确保结果为double类型。- 简化了代码,直接利用标准库函数计算总和。
方法三:使用 C++11 的范围循环
思路:使用 C++11 的范围循环(for :)来遍历数组,累加元素值,然后计算平均值。
代码示例:
#include <iostream>
using namespace std;
double calculateAverage(int arr[], int size) {
double sum = 0;
for (int value : arr) {
sum += value;
}
return sum / size;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
double average = calculateAverage(arr, size);
cout << "Average: " << average << endl;
return 0;
}
说明:
- 范围循环简化了数组的遍历过程,代码更简洁。
- 逻辑与方法一类似,只是遍历方式不同。
方法四:使用指针遍历
思路:使用指针来遍历数组,将数组的每个元素累加到一个变量中,然后计算平均值。
代码示例:
#include <iostream>
using namespace std;
double calculateAverage(int arr[], int size) {
double sum = 0;
int* ptr = arr;
for (int i = 0; i < size; ++i) {
sum += *(ptr + i);
}
return sum / size;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
double average = calculateAverage(arr, size);
cout << "Average: " << average << endl;
return 0;
}
说明:
- 使用指针
ptr指向数组的首地址,通过指针偏移访问数组元素。 - 与方法一类似,但使用指针来实现。
方法五:使用 STL 容器和算法
思路:使用 STL 容器(如 std::vector)和算法(如 std::accumulate)来计算平均值。
代码示例:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
double calculateAverage(const vector<int>& vec) {
double sum = accumulate(vec.begin(), vec.end(), 0.0);
return sum / vec.size();
}
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
double average = calculateAverage(vec);
cout << "Average: " << average << endl;
return 0;
}
说明:
- 使用
std::vector容器存储数组元素,更灵活。 - 使用
std::accumulate计算总和,代码简洁。
方法六:使用 Lambda 表达式
思路:使用 C++11 的 Lambda 表达式结合 std::for_each 来计算总和,然后计算平均值。
代码示例:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
double calculateAverage(const vector<int>& vec) {
double sum = 0;
for_each(vec.begin(), vec.end(), [&](int value) { sum += value; });
return sum / vec.size();
}
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
double average = calculateAverage(vec);
cout << "Average: " << average << endl;
return 0;
}
说明:
- 使用 Lambda 表达式简化了累加操作。
- 结合
std::for_each遍历容器元素。
这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。
更多推荐

所有评论(0)