Lecture3 Array
Lecture3 Array
1
Array
Many applications require multiple data
items that have common characteristics
Inmathematics, we often express such
groups of data items in indexed form:
x1, x2, x3, …, xn
Array is a data structure which can
represent a collection of data items which
have the same data type (float/int/char/…)
2
Example: Printing Numbers in
Reverse
4 numbers
3 numbers
int a, b, c, d;
int a, b, c; scanf(“%d”, &a);
scanf(“%d”, &a); scanf(“%d”, &b);
scanf(“%d”, &b); scanf(“%d”, &c);
scanf(“%d”, &c); scanf(“%d”, &d);
printf(“%d ”, c); printf(“%d ”, d);
printf(“%d ”, b); printf(“%d ”, c);
printf(“%d \n”, a); printf(“%d ”, b);
printf(“%d \n”, a);
3
The Problem
Suppose we have 10 numbers to handle
Or 20
Or 100
Where do we store the numbers ? Use
100 variables ??
How to tackle this problem?
Solution:
Use arrays
4
Printing in Reverse Using Arrays
void main()
{
int n, A[100], i;
printf(“How many numbers to read? “);
scanf(“%d”, &n);
for (i = 0; i < n; ++i)
scanf(“%d”, &A[i]);
for (i = n -1; i >= 0; --i)
printf(“%d ”, A[i]);
printf(“\n”);
}
Using Arrays
All the data items constituting the group
share the same name
int x[10];
Individual elements are accessed by
specifying the index
X is a 10-element one
dimensional array
6
A first example
“data refers to a block of 10
void main()
integer variables, data[0], data[1],
{
…, data[9]
int i;
int data[10];
for (i=0; i<10; i++) data[i]= i;
i=0;
while (i<10)
{
printf("Data[%d] = %d\n", i, data[i]);
i++;
}
}
7
The result
Array size should be a constant
void main()
Output
{
int i; Data[0] = 0
int data[10]; Data[1] = 1
for (i=0; i<10; i++) data[i]= i; Data[2] = 2
i=0; Data[3] = 3
while (i<10)
Data[4] = 4
{
Data[5] = 5
printf("Data[%d] = %d\n", i, data[i]);
i++; Data[6] = 6
} Data[7] = 7
} Data[8] = 8
Data[9] = 9
8
Declaring Arrays
Like variables, the arrays used in a program must be
declared before they are used
General syntax:
type array-name [size];
type specifies the type of element that will be
contained in the array (int, float, char, etc.)
size is an integer constant which indicates the
maximum number of elements that can be stored
inside the array
int marks[5];
marks is an array that can store a maximum of 5
9
integers
Examples:
int x[10];
char line[80];
float points[150];
char name[35];
If we are not sure of the exact size of the array,
we can define an array of a large size
int marks[50];
though in a particular run we may only be using,
say, 10 elements
10
Accessing Array Elements
A particular element of the array can be
accessed by specifying two things:
Name of the array
Index (relative position) of the element in the
array
In C, the index of an array starts from zero
Example:
An array is defined as int x[10];
The first element of the array x can be
accessed as x[0], fourth element as x[3], tenth
element as x[9], etc.
11
Contd.
The array index must evaluate to an integer
between 0 and n-1 where n is the maximum
number of elements possible in the array
a[x+2] = 25;
b[3*x-y] = a[10-x] + 5;
Remember that each array element is a
variable in itself, and can be used anywhere a
variable can be used (in expressions,
assignments, conditions,…)
12
How is an array stored in
memory?
Starting from a given memory location, the
successive array elements are allocated space
in consecutive memory locations
Array a
14
Initialization of Arrays
General form:
type array_name[size] = { list of values };
Examples:
int marks[5] = {72, 83, 65, 80, 76};
char name[4] = {‘A’, ‘m’, ‘i’, ‘t’};
The size may be omitted. In such cases the
compiler automatically allocates enough space
for all initialized elements
int flag[ ] = {1, 1, 1, 0};
char name[ ] = {‘A’, ‘m’, ‘i’, ‘t’};
15
How to read the elements of an
array?
By reading them one element at a time
for (j=0; j<25; j++)
scanf (“%f”, &a[j]);
The ampersand (&) is necessary
The elements can be entered all in one line or in
different lines
16
A Warning
In C, while accessing array elements, array
bounds are not checked
Example:
int marks[5];
:
:
marks[8] = 75;
The above assignment would not necessarily
cause an error
Rather, it may result in unpredictable program
results 17
Reading into an array
void main()
{
const int MAX_SIZE = 100; Output
int i, size;
4
float marks[MAX_SIZE];
float total; 2.5
scanf("%d",&size); 3.5
for (i=0, total=0; i<size; i++)
4.5
{
scanf("%f",&marks[i]); 5
total = total + marks[i]; Total = 15.500000
} Avg = 3.875000
printf("Total = %f \n Avg = %f\n", total,
total/size);
18
}
How to print the elements of an
array?
By printing them one element at a time
for (j=0; j<25; j++)
printf (“\n %f”, a[j]);
The elements are printed one per line
printf (“\n”);
for (j=0; j<25; j++)
printf (“ %f”, a[j]);
The elements are printed all in one line
(starting with a new line) 19
How to copy the elements of one
array to another?
min = a[0];
for (i=1; i<10; i++)
{
if (a[i] < min)
min = a[i];
}
printf (“\n Minimum is %d”, min);
}
21
Alternate Version 1
const int size = 10;
void main()
{
int a[size], i, min;
void main()
{
int a[size], i, min;
24
Alternate Version 3
void main()
{
int a[100], i, min, n;
25
const int nsub = 6;
Example 2:
void main()
Computing {
int grade_pt[nsub], cred[nsub], i,
cgpa gp_sum=0, cred_sum=0;
double gpa;
8 14
9 11 14 17 19 20 23 27
low = 0, high = 7, mid = 3, A[3] = 17
low = 0, high = 2, mid = 1, A[1] = 11
low = 2, high = 2, mid = 2, A[2] = 14
14 is found
29
Example: Selection Sort
Sort the elements of an array A with n
elements in ascending order
Basic Idea:
Find the min of the n elements, swap it with
A[0] (so min is at A[0] now)
Now find the min of the remaining n-1
elements, swap it with A[1] (so 2nd min is at
A[1] now)
Continue until no more elements left
30
void main() {
int A[100], n, i, j, k, min, pos, temp;
scanf(“%d”, &n);
for (i=0; i<n; ++i) scanf(“%d”, &A[i]);
for (i = 0; i < n - 1; ++i) {
min = A[i]; pos = i;
for (j = i + 1; j < n; ++j) {
if (A[j] < min) {
min = A[j];
pos = j;
}
}
temp = A[i];
A[i] = A[pos];
A[pos] = temp;
for (k=0; k<n; ++k) printf(“%d ”, A[k]);
printf(“\n”);
}
31
}
Output
6
7 12 5 15 17 9
5 12 7 15 17 9
5 7 12 15 17 9 8
5 7 9 15 17 12 98765432
5 7 9 12 17 15 2 8 7 6 5 4 3 9
5 7 9 12 15 17 2 3 7 6 5 4 8 9
2 3 4 6 5 7 8 9
2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
32
Things you cannot do
You cannot
use = to assign one array variable to another
a = b; /* a and b are arrays */
use == to directly compare array variables
if (a = = b) ………..
directly scanf or printf arrays
printf (“……”, a);
33
Character Arrays and Strings
char C[8] = { 'a', 'b', 'h', 'i', 'j', 'i', 't', '\0' };
C[0] gets the value 'a', C[1] the value 'b', and so on.
The last (7th) location receives the null character ‘\0’
Null-terminated (last character is ‘\0’) character arrays
are also called strings
Strings can be initialized in an alternative way. The
last declaration is equivalent to:
char C[8] = "abhijit";
The trailing null character is missing here. C
automatically puts it at the end if you define it like this
Note also that for individual characters, C uses single
quotes, whereas for strings, it uses double quotes
34
Reading strings: %s format
void main()
{
char name[25];
scanf("%s", name);
printf("Name = %s \n", name);
}
35
An example
void main()
{
#define SIZE 25 Seen on screen
int i, count=0;
char name[SIZE]; Typed as input
scanf("%s", name); Satyanarayana
printf("Name = %s \n", name);
Name = Satyanarayana
for (i=0; name[i]!='\0'; i++)
if (name[i] == 'a') count++; Total a's = 6
printf("Total a's = %d\n", count);
}
Printed by program
Note that character strings read
in %s format end with ‘\0’
36
Palindrome Checking
void main()
{
const int SIZE = 25;
int i, flag, count=0;
char name[SIZE];
scanf("%s", name); /* Read Name */
for (i=0; name[i]!='\0'; i++); /* Find Length of String */
printf("Total length = %d\n",i);
count=i; flag = 0;
/* Loop below checks for palindrome by comparison*/
for(i=0; i<count; i++) if (name[i]!=name[count-i-1]) flag = 1;
if (flag ==0) printf ("%s is a Palindrome\n", name);
else printf("%s is NOT a Palindrome\n", name);
} 37
Some Exercises
1. Write a C program that reads an integer n and stores the
first n Fibonacci numbers in an array.
2. Write a C program that reads an integer n and uses an
array to efficiently find out the first n prime numbers.
3. Read in an integer n, read in n integers and print the integer
with the highest frequency.
4. Read in an integer n, read in n numbers and find out the
mean, median and mode.
5. Read in two names and compare them and print them in
lexicographic (dictionary) order.
6. Read in an integer n, read in n names and print the last
name when compared in lexicographic order.
38