#include #include

using namespace std;

int sum(int nums[], int len) { int s = 0; for (int i = 0; i < len; i++) s += nums[i]; cout << s << ' '; return s; }

int max(int nums[], int len) { int m = nums[0]; for (int i = 1; i < len; i++) if (nums[i] > m) m = nums[i]; return m; }

double maxDouble(double nums[], int len) { double m = nums[0]; for (int i = 1; i < len; i++) if (nums[i] > m) m = nums[i]; return m; }

int min(int nums[], int len) { int m = nums[0]; for (int i = 1; i < len; i++) if (nums[i] < m) m = nums[i]; return m; }

double average(int nums[], int len) { return (double(sum(nums, len)) - max(nums, len) - min(nums, len)) / (len - 2); }

int main() { int n, m; vector averages; cin >> n >> m; for (int i = 0; i < n; i++) { int nums[m]; for (int j = 0; j < m; j++) { cin >> nums[j]; } double avg = average(nums, m); averages.push_back(avg); cout << avg << endl; } cout << setprecision(2) << maxDouble(&averages[0], averages.size()); return 0; }

现在这个程序有一点问题,无法获得数组的长度,无论进行求和、取平均值只能获得前两个数字内容:的结果。这是因为在函数中传入数组参数时,数组名会被转换为指向数组首元素的指针,因此 sizeof(nums) / sizeof(int) 的结果实际上是指针大小除以 int 类型大小,不是数组的长度。

为了解决这个问题,可以在函数中传入数组长度作为参数,或者将数组改为使用 vector 类型。具体实现可以参考上面的代码:

C++ 数组求和、平均值、最大值、最小值函数优化:解决数组长度获取问题

原文地址: https://www.cveoy.top/t/topic/oFjY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录