LECTURE 13: Arrays (Read Sections 8.1-8.3, 8.4)

 

So far, we covered simple data types (int, double, char) that

 

Often, we would like to group similar data items together. For example, we want to store and process exam scores of all students in the class. Arrays address this requirement!

 

Array is a collection of two or more adjacent memory locations, called array elements

 

Array declaration and use

double x[2]; // reserves two memory locations to store two double values

 

x[0] = 5.0; // assigns value 5.0 to the first element of the array

x[1] = 3.0;

printf(“%f”,x[0]); // prints out the value of the first element

x[1] = x[0] + x[1]; // updates the value of the second array element to 8.0

 

Array initialization

int sum = 0; // initialization of integer variable

double x[2] = {5.0, 3.0}; // initialize values of the two array elements

 

Array subscripts

double x[10];

 

x[0] = 1.0;

for (i=2; i<10; i=i+1)

x[i] = 2*x[i-1];

 

Question: what will be the value of element x[9] after the loop is executed?

 

More examples: look at Table 8.2 in the textbook

 

Example:

Enter exam scores;

Determine number of entries;

Calculate average;

Find the smallest element;

Search the array for score 60;

Sort the array;

Calculate the median;

 

#include<stdio.h>

int main(void)

{

   int scores[20];

   int i, flag;

   int array_size, array_sum, array_avg, array_min;

 

   /* Populate the array */

   i = 0;

   flag = 0;

   do {

      printf(“\n Enter an integer >= 0 (if integer < 0, stop)> “);

      scanf(“%d”,&scores[i]);

      printf(“... you entered %d”, scores[i]);

 

      if (scores[i] > 0)

         i = i+1;

      else

         flag = 1;

   } while(i < 20 && flag == 0);

   array_size = i;

   printf(“\n\n***Size of the array is %d”, array_size);

 

 

   /* Find sum of all entered integers */

   array_sum = 0;

   for (i=0; i < array_size; i = i+1)

      array_sum = array_sum + scores[i];

   printf(“\n*** Sum of array elements is %d”, array_sum);

 

   /* Calculate the average of the entered integers */

   array_avg = array_sum/array_size;

   printf(“\n***Average of the array elements is %d”, array_size);

 

 

   /* Find the smallest element */

   array_min = scores[0];

   for (i = 1; i < array_size; i++) {

      if (scores[i] < array_min)

         array_min = scores[i];

   }

   printf(“\n***The smallest element of the array is %d \n”, array_min);

 

   /* Search the array to check if there is score 60 */

   flag = 0;

   for (i = 1; i < array_size; i++) {

      if (scores[i] == 60)

         flag = 1;

   }

   if (flag == 1)

      printf(“\n***Element with value 60 exists in the array \n”);

   else

      printf(“\n***Element with value 60 does not exist in the array \n”);

 

   /* Sort the array using selection sort */

   for (i = 0; i < array_size-1; i++) {

      /* The following loop finds the minimum element between i-th and the last element */

      tmp_min = scores[i];

      for (j = i+1; j < array_size; j++) {

         if (scores[j] < tmp_min)

            tmp_min = scores[j];

            tmp_min_pos = j;

      }

      /* if the minimum element is not i-th element, swap i-th and tmp_min_pos elements */

      if (tmp_min < scores[i]) {

         scores[tmp_min_pos] = scores[i];

         scores[i] = tmp_min;

      }

   }

 

   /* Calculate the median of the array */

   if (array_size%2 == 1)

      array_median = score[(array_size+1)/2];

   else

      array_median = (score[array_size/2-1] + score[array_size/2]) / 2;

   printf(“\n***The median of the array is %d \n\n”, array_median);

 

   return(0);

}

 

Miltidimensional Arrays

char tictactoe[3][3]; // declares two-dimensional array with 3 rows and 3 columns

tictactoe[0][2] = ‘x’; // assigns value ‘x’ to the element in the

   //    first row and third column of tictactoe