chapter 8: arrays introduction to arrays declaring arrays initializing arrays examples using arrays...

22
Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function Simple sorting: bubble sort Simple searching: linear sort 2-dimensional array

Upload: terence-dorsey

Post on 04-Jan-2016

308 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Chapter 8: Arrays

• Introduction to arrays• Declaring arrays• Initializing arrays• Examples using arrays• Relationship with pointers• Array passing to a function• Simple sorting: bubble sort• Simple searching: linear sort• 2-dimensional array

Page 2: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Introduction to Arrays

• An array is a group of memory locations related by the fact that they all have the same name and the same type.

• To refer to a particular location or element in the array, we specify the name of the array and the position number of the particular element in the array.

• The size of an array is static (fixed) throughout program execution.

Page 3: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Let say we have an array called a.

-10

99

-8

100

27

10

1976

-2020

1

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

Name of the array

Position number of theelement within the array

The position number withinthe square brackets is formallycalled a subscript. A subscriptcan be an integer or an integerexpression. For example if x = 1 and y = 2, then a[x+y]is equal to a[3].

Notice that the positionstarts from 0.

Page 4: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Declaring Arrays

• Array declaration is made by specifying the data type and the number of space so that the computer may reserve the appropriate amount of memory.

• General syntax:

data_type array_name[size]

• Examples: – int my_array[100];

– char name[20];

– double bigval[5*200];

– int a[27], b[10], c[76];

Page 5: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Initializing Arrays• There are 2 ways to initialize an array: during

compilation and during execution.• During compilation:

– arr[] = {1, 2, 3, 4, 5};• We can define however many elements that we want since the

array size is not given.

– arr[3] = {90, 21, 22};• We can define only 3 elements since the array size is already

given.

• During execution:

int arr[3], j;

for (j = 0; j < 3; j++)

arr[j] = 0;

Page 6: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Examples Using Arrays

#include <stdio.h>#define SIZE 5

void main(void) { int temp[SIZE], i; for (i = 0; i < SIZE; i++) temp[i] = i*9; printf(“%s %13s\n”, “Element”, “Value”); for (i = 0; i < SIZE; i++) printf(“%7d%13d\n”, i, temp[i]);}

Output:

Element Value0 01 92 183 274 36

In the example above, an array with the name temp and size 5 has been declared. The elements in the array has been given the value position*9. The first for loop is equivalent to this:temp[0] = 0*9, temp[1] = 1*9, temp[2] = 2*9, temp[3] = 3*9, temp[4] = 4*9

Page 7: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

#include <stdio.h>#define SIZE 10

