'C' Programming With Structure Records - PowerPoint PPT Presentation

About This Presentation
Title:

'C' Programming With Structure Records

Description:

Computing applications often need data of different kinds to be associated. ... calculate z as the hypotenuse of a right angle triangle ... – PowerPoint PPT presentation

Number of Views:54
Avg rating:3.0/5.0
Slides: 22
Provided by: richar219
Category:

less

Transcript and Presenter's Notes

Title: 'C' Programming With Structure Records


1
'C' Programming With Structure Records
  • Purpose of structures
  • Coding a structure template
  • Defining a new data type
  • Functions which communicate using structures
  • Use of structure pointers
  • Structures and arrays
  • Assigning structures

2
Purpose of structures
  • Computing applications often need data of
    different kinds to be associated. A typical place
    where this occurs is in a record. For example a
    database record for a particular student might
    contain the student number, full name,
    course-code and year of entry.

3
Record declaration
  • struct student
  • char studno12
  • char name50
  • char course7
  • int startyear

4
More examples
  • struct coord float x,y
  • struct complex float real,imaginary
  • The data might have different types but does not
    have to be of different types. Structures also
    help with the naming of related parts of a record
    object.

5
Allocating memory to records
  • The above declarations don't create any space for
    data storage, but they provide a template for
    data of the appropriate types to be allocated.
    Let's allocate some storage to data variables
  • struct coord origin, cursor
  • / 2 x-y coordinates called origin and cursor
    /
  • struct student sdn_year250
  • / array for 50 students /

6
Defining a new data type
  • Better to have one word e.g. COORD to declare the
    type of data than 2 words e.g. struct coord .
    This needs a typedef statement
  • struct coord float x,y
  • typedef struct coord COORD
  • / COORD now same as struct coord /
  • COORD origin, cursor
  • / declare 2 x-y coordinates called origin and
    cursor /

7
Use of the dot structure member access operator
  • Members x and y of origin and cursor can now be
    accessed as origin.x, origin.y, cursor.x and
  • cursor.y e.g.
  • origin.x3.5
  • origin.y2.0

8
Having defined a new data type
  • We can declare stuctured data with a single word
    in a similar way that we use other built-in data
    types such as float and int. This simplification
    is useful as the name of the data type is going
    to appear in many places within our program, e.g.
    for declaring types of local data within
    functions or function parameters.
  • It may not seem the case, but having many smaller
    functions which communicate cleanly is going to
    make programming much, much easier.

9
Functions which communicate using structured
parameters
  • float distance(COORD a, COORD b)
  • / calculate distance between a and b
    /
  • float z,vert,horiz
  • / z distance, vert y1 - y2,
    horiz x1 - x2 /
  • horiza.x - b.x / the horizontal
    distance /
  • verta.y - b.y / the vertical
    distance /
  • / calculate z as the hypotenuse of a
    right angle triangle /
  • zsqrt((horizhoriz) (vertvert)) /
    Pythagorus theorem /
  • return z
    / zz xx yy /

10
Functions which communicate using structured
return values
  • COORD getcoord(void)
  • / note returned type is COORD
    /
  • / prompts for and returns a coordinate /
  • COORD temp
  • printf("Enter x and y coordinates \n")
  • scanf("ff",temp.x,temp.y)
  • return temp

11
A program using distance and getcoord part 1
  • include ltstdio.hgt
  • include ltmath.hgt
  • / needed to use sqrt() square root /
  • struct coord float x,y
  • / declare structure coord as having x and y
    members /
  • typedef struct coord COORD
  • / COORD is now same as struct coord /
  • COORD origin, cursor
  • / declare 2 x-y coordinates called origin and
    cursor /
  • / function prototypes /
  • float distance(COORD a, COORD b)
  • COORD getcoord(void)

