Two - Dimensional Arrays
There could be situations where a table of values will have to be stored. 
 Consider a student table with marks in 3 subjects.
Student Mathematics Physics Chemistry
Student # 1 89 77 84
Student # 2 98 89 80
Student # 3 75 70 80
Student # 4 60 75 80
Student # 5 84 80 75

The above table contains a total of 15 values.

We can think this table as a matrix consisting of 5 rows & 3 columns.

Each row represents marks of student # 1 in all (different) subjects.

Each column represents the subject wise marks of all students.

In mathematics we represent a particular value in a matrix by using two subscripts such as Vij. Here V denotes the entire matrix Vij refers to the value in “ i ”th row and “ j ”th column.

Example :

In the above table V23 refers to the value “80”.

C allows us to define such tables of items by using two-dimensional arrays.

Definition :

A list of items can be given one variable name using two subscripts and such a variable is called a two – subscripted variable or a two – dimensional array.

Two – Dimensional arrays can be declared as.

  Syntax :
<datatype> <variable-name>[row-size][column-size];

The above table can be defined in “C” as

The above table can be defined in “C” as

Representation of a two Dimensional array in memory :

Free Time Learning

Initializing Two- Dimensional Arrays :

Like the one-dimensional arrays, two-dimensional arrays may be initialized by following their declaration with a list of initial values enclosed in braces.

int table[2] [3] = {0,0,0,1,1,1};

This initializes the elements of first row to zero and the second row to one.

This initialization is done row by row.

The above statement can be equivalently written as

int table[2][3] ={{0,0,0},{1,1,1}};

we can also initialize a two-dimensional array in the form of a matrix as shown.

int table[2][3] = {
{0,0,0},
{1,1,1}
};

Commas are required after each brace that closes of a row, except in case of last row.

If the values are missing in an initialize, they are automatically set to zero.

Ex: int table [2] [3] = {
    {1,1},   1 1 0
    {2}   2 0 0
};

Program : Write a program to display the elements of a two dimensional array.
 # include<stdio.h> 
 # include<conio.h> 
 main( ) { 
         int  i,j; 
         int  a[3][3] = { { 1,2,3}, {4,5,6}, {7,8,9}}; 
         printf(“elements of an array \n \n”); 
         for( i=0; i<3; i++)  { 
              for ( j=0; j<3; j++){ 
                       printf (“%d\t”, a[ i ][ j ]); 
              }  printf(“\n”); 
           } 
getch(); 
 }
Output :

Elements of an Array
1   2   3
4   5   6
7   8   9

Program : To perform addition and subtraction of two matrices.
# include<stdio.h>
  # include<conio.h>
  main( ) 
   { 
  int i,j,r1,c1, a[10][10], b[10][10]; 
  clrscr( ); 
  printf(“Enter Order of Matrix A & B up to 10 x 10:”);
  scanf(“%d  %d”, &r1, &c1); 
  printf(“Enter Elements of Matrix of A: \n”); 
  for( i=0; i<r1; i++) 
  { 
       for( j=0; j<c1; j++) 
       scanf(“ %d ”, &a[ i ][ j ]); 
  } 
  printf(“Enter Elements of Matrix of B: \ n”); 
  for( i=0; i<r1; i++) 
    { 
      for( j=0; j<c1; j++) 
     scanf(“ %d ”, &b[ i ][ j ]); 
    } 
  printf(“\n Matrix Addition \n”); 
  for( i=0; i<r1; i++) 
    { 
      for( j=0; j<c1; j++) 
       printf(“%d\t”, a[ i ][ j ] + b[ i ][ j ]); 
       printf (“ \n”);
    } 
  printf(“n Matrix Subtraction \n”); 
  for( i=0; i<r1; i++) 
    { 
      for( j=0; j<c1; j++) 
      printf(“%d\t”, a[ i ][ j ] – b[ i ][ j ]); 
      printf(“\n”); 
    } 
  getch( ); 
    }
Output :

Enter order of Matrix A & B up to 10 x 10: 3   3
Enter Elements of Matrix of A :
4   5   8   2   9   8   2   9   4
Enter Elements of Matrix of B :
1   3   5   0   5   4   6   7   2
Matrix Addition

5   8   13
2   14   12
8   16   6
Matrix Subtraction

3   2   3
2   4   4
-4   2   2