121: Computer Science 1 --- Lecture February 26-27

Topics: Multi-subscripted Arrays

 

The following example is adapted from the text, and illustrates the use of multi-dimensional arrays in C++.

 

// Adapted from Fig. 4.23: fig04_23.cpp

// Double-subscripted array example

#include <iostream>

 

using std::cout;

using std::endl;

 

const int students = 5;   // number of students

const int exams = 4;      // number of exams

 

int maximum(int [][ exams ], int, int );

double average( int [], int );

void printArray( int [][ exams ], int, int );

 

int main()

{

   int studentGrades[ students ][ exams ] =

          { { 77, 68, 86, 73 },

            { 96, 87, 89, 78 },

            { 70, 90, 86, 81 },

{ 99},                

{ 100, 72, 64} };

 

   cout << "The array is:\n";

   printArray( studentGrades, students, exams );

   cout << "\nHighest grade: "

        << maximum( studentGrades, students, exams ) << '\n';

 

   for ( int person = 0; person < students; person++ )

      cout << "The average grade for student " << person << " is "

           << average( studentGrades[ person ], exams ) << endl;

 

   return 0;

}

 

// Find the maximum grade

int maximum( int grades[][ exams ], int pupils, int tests )

{

   int highGrade = grades[0][0];

 

   for ( int i = 0; i < pupils; i++ )

 

      for ( int j = 0; j < tests; j++ )

 

         if ( grades[ i ][ j ] > highGrade )

            highGrade = grades[ i ][ j ];

 

   return highGrade;

}

 

// Determine the average grade for a particular student

double average( int setOfGrades[], int tests )

{

   int total = 0;

 

   for ( int i = 0; i < tests; i++ )

      total += setOfGrades[ i ];

 

   return static_cast< double >( total ) / tests;

}

 

// Print the array

void printArray( int grades[][ exams ], int pupils, int tests )

{

   cout << "                 [0]  [1]  [2]  [3]";

 

   for ( int i = 0; i < pupils; i++ ) {

      cout << "\nstudentGrades[" << i << "] ";

 

      for ( int j = 0; j < tests; j++ )

         cout << grades[ i ][ j ] ;

    cout << endl;

   }

}