2-d Arrays
2-d Arrays
1
Two Dimensional Arrays
We have seen that an array variable can store
a list of values
Many applications require us to store a table
of values
3
Declaring 2-D Arrays
General form:
type array_name [row_size][column_size];
Examples:
int marks[4][5];
float sales[12][25];
double matrix[100][100];
4
Initializing 2-d arrays
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {{1,2,3}, {4,5,6}};
int a[][3] = {{1,2,3}, {4,5,6}};
1 2 3
4 5 6
5
Accessing Elements of a 2-d
Array
Similar to that for 1-d array, but use two indices
First indicates row, second indicates column
Both the indices should be expressions which
evaluate to integer values (within range of the
sizes mentioned in the array declaration)
Examples:
x[m][n] = 0;
c[i][k] += a[i][j] * b[j][k];
a = sqrt (a[j*3][k]);
6
Example
int a[3][5];
7
How is a 2-d array is stored in
memory?
Starting from a given memory location, the elements
are stored row-wise in consecutive memory locations
(row-major order)
x: starting address of the array in memory
c: number of columns
k: number of bytes allocated per array element
a[i][j] is allocated memory location at
address x + (i * c + j) * k
a[0]0] a[0][1] a[0]2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
8
Array Addresses Output
3221224480
int main() 3221224484
{ 3221224488
int a[3][5]; 3221224492
3221224496
int i,j;
3221224500
for (i=0; i<3;i++) 3221224504
3221224508
{ 3221224512
for (j=0; j<5; j++) printf("%u\n", &a[i][j]); 3221224516
printf("\n");
3221224520
} 3221224524
return 0; 3221224528
} 3221224532
3221224536
9
How to read the elements of a
2-d array?
By reading them one element at a time
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++)
scanf (“%f”, &a[i][j]);
The ampersand (&) is necessary
The elements can be entered all in one
line or in different lines
10
How to print the elements of a
2-d array?
By printing them one element at a time
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++)
printf (“\n %f”, a[i][j]);
The elements are printed one per line
12
Example: Matrix Addition
int main()
{ for (p=0; p<m; p++)
int a[100][100], b[100][100], for (q=0; q<n; q++)
c[100][100], p, q, m, n; c[p][q] = a[p][q] + b[p][q];
void AddMatrix( int A[][100], int B[][100], int C[][100], int x, int y)
{
int i , j;
for (i=0; i<x; i++)
for (j=0; j<y; j++)
C[i][j] = A[i][j] + B[i][j];
} 16
int main()
{
void PrintMatrix(int A[][100], int x, int y) int a[100][100], b[100][100],
{ c[100][100], p, q, m, n;
int i, j;
printf(“\n”); scanf (“%d%d”, &m, &n);
for (i=0; i<x; i++)
{ ReadMatrix(a, m, n);
for (j=0; j<y; j++) ReadMatrix(b, m, n);
printf (“ %5d”, A[i][j]);
printf(“\n”); AddMatrix(a, b, c, m, n);
}
} PrintMatrix(c, m, n);
return 0;
}
17
Practice Problems
1. Write a function that takes a n x n square matrix A as parameter (n
< 100) and returns 1 if A is an upper-triangular matrix, 0 otherwise.
2. Repeat 1 to check for lower-triangular matrix, diagonal matrix,
identity matrix
3. Write a function that takes as parameter an m x n matrix A (m, n <
100) and returns the transpose of A (modifies in A only).
4. Consider a n x n matrix containing only 0 or 1. Write a function that
takes such a matrix and returns 1 if the number of 1’s in each row
are the same and the number of 1’s in each column are the same; it
returns 0 otherwise
5. Write a function that reads in an m x n matrix A and an n x p matrix
B, and returns the product of A and B in another matrix C. Pass
appropriate parameters.
For each of the above, also write a main function that reads the
matrices, calls the function, and prints the results (a message, the
transposed matrix etc.)
18