获取 2D 数组中数字的平均、最小值和最大值

Getting the Average,Min, and Max of numbers in 2D array

本文关键字:最小值 最大值 2D 数组 数字 获取      更新时间:2023-10-16

我在获取 2D 数组元素的最小值、最大值和平均值时遇到问题。

我有一个包含学生和成绩的 2D 数组。

我正在用兰特生成成绩。例如,当我输入 2,2 时它会打印出我

Courses : 01   02   Average   Min   Max
    ID   
    01     8   50     29
    02    74   59     29

我的平均函数取第一个平均值,不取其他平均值。

这是我的代码;

int A[30][30];
int findAverage(int noOfStudents ,int noOfGrades ){
    float sum,average;


    for (int i = 0 ; i < noOfGrades ; i++) {
        for (int j = 0; j<noOfStudents; j++) {
        sum += A[i][j];
        }
        average = sum / noOfGrades;
       // cout << "   " << format(average);
        sum = 0;
        return format(average);
    }

以及我如何使用它

int main() {
    int noOfCourses , noOfStudents;
    cin >> noOfCourses >> noOfStudents;
    cout << "Courses : " ;
    for (int i = 0; i < noOfCourses; i++) {
        if (i+1 >= 10) {
            cout << i+1 << "   ";
        }else{
            cout <<"0" << i+1 << "   ";
        }
    }
    cout << "Average   Min   Max";
    for(int i=0; i<noOfStudents; i++) {         //This loops on the rows.        
        for(int j=0; j<noOfCourses; j++) {     //This loops on the columns
            A[i][j] = genGrade(); 
        }
    }
    cout << "n    ID   " << endl;
    for(int i=0; i<noOfStudents; i++) {  //This loops on the rows.
        if (i+1 >= 10) {
            cout <<"    " << i+1 << "   ";
        }else{
            cout <<"    0" << i+1 << "   ";
        }
        //cout <<"    0" << i+1 << "   ";
        for(int j=0; j<noOfCourses; j++) {  //This loops on the columns

            if (A[i][j] >= 10 && A[i][j] <=99) {
                cout <<" " << A[i][j]  << "  ";
            }
            if(A[i][j] < 10) {
                cout <<"  " << A[i][j] << "  ";
            }
            if (A[i][j] == 100) {
                cout << A[i][j] << "  ";
            }
        }
        cout <<"   "<<findAverage(noOfStudents,noOfCourses);
        cout << endl;
    }
}

我做错了什么?另外,我如何获得每个数组的最小值,最大值?

我强烈建议使用容器来完成此任务。例如,您可以执行以下操作

typedef std::vector<float> grades;
std::vector<grades> student_grades;
//populate 
for(const grades& gr : student_grades) {
    float min, max, avg;
    std::tie(min, max)=std::minmax(gr.begin(), gr.end());
    avg=std::accumulate(gr.begin(), gr.end(), 0.0) / gr.size());
    std::cout << "Min" << min << " Max: " << max << " Avg: " << avg << std::endl;
}

http://en.cppreference.com/w/cpp/algorithm/minmax

http://en.cppreference.com/w/cpp/algorithm/accumulate

http://en.cppreference.com/w/cpp/utility/tuple/tie

对于初学者来说,你从循环内部返回:

for (int i = 0 ; i < noOfGrades ; i++) {
  for (int j = 0; j<noOfStudents; j++) {
    ...
  }
  ...
  return ...;
}

你能看到外部循环如何只执行一次吗?

问题是在你的findAverage函数中,你在循环行的循环中有一个 return 语句。如果您想要一个非常简单的修复,请在 findAverage 函数中添加另一个参数,以指示要计算哪一行的平均值。

int findAverage(int course ,int noOfGrades ){
    float sum,average;

    for (int j = 0; j<noOfStudents; j++) {
        sum += A[course][j];
    }
    average = sum / noOfGrades;
    return format(average);
 }

并像这样称呼它

cout <<"   "<<findAverage(i,noOfCourses);