Arrays: A Block of Many Variables of The Same Type Array Can Be Declared For Any Type Examples
Arrays: A Block of Many Variables of The Same Type Array Can Be Declared For Any Type Examples
int main(void)
{
int i, A[10];
#define NUM 10
int main(void)
{
int i;
int A[NUM];
if you like, the array size can be inferred from the number of
initializers
by leaving the square brackets empty
Sort.c
A[0] A[1] A[2]
4 8 2
i j tmp
#include <stdio.h>
---- ---- ----
#define SIZE 3
int main(void)
{
int A[SIZE] = {4,8,2};
int min_index;
int i,j,tmp;
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 ---- ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 ---- ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 1 ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 1 ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 2 ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 2 ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 3 ----
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
4 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 2
i j tmp
for(i=0; i<SIZE-1; i++) 0 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 0 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 2 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 2 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 4
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 8 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 8
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 4 4
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 8
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 4 8
i j tmp
for(i=0; i<SIZE-1; i++) 1 3 8
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
A[0] A[1] A[2]
2 4 8
i j tmp
for(i=0; i<SIZE-1; i++) 2 3 8
{
min_index=i;
for(j=i+1; j<SIZE; j++)
min_index=(A[min_index]>A[j] ? j : min_index);
tmp=A[i];
A[i]=A[min_index];
A[min_index]=tmp;
}
Exercise
Write a program that gets an input line from
the user (ends with ‘\n’) and displays the
number of times each letter appears in it.
Example:
For the input line - hello, world!
The output should be:
d -1
e–1
h–1
l–2
o–2
w-1
letter_count.c
Passing arrays to functions
Functions can accept arrays as
arguments
Usually the array’s size also needs to be
passed (why?)
For example -
int CalcSum(int arr[], int size);
Within the function, arr is accessed in
the usual way
Example – calc_sum.c
Passing arrays to functions
Arrays can be passed to functions and
have their values changed from within
the function!
Unlike regular variables
This is possible because an array
variable is actually an address.
Example – vec_mul.c
Exercise
Implement a function that accepts two
integer arrays and returns 1 if they are
equal, 0 otherwise
Write a program that accepts two
arrays of integers from the user and
checks for equality
(assume their size is 10)
Solution
compare_arrays.c
Two Dimensional Arrays
We sometimes want to keep an
inherent Two-Dimensional structure of
data
Example: We can define a two-
dimensional 3x3 matrix by
double A[3][3];
Two Dimensional Arrays
Array of arrays:
int A[2][3] = { {1, 2, 3},
{4, 5, 6} };
Means an array of 2 integer arrays,
each of length 3.
Access: j-th element of the i-th array is
A[i][j]
Two Dimensional Arrays
When passing a two-dimensional array to a
function, it is necessary to indicate the size
of the second dimension in the function
header
But this does not mean the array’s size needn’t
be passed as well
Same is true when initializing the array
mat_add.c
Exercise
Write a program that defines 3 matrices
A,B,C of size 3x3 with float elements;
initialize the first two matrices (A and B)
Compute the matrix multiplication of A and B
and store it in C (i.e. C = A*B)
Matrix Multiplication:
n 1
C i j A i k * B k j
k 0
mat_mul.c