+ All Categories
Home > Documents > Chapter9 Structure

Chapter9 Structure

Date post: 14-Apr-2018
Category:
Upload: muhd-rzwan
View: 250 times
Download: 0 times
Share this document with a friend

of 37

Transcript
  • 7/29/2019 Chapter9 Structure

    1/37

    User Defined Data Types - updated NI@2006 1

    Chapter 10: User Defined Data Types

    Objectives: In this chapter you will learn about,Introduction

    Declaring Structure Type & StructureVariables

    Referring and initializing structure elements

    Passing structures to a function

    Using typedef

    Example using structureEnumeration constants

  • 7/29/2019 Chapter9 Structure

    2/37

    User Defined Data Types - updated NI@2006 2

    Introduction

    So far we have only used data types which have

    been defined by C such as int, double and char.It is also possible to create our own data types.

    A user defined data type is called a structure.

    A structure can contain both built-in data typesand another structure.

    The concept of structure is pretty much thesame as arrays except that in an array, all the

    data is of the same types but in a structure, thedata can be of different types.

  • 7/29/2019 Chapter9 Structure

    3/37

    User Defined Data Types - updated NI@2006 3

    Definition

    A structure is a derived data type that

    represents a collection of a related dataitems called components (or members)that are not necessarily of the same data

    type.

  • 7/29/2019 Chapter9 Structure

    4/37

    User Defined Data Types - updated NI@2006 4

    General syntax:

    struct structure_name {data_type element1;

    data_type element2;

    . . .

    };Example:

    struct student {

    char name[20];

    int studentID;char major[50];

    };

    Declaring Structure TypeAlso called as structure tag

    Components / members

  • 7/29/2019 Chapter9 Structure

    5/37

    User Defined Data Types - updated NI@2006 5

    Declaring Structure VariablesAfter declaring a structure type, we may

    declare variables that are of that type. Astructure variable declaration requires:

    The keyword struct

    The structure type name

    A list of members (variable names) separated bycommas

    A concluding semicolon

    Then, assume that variable of structure typestudent is my_student. So the declarationshould be written as;

    struct student my_student;

  • 7/29/2019 Chapter9 Structure

    6/37

    User Defined Data Types - updated NI@2006 6

    Based on example: struct student

    By including this declaration in our program,

    we are informing the compiler about a newdata type which is a user defined data type.

    The declaration just makes the compileraware the existent of new data type but does

    not take an action yet.

    Based on the declaration of

    struct student my_student;

    causes the compiler to reserve memoryspace for variable my_student and thecomponents of its structure.

  • 7/29/2019 Chapter9 Structure

    7/37User Defined Data Types - updated NI@2006 7

    Structure variable Components Values

    name

    major

    studentID

    Simon

    0078

    CS

    my_student

    Conceptual memory structure variable my_student of type

    student(assuming that the components of variable

    my_student have already been assigned values)

  • 7/29/2019 Chapter9 Structure

    8/37User Defined Data Types - updated NI@2006 8

    It is possible to combine the

    declarations of a structure type and astructure variable by including the nameof the variable at the end of the

    structure type declaration.struct student {

    char name[20];

    int studentID;

    char major[50];};

    struct student my_student;

    struct student {

    char name[20];

    int studentID;

    char major[50];} my_student;

    =

  • 7/29/2019 Chapter9 Structure

    9/37User Defined Data Types - updated NI@2006 9

    Declaring Nested StructureMembers of a structure declaration can

    be of any type, including anotherstructure variable.

    Suppose we have the followingstructure declaration, which is a

    member of struct type student:struct address {

    int no;

    char street[20];

    int zipcode;

    };

  • 7/29/2019 Chapter9 Structure

    10/37User Defined Data Types - updated NI@2006 10

    We can rewrite the structure student

    declaration as follow:

    This structure type student can be

    written as;

    struct student {

    char name[20];

    int studentID;

    char major[50];struct address addr;

    } ;

  • 7/29/2019 Chapter9 Structure

    11/37User Defined Data Types - updated NI@2006 11

    struct student {

    char name[20];

    int studentID;

    char major[50];

    struct address{

    int no;

    char street[20];int zipcode;

    };

    } ;

  • 7/29/2019 Chapter9 Structure

    12/37User Defined Data Types - updated NI@2006 12

    Referring and Initializing Structure Elements

    A structure contains many elements. Each elements of astructure can be referred to / accessed by using thecomponent selection operator. (dot).

    Let us use the structure student which we have seen before asan example:

    Therefore to refer to the element of a structure, we may writeas follow;

    my_student.name;my_student.studentID;my_student.major;

    struct student {

    char name[20];

    int studentID;

    char major[50];

    };

    struct student my_student;

  • 7/29/2019 Chapter9 Structure

    13/37User Defined Data Types - updated NI@2006 13

    Therefore, we can initialize each elements of

    a structure individually such as:struct student my_student;my_student.studentID = 10179;

    Or we can initialize the structure while we are

    creating an instance of the structure:struct student my_student = {Ahmad, 10179, IT}

    Notice that it is possible to use the =operator on a struct variable. When the =sign is used, each elements of the structureat the right hand side is copied into thestructure at the left hand side.

  • 7/29/2019 Chapter9 Structure

    14/37User Defined Data Types - updated NI@2006 14

    Examplestruct birthdate {

    int month;

    int day;

    int year;

    };

    struct birthdate Picasso = {10, 25, 1881};printf(Picasso was born : %d/%d/%d\n, Picasso.day,

    Picasso.month, Picasso.year);

    Output :Picasso was born : 25/10/1881

  • 7/29/2019 Chapter9 Structure

    15/37User Defined Data Types - updated NI@2006 15

    Passing Structures to a Function

    Call by Value:

    We can pass the student structure that we havecreated before to a function called display( ) asfollows:

    void display (struct student); /* function prototype */

    display (student1); /* function call */

    void display (struct student s1); /* function header */where student1 is a variable of type struct student.

    In the above function, a copy of the student structure

    will be created locally for the use of the function.Anychanges to the structure inside the function will notaffect the actual structure.

  • 7/29/2019 Chapter9 Structure

    16/37User Defined Data Types - updated NI@2006 16

    Example Using Structure: Call by value

    #include #include

    struct student{char name[20];int id;

    };

    void display(struct student); /* function prototype */

    void main(void)

    {struct student student1;

    strcpy(student1.name, "Ahmad"); /*initialising variable */student1.id = 12345; /*initialising variable */

    display(student1);}

    void display(struct student s1) /* make a local copy of the structure */{

    printf("Name: %s\n", s1.name);printf("ID: %d\n", s1.id);

    }

  • 7/29/2019 Chapter9 Structure

    17/37User Defined Data Types - updated NI@2006 17

    Example Using Structure: A Function that return a structure

    #include #include

    struct student{

    char name[20];int id;

    };

    struct student read(void); /* function prototype */

    void main(void){

    struct student student1;

    student1 = read(); /*function call */printf("Name: %s", student1.name);printf("\nID: %d\n", student1.id);

    }

    struct student read(void){

    struct student s1;

    printf("Enter name:");scanf("%s",s1.name); /* alternative: gets(s1.name); */printf("Enter ID:");scanf("%d",&s1.id);

    return s1;}

  • 7/29/2019 Chapter9 Structure

    18/37

    User Defined Data Types - updated NI@2006 18

    Call by reference

    It is also possible to use pointers and pass the referenceof the structure to the function. This way, any changesinside the function will change the actual structure aswell.

    To pass a structure variable as a reference, the Read( )function can be written this way:

    void Read(struct student *); /* function prototype */Read(&student1); /* function call */void Read(struct student *s1); /* function header */

    where student1 is a variable of type struct student.

  • 7/29/2019 Chapter9 Structure

    19/37

    User Defined Data Types - updated NI@2006 19

    Take note that when a structure is declared as a

    pointer, the elements in the structure cannot bereferred to using the . operator anymore. Instead,they need to be accessed using the -> operator(indirect component selection operator).

    For example:void Read(struct student *s1)

    {s1->studentID = 10179;scanf(%s, s1->name);

    }

  • 7/29/2019 Chapter9 Structure

    20/37

    User Defined Data Types - updated NI@2006 20

    Example Using Structure: Call by reference

    #include #include

    struct student{

    char name[20];int id;

    };

    void Read (struct student *); /* function prototype*/

    void main(void){

    struct student student1;

    Read(&student1); /* function call: passing reference */

    printf("Name: %s", student1.name);printf("\nID: %d\n", student1.id);

    }

    void Read (struct student *s1) /* function header, receive structure as a pointer variable */{

    printf("Enter name:");scanf("%s",s1->name); /* you can also use: gets(s1->name) */printf("Enter ID:");scanf("%d",&s1->id);

    }

  • 7/29/2019 Chapter9 Structure

    21/37

    User Defined Data Types - updated NI@2006 21

    Using typedefin Structure Declarations

    The keyword typedefprovides a

    mechanism for creating synonyms(aliases) for previously defined datatypes.

    Here is an example on how to usetypedef when declaring a structure:

    struct student {

    char name[20];

    int studentID;

    char major[50];

    struct address addr;

    } ;

  • 7/29/2019 Chapter9 Structure

    22/37

    User Defined Data Types - updated NI@2006 22

    By using typedef:

    typedef struct student StudentData;

    we are now aliasing the structure with aname to be used throughout the program. Soinstead of writing the word struct beforedeclaring a struct variable like the following

    struct student my_student;

    we can now write:

    StudentData my_student;

    We could use the alias name when passingthe structure to a function:

    void display(StudentData s1);

  • 7/29/2019 Chapter9 Structure

    23/37

    User Defined Data Types - updated NI@2006 23

    #include #include

    struct student{

    char name[20];int id;

    };

    typedef struct student StudentData;

    void display(StudentData); /* function prototype */

    void main(void)

    {StudentData student1;

    strcpy(student1.name, "Ahmad");student1.id = 12345;

    display(student1);}

    void display(StudentData s1){

    printf("Name: %s\n", s1.name);printf("ID: %d\n", s1.id);

    }

    Example : using typedef

    l f

  • 7/29/2019 Chapter9 Structure

    24/37

    User Defined Data Types - updated NI@2006 24

    Example: Array of structure

    #include #define NUM_STUDENTS 10

    struct student {int studentID;char name[20];int score;char grade;

    };typedef struct student StudentData;void Read (StudentData student[]);void CountGrade (StudentData student[]);

    void main ( ){

    StudentData student[NUM_STUDENTS];Read(student);CountGrade(student);

    }

  • 7/29/2019 Chapter9 Structure

    25/37

    User Defined Data Types - updated NI@2006 25

    void Read (StudentData student[]){

    int i;for (i = 0; i < NUM_STUDENTS; i++) {

    printf("Enter the studentID: ");scanf("%d", &student[i].studentID);printf("Enter the name: ");

    scanf("%s", student[i].name);printf("Enter the score: ");scanf("%d", &student[i].score);printf("\n");

    }}

  • 7/29/2019 Chapter9 Structure

    26/37

    User Defined Data Types - updated NI@2006 26

    void CountGrade (StudentData student[])

    {

    int i;

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

    if (student[i].score > 90)

    student[i].grade = 'A';

    else if (student[i].score > 80)

    student[i].grade = 'B';

    else if (student[i].score > 65)student[i].grade = 'C';

    else if (student[i].score > 50)

    student[i].grade = 'D';

    else

    student[i].grade = 'F';printf("The grade for %s is %c\n", student[i].name, student[i].grade);

    printf("\n");

    }

    }

  • 7/29/2019 Chapter9 Structure

    27/37

    User Defined Data Types - updated NI@2006 27

    /* Sample Output

    Enter the studentID: 789654

    Enter the name: Salman

    Enter the score: 96

    Enter the studentID: 741258

    Enter the name: Jack

    Enter the score: 79

    ::

    :

    The grade for Salman is A

    The grade for Jack is C:

    :

    Press any key to continue

    */

    E ample

  • 7/29/2019 Chapter9 Structure

    28/37

    User Defined Data Types - updated NI@2006 28

    Example#include

    struct car{

    char maker[20];char model[20];

    int year;

    };

    void input(struct car*);void output(char*, char*, int*);

    void main()

    {

    struct car firstcar;

    input (&firstcar);output(firstcar.maker, firstcar.model, &firstcar.year);

    printf("End of my act!\n");}

  • 7/29/2019 Chapter9 Structure

    29/37

    User Defined Data Types - updated NI@2006 29

    void input(struct car *sp)

    {

    printf("What is the maker of your car? ");gets(sp->maker);

    printf("What is the model of your car? ");

    gets(sp->model);

    printf("What year is your car? ");

    scanf("%d", &sp->year);

    }

    void output(char *sp1, char*sp2, int*sp3)

    {

    printf("Your car is : %s, %s, %d\n", sp1, sp2, *sp3);

    printf("Nice car\n");}

  • 7/29/2019 Chapter9 Structure

    30/37

    User Defined Data Types - updated NI@2006 30

    /* Sample output

    What is the maker of your car? HondaWhat is the model of your car? Stream

    What year is your car? 2003

    Your car is : Honda, Stream, 2003

    Nice carEnd of my act!

    Press any key to continue

    */

    E ti C t t

  • 7/29/2019 Chapter9 Structure

    31/37

    User Defined Data Types - updated NI@2006 31

    Enumeration Constants

    An enumeration, introduced by the keywordenum, is a set of integer constants representedby identifiers. (to specify one after another)

    Example:

    enum islamic_months {

    muharam, safar, rabiulawal, rabiulakhir,

    jamadilawal, jamadilakhir, rejab, syaaban,

    ramadhan, syawal, zulkaedah, zulhijjah

    };

    Each of the identifiers actually has a value,starting with 0 (unless specified otherwise).Therefore, we can treat them as integers.

  • 7/29/2019 Chapter9 Structure

    32/37

    User Defined Data Types - updated NI@2006 32

    If we want the enumeration to start with avalue other than 0, we can assign the valueto the first identifier:

    enum islamic_months {

    muharam = 1, safar, rabiulawal, rabiulakhir,

    jamadilawal, jamadilakhir, rejab, syaaban,ramadhan, syawal, zulkaedah, zulhijjah

    };

    Same as with the other data types, before an

    enum can be used, a variable needs to bedeclared:

    enum islamic_months months;

  • 7/29/2019 Chapter9 Structure

    33/37

    User Defined Data Types - updated NI@2006 33

    There are cases where it is appropriate for usto use an enum. This is an example of such acase:

    enum islamic_months months;

    GetMonth (&months);

    switch (months) {

    case muharam:

    . . .

    break;

    case safar:

    . . .

    break;

    . . .

    }

  • 7/29/2019 Chapter9 Structure

    34/37

    User Defined Data Types - updated NI@2006 34

    This is another case where it is appropriate touse an enum:

    enum Boolean {FALSE, TRUE};

    void main ( ) {

    int list[];

    Boolean found;

    Read(list);

    found = Search(list);

    if (found == TRUE)

    printf(FOUND!!);

    else

    printf(Cannot find the requested item);

    }

  • 7/29/2019 Chapter9 Structure

    35/37

    User Defined Data Types - updated NI@2006 35

    #include

    enum months {JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP,OCT, NOV, DEC};

    void main ( ) {enum months month;

    char *monthsName[] = {January, February, March,April, May, June, July, August, September,October, November, December};

    for (month = JAN; month

  • 7/29/2019 Chapter9 Structure

    36/37

    User Defined Data Types - updated NI@2006 36

    Output:

    1 January

    2 February

    3 March

    4 April

    5 May

    6 June

    7 July

    8 August

    9 September

    10 October

    11 November

    12 December

    SUMMARY

  • 7/29/2019 Chapter9 Structure

    37/37

    SUMMARYIn this chapter you have learnt about

    Structure type and variable declarationsHow structure members can be accessed

    How structure can be initialized

    Passing structure to functionEnumeration

    T.H.E E.N.D


Recommended