void main(void) { int i = 0, list[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, total = 0;

for (; i < SIZE; i++) { total += list[i]; } printf(“Total of array element values is %d\n”, total);}

Output: Total of array element values is 45

Page 8: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Relationship with Pointers

• The name of an array is actually a pointer to the first element in the array.

• Therefore, if we have:int test[3] = {9, 10, 11};

printf(“%d”, *test);

The output would be: 9• There are a few ways to traverse an array:

int test[3] = {9, 10, 11}, k;for (k = 0; k < 3; k++) printf(“%d\n”, test[k]);

int test[3] = {9, 10, 11}, k;int *ptr = test;for (k = 0; k < 3; k++, ptr++) printf(“%d\n”, *ptr);

Page 9: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Array Passing to a Function

• A function that is going to receive an array as one of the arguments can be declared in 2 ways:

void Process(char name[]) OR

void Process(char *name)

• When we pass an array to a function, we are actually passing the pointer to the first element in the array to the function. Therefore, any changes to the array inside the function will also change the actual array.

• Either the array is passed using [] or using *, the array can be accessed in the same way.

Page 10: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

#include <stdio.h>#define SIZE 10

void Read(int []);int CountAvg(int *);

void main(void) { int grades[SIZE]; Read(grades); printf(“The average of the grades given is %d\n”, CountAvg(grades));}

void Read(int grades[]) { int i, temp; for (i = 0; i < SIZE; i++) { printf(“Enter grade %d\n”, i); scanf(“%d”, temp) grades[i] = temp; }}

int CountAvg(int *grades) { int i, total; for (i = 0, total = 0; i < SIZE; i++) total += grades[i]; return (total/SIZE);}

Page 11: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

The Read() and CountAvg() functions can also be written this way:

void Read(int grades[]) { int i, temp; int *ptr = grades; for (i = 0; i < SIZE; i++, ptr++) { printf(“Enter grade %d\n”, i); scanf(“%d”, temp) *ptr = temp; }}

int CountAvg(int *grades) { int i, total; int *ptr = grades; for (i = 0, total = 0; i < SIZE; i++, ptr++) total += *ptr; return (total/SIZE);}

Page 12: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Simple Sorting

• Sorting is the process of placing data into a particular order such as ascending or descending.

• There are many sorting algorithms that are usually used. Among them are bubble sort, selection sort, insertion sort and shell sort.

• Here, we will discuss how bubble sort can be used to sort the elements in an array.

Page 13: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Bubble Sort

We are given a list of 5 numbers: int list[] = {34, 53, 21, 23, 4};Sort the numbers in an ascending order using bubble sort.

Pass 1:

34 53 21 23 4

34 53 21 23 4

Do not swap

Swap

Page 14: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

34 21 53 23 4

34 21 23 53 4

34 21 23 4 53

Pass 2:

Swap

Swap

Swap

Page 15: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

34 21 23 4 53

34 21 23 4 53

Pass 3:

34 21 4 23 53

Do not swap

Swap

Swap

Page 16: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

34 21 4 23 53

Pass 4:

34 4 21 23 53

Final result:

4 34 21 23 53

Swap

Swap

Page 17: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Let us look at the C code:

void main(void) { int list[] = {34, 53, 21, 23, 4}; BubbleSort(list);}

void BubbleSort (int list[]) { int i, j, temp, swapped = 1; for (i = 0; i < 5 && swapped == 1; i++) { swapped = 0; for (j = 0; j < (5-i); j++) { if (list[j] > list[j+1]) { // Swap temp = list[a]; list[a] = list[a+1]; list[a+1] = temp; swapped = 1; } } }}

Page 18: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

Simple Searching• Searching is the process of determining whether

an array contains a value that matches a certain key value.

• Same as in sort, there are more than one algorithms that can be used to do a search.

• Here, we will discuss how can we do a linear search on an array.

• Linear search is a simple searching algorithm where:– data are stored in an array

– a key value is compared with each elements in the array starting from the first element

Page 19: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

void main(void) { int list[] = {34, 53, 21, 23, 4}; int i, key_value, found = 0; printf(“Enter the number that you want to find: ”); scanf(“%d”, &key_value); for (i = 0; i < 5; i++) { if (list[i] == key_value) { found = 1; printf(“The number %d is found at location %d\n”, key_value, i); break; } }

if (found == 0) printf(“The number %d cannot be found in the list\n”, key_value);}

Page 20: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

2-Dimensional Array

• It is possible to create an array which has more than one dimension.

• For example:– 2D array: int array[4][2];

– 3D array: int array[4][2][10];

• Graphical representation of a 2D array:int myarray[4][2] = {1, 2, 3, 4, 5, 6, 7, 8};

1 2

3 4

5 6

7 8

This array has 4 rows and 2 columns.

Page 21: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

• Variable initialization can also be done this way:– int myarray[4][2] = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};

This method is less confusing since we can see the rows and columns division more clearly.

• To initialize a 2D array during execution, we need to use a double loop:

for (i = 0; i < 4; i++) {

for (j = 0; j < 2; j++)

myarray[i][j] = 0;

}

• Although it is possible to create a multi-dimensional array, arrays above 2-dimensions are rarely used.

Page 22: Chapter 8: Arrays Introduction to arrays Declaring arrays Initializing arrays Examples using arrays Relationship with pointers Array passing to a function

• When a 2D (or higher dimensional) array is passed to a function, the size of the second (or subsequent) subscript needs to be specified.

• For example, if we have:

int twoD[4][5];

Then a function which would take twoD as an argument should be declared like this:

void Process2D(int td[][5])

• An array is stored consecutively in memory regardless of the number of dimensions. Therefore, specifying the subscripts in the function parameter will help the compiler to know the boundary of the different dimensions.