chapter8 arrays

Upload: muhd-rzwan

Post on 14-Apr-2018

234 views

Category:

Documents


0 download

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