12
A program using distance and getcoord part 2
  • int main(void)
  • COORD origin, cursor
  • float separation
  • printf("enter details for origin\n")
  • origingetcoord()
  • printf("enter details for cursor\n")
  • cursorgetcoord()
  • separationdistance(origin,cursor)
  • printf("the distance between origin and
    cursor is f\n",separation)
  • return 0

13
Use of structure pointers
  • Members x and y of coordinates a and b can also
    be accessed through pointers to a and b so that
    if pointer p stores the address of a pa then
  • p-gtx
  • directly accesses member x of a or a.x .

14
Rewrite the above program using pointers
  • / declarations above here of headers , struct
    coord and typedef COORD same as before so not
    repeated /
  • float distance(COORD a, COORD b)
  • / a and b are now pointers to COORD /
  • void getcoord(COORD t) / inputs coordinate
    through COORD pointer t /

15
Rewrite using pointers slide 2
  • int main(void)
  • COORD origin, cursor, orig,curs
  • origorigin curscursor
  • / store addresses in pointers orig and curs /
  • float separation
  • printf("enter details for origin\n")
  • getcoord(orig)
  • printf("enter details for cursor\n")
  • getcoord(curs)
  • separationdistance(orig,curs)
  • printf("the distance between origin and
    cursor f\n" ,
  • separation)
  • getch()
  • return 0

16
Rewrite using pointers slide 3
  • float distance(COORD a, COORD b)
  • / calculate distance between a and b /
  • float z,vert,horiz / z distance,
    vert y1 - y2, horiz x1 - x2 /
  • horiza-gtx - b-gtx / horizontal distance
    note -gt pointer syntax /
  • verta-gty - b-gty / the vertical
    distance /
  • / calculate z as the hypotenuese of a
    right angle triangle /
  • zsqrt((horizhoriz) (vertvert)) /
    pythagorus theorem /
  • return z /
    zz xx yy /
  • void getcoord(COORD t) / inputs x-y coordinate
    using pointers /
  • printf("please enter x and y
    coordinates\n")
  • scanf("ff",t-gtx,t-gty) / -gt has
    higher precedence than /

17
Structures and arrays
  • Having individual names for 10 coordinates is
    very awkward. We can declare the data as an
    array
  • typedef struct coord float x,y COORD
  • COORD graph10
  • We can then assign members of our structure array
    like this
  • graph9.x 12.5 graph9.y 7.3 / assign
    values to tenth element 9 of graph array /

18
Or we could input values into all coordinates
using a loop
  • int i
  • for(i0ilt10i)
  • printf("Enter x value for coordinated\n"
    ,i1)
  • scanf("f",graphi.x)
  • printf("Enter y value for coordinated\n"
    ,i1)
  • scanf("f",graphi.y)

19
Or using structure pointer notation
  • int i
  • for(i0ilt10i)
  • printf("Enter x value for coordinated\n"
    ,i1)
  • scanf("f",(graphi)-gtx)
  • / -gt has higher precedence than /
  • printf("Enter y value for coordinated\n"
    ,i1)
  • scanf("f",(graphi)-gty)

20
A structure containing an array
  • typedef struct student
  • char name30
  • float mark
  • STUDENT
  • STUDENT you
  • printf ("enter name and mark\n")
  • scanf ("sf",you.name,you.mark)
  • / you.name is the address of the name array /
  • / so no ampersand needed to get address/
  • / BUT you.mark is not an array so needs /
  • printf ("hello s your mark is f\n",you.name,you.
    mark)
  • printf ("The first letter of your name is
    c\n",you.name0)

21
Assigning structures
  • Unlike arrays, structures can be copied as a
    complete entity using a single assignment. This
    saves time. So instead of writing
  • strcpy(temp.name,you.name)
  • / use function strcpy to copy a string /
  • temp.mark you.mark
  • / can assign mark in one go /
  • we can write
  • tempyou / copy structure in one go /
Write a Comment
User Comments (0)
About PowerShow.com