chapter8 arrays
TRANSCRIPT
-
7/29/2019 Chapter8 Arrays
1/28
Principles of Programming - NI2005 1
Chapter 8: Arrays
In this chapter, you will learn aboutIntroduction to Array
Array declaration
Array initialization
Assigning values to array elementsReading values from array elements
Relationship with pointers
Passing array to function
2 Dimensional arrays
Simple Searching
Simple Sorting
-
7/29/2019 Chapter8 Arrays
2/28
Principles of Programming - NI2005 2
Introduction to Array
In C, a group of items of the same type can beset up using Array
An array is a group of consecutive memorylocations related by the fact that they all have thesame name and the same type.
The compiler must reserve storage (space) foreach element/item of a declared array.
The size of an array is static (fixed) throughoutprogram execution.
To refer to a particular location or element in thearray, we specify the name of the array (index orsubscript) and the position number of theparticular element in the array.
-
7/29/2019 Chapter8 Arrays
3/28
Principles of Programming - NI2005 3
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
The position number within
the square brackets is formally
called a subscript. A subscript
can be an integer or an integer
expression. For example if
x = 1 and y = 2, then a[x+y]
is equal to a[3].
Notice that the position
starts from 0.
-
7/29/2019 Chapter8 Arrays
4/28
Principles of Programming - NI2005 4
Array Declaration
Array declaration is made by specifying thedata type, its name and the number ofspace (size) so that the computer mayreserve 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];
-
7/29/2019 Chapter8 Arrays
5/28
Principles of Programming - NI2005 5
Array Initialization
There are 2 ways to initialize an array: duringcompilation and during execution.
During compilation:int arr[ ] = {1, 2, 3, 4, 5}; unsized array
We can define how many elements that we want since
the array size is not given.int arr[3] = {90, 21, 22};We can define only 3 elements since the array size isalready given.
int arr[5] = {2,4}Initialize the first two elements to the value of 2 and 4respectively, while the other elements are initialized tozero.
int arr[5] = {0}Initialize all array elements to zero.
-
7/29/2019 Chapter8 Arrays
6/28
Principles of Programming - NI2005 6
Array Initialization cont
During execution:Using loop to initialize all elements to zero
int arr[3], index;
for (index = 0; index < 3; index++)
arr[index] = 0;Using loop and asking the user to specify the
value for each element.
int arr[3], index;
for (index = 0; index < 3; index++){
printf (arr[%d]:,index);
scanf(%d,&arr[index]);
}
-
7/29/2019 Chapter8 Arrays
7/28
Principles of Programming - NI2005 7
Assigning value to array element
We can assign a value to a specific array element byusing its index number.
Example: lets say we have an array that representthe number of inhabitant in 5 unit apartments.
int apartment[5]={3,2,6,4,5};
The above initialization indicates that there are 3people living in apartment 0, 2 people living inapartment 1 and so on.
Let say that we have a new born in apartment 3, sowe need to change the number of inhabitant living in
apartment three.apartment[3] = apartment[3] + 1;
Now, we have the following values in our array:
3,2,6,5,5
-
7/29/2019 Chapter8 Arrays
8/28
Principles of Programming - NI2005 8
Reading values from array elements
We can read a value from a specific array elementby referring to the index.
For example, lets say we want to know how manypeople leaving in apartment 3, we could simple dothis:
int apartment[5] = {3,2,6,4,5};int no_of_people;
no_of_people = apartment[3];
printf(Apartment 3 has %d people, no_of_people);
The above C code will produce the following output:Apartment 3 has 4 people.
Hint!!! Remember that array index starts at 0
-
7/29/2019 Chapter8 Arrays
9/28
Principles of Programming - NI2005 9
Example 1: finding total inhabitants#include
#define size 5
void main(void){
int apartment[size] = {3,2,6,4,5};int index, total = 0;
for (index = 0; index < size; index++){
total = total + apartment[index];}
printf("There are total of %d inhabitants",total);}
Output:There are total of 20 inhabitants
-
7/29/2019 Chapter8 Arrays
10/28
Principles of Programming - NI2005 10
Example 2: list down number of inhabitants in each apartment
#include
void main(void){
int apartment[5] = {3,2,6,4,5};int index, total = 0;
printf("%-7s %-15s\n","Apt No", "No of people");
for (index = 0; index < 5; index++){
printf("%4d %10d\n",index, apartment[index]);}
}
-
7/29/2019 Chapter8 Arrays
11/28
Principles of Programming - NI2005 11
Example 2 output
Apt No No of people0 3
1 2
2 6
3 44 5
-
7/29/2019 Chapter8 Arrays
12/28
Principles of Programming - NI2005 12
Relationship with pointers
The name of an array is actually a pointer tothe 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]);
Using indexint test[3] = {9, 10, 11}, k;int *ptr = test;for (k = 0; k < 3; k++, ptr++)
printf(%d\n, *ptr);
Using pointers
-
7/29/2019 Chapter8 Arrays
13/28
Principles of Programming - NI2005 13
Passing Array to a Function
When we pass an array to a function, we areactually passing the pointerto the first elementin the array to the function. Therefore, anychanges to the array inside the function will alsochange the actual array inside the calling
function.
When we want to pass an array to a function, weneed to know these 3 things.
How to write the function prototype?How to do function call?
How does the function header would look like?
-
7/29/2019 Chapter8 Arrays
14/28
Principles of Programming - NI2005 14
Passing Array to a FunctionAssume that we have the following array declaration.
flaot marks[10] = {0.0};
Say for example we want to write a function, called get_marks,which will read marks from the user and store the marks insidethe array.
Function prototype:/* data type with square bracket */
void get_marks(float [ ]);
void get_marks(float *); /*treating array as pointer */
Function call:get_marks(marks); /* just pass the array name */
Function header:
void get_marks(float marks[ ])
void get_marks(float *marks) /*treating array as pointers */
-
7/29/2019 Chapter8 Arrays
15/28
Principles of Programming - NI2005 15
Example 1: parameter received as an array
#include #define size 10
void get_marks(float [ ]);
float calc_average(float [ ]);
void main(void){
float marks[size] = {0.0}; /*initializing the array
get_marks(marks); /* function call */
printf(Average for marks given is %f, calc_average(marks));
}
-
7/29/2019 Chapter8 Arrays
16/28
Principles of Programming - NI2005 16
Example 1: parameter received as an array
void get_marks(float marks[ ])
{int i;
for (i = 0; i < size; i++){
printf("Marks student %d:",i + 1);
scanf("%f",&marks[i]);}
} float calc_average(float marks[ ]){
float total = 0.0;int i;
for (i = 0; i < size; i++){
total = total + marks[i];}return (total / size);
}
-
7/29/2019 Chapter8 Arrays
17/28
Principles of Programming - NI2005 17
Example 2: parameter received as pointers
A function could also receive/treat array parameter as pointer.
#include
#define size 10
void get_marks(float *);
float calc_average(float *);
void main(void)
{
float marks[size] = {0.0};
get_marks(marks);
printf("Average for marks given is %f\n", calc_average(marks));
}
Observe the
function prototypes
-
7/29/2019 Chapter8 Arrays
18/28
Principles of Programming - NI2005 18
Example 2: parameter received as pointers
void get_marks(float *marks)
{int i;
for (i = 0; i < size; i++, marks++){
printf("Marks student %d: ", i + 1);scanf("%f", marks);
}} float calculate_average(float *marks)
{float total = 0.0;int i;
for (i = 0; i < size; i++, marks++){total = total + *marks;
}
return (total / size);
}
Manipulating the memory address
Pointer variable
-
7/29/2019 Chapter8 Arrays
19/28
Principles of Programming - NI2005 19
2-Dimensional Array
It is possible to create an array which hasmore 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.Four
rows
Col 1 Col2
-
7/29/2019 Chapter8 Arrays
20/28
Principles of Programming - NI2005 20
2-Dimensional Array contVariable 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 rowsand columns division more clearly.
To initialize a 2D array during execution, we need to use anested for loop:
for (row = 0; row < 4; row++)
{
for (column = 0; column < 2; column++)
myarray[row][column] = 0;}
Although it is possible to create a multi-dimensional array,arrays above 2-dimensions are rarely used.
-
7/29/2019 Chapter8 Arrays
21/28
Principles of Programming - NI2005 21
Passing a 2D array to a function
When a 2D (or higher dimensional) array ispassed to a function, the size of the second (orsubsequent) subscript needs to be specified.
For example, if we have:
int twoD[4][5];
Then the function header which would taketwoD as an
argument should be declared like this:
void Process2D(int twoD[ ][5])
An array is stored consecutively in memory
regardless of the number of dimensions.Therefore, specifying the subscripts in thefunction parameter will help the compiler to knowthe boundary of the different dimensions.
-
7/29/2019 Chapter8 Arrays
22/28
Principles of Programming - NI2005 22
Simple Searching
Searching is the process of determiningwhether an array contains a value thatmatches a certain key value/search key.
The process of finding a particular element ofan array is called searching.
Same as in sort, there are more than onealgorithms that can be used to do a search.
The most commonly used searchingtechniques are linear search and binary
search.Here, we will discuss to do searching byusing linear search on an array.
-
7/29/2019 Chapter8 Arrays
23/28
Principles of Programming - NI2005 23
Simple Searching cont
Search keyis a data element of the sametype as the list elements.
If search key = list element value, the search
is said to be successful
Otherwise, it is unsuccessful.Linear search is a simple searching algorithmwhere:
data are stored in an array
a search key is compared with each elements
in the array starting from the first element
-
7/29/2019 Chapter8 Arrays
24/28
Principles of Programming - NI2005 24
Example
void main(void){
int list[ ] = {34, 53, 21, 23, 4};int i, search_key, found = 0;
printf(Enter the number that you want to find: );scanf(%d, &search_key);
for (i = 0; i < 5; i++){
if (list[i] = = search_key){
found = 1;
printf(The number %d is found at index %d\n, search_key, i);}}if (found = = 0)
printf(The number %d cannot be found in the list\n,search_key);}
Sample Output:
Enter the number that you want to find: 53
The number 53 is found at index 1Press any key to continue
-
7/29/2019 Chapter8 Arrays
25/28
Principles of Programming - NI2005 25
Sorting
Sorting is the process of placing data into aparticular order such as ascending ordescending.
The following example shows the C code forsorting unsorted list to a list sorted in
ascending order.Explanation for the working program and theconcept behind it will be done during lecturehour (so please attend the class!!!!).
-
7/29/2019 Chapter8 Arrays
26/28
Principles of Programming - NI2005 26
Example using Simple Sort#include
#define size 10void sort(int [ ]);
void main(void){
int index, list[size] = {0};
for (index = 0; index < size; index++) /*array initialisation by user */{printf("list[%d]:",index);scanf("%d",&list[index]);
}
sort(list); /* calling function to sort the array
printf("\nList sorted in ascending order:\n\n");
for (index = 0; index < size; index++){
printf("%d\t",list[index]); /* printing the array element */}
}
-
7/29/2019 Chapter8 Arrays
27/28
Principles of Programming - NI2005 27
Sorting example contvoid sort(int list[ ])
{int pivot, checker, temp;
for (pivot = 0; pivot < (size - 1); pivot++){
for (checker = (pivot + 1); checker < size; checker++){
if (list[checker] < list[pivot]){
/* swap the elements */temp = list[pivot] ;list[pivot] = list[checker];list[checker] = temp;
}}
}}
-
7/29/2019 Chapter8 Arrays
28/28
Principles of Programming - NI2005 28
Summary
In this chapter, we have looked at:Array declaration and initialization
Reading and writing from/to array elements
Passing array to function
2 dimensional array
Simple search
Array sorting