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
2Purpose 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
4More 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.
5Allocating 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 /
6Defining 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 /
7Use 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
8Having 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.
9Functions 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 /
10Functions 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
11A 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)
12A 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
13Use 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 .
14Rewrite 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 /
15Rewrite 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
16Rewrite 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 /
17Structures 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 /
18Or 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)
19Or 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)
20A 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)
21Assigning 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 /