STRUCTURES
Structures in C A structure is –a convenient way of grouping several pieces of related information together –a collection of variables under a single name Examples : real number && imaginary number complex number ( 3+5i ) height && width && length rectangular prism
Structures in C The variables in structures can be of different types, and each has a name which is used to select it from the structure Example : ID (integer) && Name (char array) A Student record A structure is a new named type that may involve several different typed variables
Defining Structures 1 struct complex_number { int real_part; int imaginary_part; }; “complex_number” is the tag name “struct complex_number” is the new type
Defining Structures 2 /* DEFINITION OF RECTANGULAR PRISM */ struct rectangular_prism {int height; int width; int length;}; // name of new type?? /* DEFINITION OF STUDENT RECORD */ struct student_record { int ID; char name[100]; };
Structures : Creating objects struct complex_number { int real_part; int imaginary_part;}; // Below the definition of structure you can create // objects from it “s1” and “s2” struct complex_number s1; struct complex_number s2; s2 real_part imaginary_part s1 real_part imaginary_part
Structures : Creating objects struct rectangular_prism {int height; int width; int length;}; // Below the definition of structure you can create // objects from it “obj” struct rectangular_prism obj; obj height lengthwidth
Structures : Creating static arrays of objects struct student_record { int ID; char name[100]; }; // Creates an array of student records “group” struct student_record group[4]; group IDname IDname IDname IDname group[0] group[1] group[2] group[3]
Structures : Creating dynamic arrays of objects struct rec { int ID; char name[100]; }; // Creating a dynamic array // of student records “group” struct rec * group; // DECLARES POINTER group = ( struct rec * ) malloc ( sizeof (struct rec) * 4 ); size of objects in array number of objects in array (array size)
Structures : Accessing members of structures struct rectangular_prism {int height; int width; int length;}; // Create an object from the structure defined above “obj” struct rectangular_prism obj; // Members of the objects can be accessed by putting a dot // following the object name obj.height=10; obj.width=15; obj.length=40; obj height=10 length=40width=15
Structures : Accessing members of structures struct rectangular_prism {int height; int width; int length;}; struct rectangular_prism obj; // Create a pointer to point object “obj” struct rectangular_prism *p = &obj; (*p).height=10 // or obj.height or p->height=10 p->width=15; p->length=40; obj == *p height=10 length=40width=15
Structures : Accessing members of structures // Defines structure struct student_record { int ID; char name[100]; }; // Creates an array of student records “group” struct student_record group[2]; group[0].ID=200710; strcpy(group[0].name, “doddy”); group[1].ID=200711; strcpy(group[1].name,group[0].name); group ID=200710name= “doddy” ID=200711name =?? group[0] group[1]
Structures : DECLARATION ALTERNATIVES Declaration 1 : struct record { int ID; char * name; char grade; }; struct record s1; struct record s2; struct record s3; Declaration 2 : struct record { int ID; char * name; char grade; } s1, s2; struct record s3;
Structures : DECLARATION ALTERNATIVES Declaration 1 : struct record { int ID; char * name; char grade; }; struct record s1; struct record s2; Declaration 3 : struct { int ID; char * name; char grade; } s1, s2; /* no tag name */ /* no permission to declare other variables of this type */
Structures : DECLARATION ALTERNATIVES Declaration 4 : struct record { int ID; char * name; char grade; }; typedef struct record rec; rec s1; struct record s2; Declaration 5 : /* high degree of modularity and portability */ typedef struct { int ID; char * name; char grade; } rec; rec s1; rec s2;
Initialization of Structure Objects 1.struct names { char name[10]; int length; int weigth;} man[3]= { “Tom”, 180, 65, “George”, 170, 68, “Bob”, 190, 100 }; 2.struct names woman[2]={{“Mary”, 170, 55}, {“Sue”, 160,67}}; 3.struct names your; your. name=“Jane”; your.length=160; your.weigth=50;
Structures in Structures #include struct physical_info { int length; int weigth; } ; struct record { int salary; int working_hour; struct physical_info man; } ; main() {struct record s1; s1.salary=10000; s1.working_hour= 6; s1.man.length=180; s1.man.weigth=78; }
Exercise 1 on Structures Declare a structure for complex numbers (real and imaginary part) Create 1 dynamic object (use pointers) Ask user to fill the object Print out the complex number as given below output Please give the values for complex number : 5 6 Complex number : 5 + 6i
Exercise 1 on Structures struct complex {int real; int imaginary; }; main() { struct complex * p; // Declare pointer for object // Memory allocation for object p=(struct complex *) malloc(sizeof(struct complex)); printf( " Please give the values for complex number : " ); scanf( "%d%d", &(p->real), & (p->imaginary) ); printf( "Complex number : %d + %d i", p->real, p->imaginary ); }
Senem Kumova Metin // A function to add two integers int add(int a, int b) { int result= a+b; return result;} struct complex { int r; int i; }; // A function to add two complex numbers struct complex add ( struct complex a, struct complex b ) { struct complex result; result.r=a.r+b.r; result.i=a.i+b.i; return result;} Exercise 2 : Define a function to add two complex numbers
Exercise 3 on Structures struct rectangular_prism {int height; int width; int length;}; int volume(struct rectangular_prism x) {return x.height*x.width*x.length; } int area (struct rectangular_prism x) { return 2*x.width*x.lenght + 2*x.lenght*x.height + 2*x.width*x.lenght; }