# 1 Structures. 2 Structure Basics A structure is a collection of data values, called data members, that form a single unit. Unlike arrays, the data members.

## Presentation on theme: "1 Structures. 2 Structure Basics A structure is a collection of data values, called data members, that form a single unit. Unlike arrays, the data members."— Presentation transcript:

1 Structures

2 Structure Basics A structure is a collection of data values, called data members, that form a single unit. Unlike arrays, the data members can be of different types.

3 Structure Definition struct name { variable declaration;. }; the keyword struct announces that this is a structure definition

Declaring Structures (struct) Reserves Space struct my_example { int label; char letter; char name[20]; } mystruct; Does Not Reserve Space (Definition) struct my_example { int label; char letter; char name[20]; } ; /* The name "my_example" is called a structure tag */

The C language provides a facility called typedef to form complex types from more-basic machine types and assign simpler names (alias) to such combinations. For example, the declaration: typedef int Length; makes the name Length a synonym (or alias) for the data type int. The data type name Length can now be used in declarations in exactly the same way that the data type int can be used: Length a, b, len ; Length numbers[10] ; Data type aliasing

6 Initializing Structures struct Rect /* Definition */ { double x; double y; char color; double width; double height; }; struct Rect r1 = {0,0,r,5,10}; /* Declaration */ 0 0 r 5.0 10.0 x y color width height r1

7 Accessing Data Members To access a data member use Varname.membername struct Rect r1 = {0,0,r,5,10}; r1.x r1.y r1.color r1.width r1.height 0 0 r 5 10 x y color width height r1

8 Assignment operator Assignment operator is defined for structure of the same type. struct rect { double x; double y; char color; double width; double height; }; struct rect r1, r2 r1.x = 10.5; r1.y = 18.99; r1.width = 24.2; r1.height = 15.9; r1.color = 'r'; /* Copy all data from r1 to r2. */ r2 = r1;

9 Scope of a Structure Member variables are local to the structure. Member names are not known outside the structure.

10 Exercise Write a program using structures that manipulates pairs. Addition and multiplication of pairs is defined below. (a,b)+(c,d)=(a+c,b+d) (a,b)*(c,d)=(a*c,b*d)

11 Pair Structure Store two integers to represent the first and second number of pair struct pair { int first; int second; };

12 Addition struct pair add(struct pair p1, struct pair p2) { struct pair temp; temp.first = p1.first + p2.first; temp.second = p1.second + p2.second; return temp; }

13 Multiplication struct pair multiply(struct pair p1, struct pair p2) { struct pair temp; temp.first = p1.first * p2.first; temp.second = p1.second * p2.second; return temp; }

14 How to use the functions struct pair mp1,mp2,mp3,mp4; printf("Enter first pair\n"); scanf("%d %d",&mp1.first, &mp1.second); printf("Enter second pair\n"); scanf("%d %d",&mp2.first, &mp2.second); mp3 = add(mp1, mp2); printf("Addition result = (%d,%d)\n",mp3.first,mp3.second); mp4 = multiply(mp1,mp2); printf("Multiplication result = (%d,%d)\n",mp4.first,mp4.second);

15 Exercise Update the program to support the following on pairs c*(a,b) = (c*a,c*b) (a,b)^c = (a^c,b^c)

16 Arrays of Structures Arrays of structures may be declared in the same way as other C data types. struct rect rectangles[20]; rectangles[0] references first structure of rectangles array. rectangles[0].color = r; 012319 ………....... x y color width height

17 Structures as Arguments to Functions When a structure is passed as an argument to a function, it is a call-by-value reference. Changes made to the formal parameters do not change the argument. A pointer to a structure may also be passed as an argument to a function. Changes made to the formal parameters also change the argument.

18 Call by Value Example struct simple { int ival; double dval; }; void fun1(struct simple s) { s.ival = s.ival+1; s.dval = s.dval + 2; } int main(void) { struct simple s1 = {10, 1.5}; fun1(s1); printf(%i %lf\n, s1.ival, s1.dval ); return 0; } 10 1.5 ival dval s1 10 1.5 s 11 3.5 Updated s

19 Nested Structures Structure definitions may contain data members that are other structures: struct Card { char suit; int rank; }; struct Deck { struct Card cards[52]; int next_card = 0; }; suit rank Card …... …… next_card cards 0151

Nested Structures (more examples) struct address { int hno; char street[20]; char location[20]; char city[20]; char state[20]; char country[20]; int pincode; }; struct date { int day, month, year; }; typedef address addr_t; typedef date date_t; struct name { Char fname[20], mname[20], lname[20]; }; typedef name name_t; typedef struct { Char fname[20], mname[20], lname[20]; } name_t; Both the above given code blocks do the same. struct student { char rollnum[20]; char gender; name_t sname; addr_t current_addr; addr_t permanent_addr; date_t dbirth; date_t dregistration; };

21 Initialize the Deck for (i=0; i<13; i++) { d1.cards[i].suit = 'c'; d1.cards[i].rank = i+1; } for (i=13; i<26; i++) { d1.cards[i].suit = 'd'; d1.cards[i].rank = (i-13)+1; } for (i=26; i<39; i++) { d1.cards[i].suit = 'h'; d1.cards[i].rank = (i-26)+1; } for (i=39; i<52; i++) { d1.cards[i].suit = 's'; d1.cards[i].rank = (i-39)+1; }

22 Print the Deck void print(struct Deck d1) { int i; for (i=0; i<52; i++) printf("%c %d\n", d1.cards[i].suit, d1.cards[i].rank); return; }

23 How to Shuffle the Deck? for (i=0; i<52; i++) { // pick a random card x from 0-51 // swap card x and card i } 012351 …………………………

24 BlackJack Shuffle the deck Deal first 2 cards to user Print both cards on screen Next two cards to dealer Print only the first on screen Ask user whether he/she wants to continue Highest total <= 21 wins Jack, Queen, King are 10 points Ace is 11 points Other cards represented by their number

Similar presentations