c ++: инициализация многомерного массива - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь скопировать программу из моего учебника. похоже, я все сделал правильно, за исключением одной вещи: я не могу понять, как инициализировать многомерный массив, который мне нужен, чтобы получить вывод, напечатанный в книге.

программа должна распечатать двумерный массив. один столбец - это идентификационный номер учащегося (от 1 до 4), другой столбец - их средняя оценка теста, и под заголовком «Викторины» есть три столбца, в которых перечислены все их индивидуальные оценки теста. когда я запускаю программу, я получаю кучу случайных чисел для результатов, и я думаю, что это потому, что я не понял, как собрать данные, которые мне нужны для этого примера.

книга не делала не дают код для заполнения этого массива, хотя он не предлагает каких-либо четких примеров того, как это сделать. Я проверил несколько примеров инициализации многомерного массива онлайн, но я не могу понять, как применить что-либо, что я прочитал, к этой конкретной c ситуации.

Заранее благодарю за любую информацию.

#include <iostream>

//necessary to use setw()
#include <iomanip>

using namespace std;

const int NUMBER_STUDENTS = 4, NUMBER_QUIZZES = 3;

void computeStAve(const int grade[][NUMBER_QUIZZES], double stAve[]);

void computeQuizAve(const int grade[][NUMBER_QUIZZES], double quizAve[]);

void display(const int grade[][NUMBER_QUIZZES], const double stAve[], const double quizAve[]);

int main() {

  int grade[NUMBER_STUDENTS][NUMBER_QUIZZES];

//giving my own values for stAve[] and quizAve[]

  double stAve[NUMBER_STUDENTS] = {0, 1, 2, 3};
  double quizAve[NUMBER_QUIZZES] = {7.0, 5.0, 7.5};



  computeStAve(grade, stAve);
  computeQuizAve(grade, quizAve);
  display(grade, stAve, quizAve);

  return 0;

}


void computeStAve(const int grade[][NUMBER_QUIZZES], double stAve[]){

  for (int stNum = 1; stNum <= NUMBER_STUDENTS; stNum++){

    double sum = 0;

    for (int quizNum = 1; quizNum <= NUMBER_QUIZZES; quizNum++){

      sum = sum + grade[stNum - 1][quizNum - 1];

      stAve[stNum - 1] = sum / NUMBER_QUIZZES;

    }

  }

}


void computeQuizAve(const int grade[][NUMBER_QUIZZES], double quizAve[]){

  for (int quizNum = 1; quizNum <= NUMBER_QUIZZES; quizNum++){

    double sum = 0;

    for (int stNum = 1; stNum <= NUMBER_STUDENTS; stNum++){

      sum = sum + grade[stNum - 1][quizNum - 1];

      quizAve[quizNum - 1] = sum / NUMBER_STUDENTS;

    }

  }

}


void display(const int grade[][NUMBER_QUIZZES], const double stAve[], const double quizAve[]){

  cout << setw(10) << "Student";
  cout << setw(5) << "Ave";
  cout << setw(15) << "Quizzes" << endl;

  for (int stNum = 1; stNum <= NUMBER_STUDENTS; stNum++){

    cout << setw(10) << stNum;
    cout << setw(5) << stAve[stNum - 1] << " ";

    for (int quizNum = 1; quizNum <= NUMBER_QUIZZES; quizNum++){

      cout << setw(5) << grade[stNum - 1][quizNum - 1];

    }

    cout << endl;

  }

  cout << "Quiz averages: ";

  for (int quizNum = 1; quizNum <= NUMBER_QUIZZES; quizNum++){

    cout << setw(5) << quizAve[quizNum - 1];
    cout << endl;

  }

}
...