180 likes | 299 Views
Structures. Structures and Pointers Structures and Functions. Structure Definition. Define a structure book struct book { char title[25]; char author[2][25]; int pages; double price; }; Define a variable Fiction and intialize struct book Fiction = {“A Time to Kill”,
E N D
Structures Structures and Pointers Structures and Functions
Structure Definition • Define a structure book structbook { char title[25]; char author[2][25]; int pages; double price; }; • Define a variable Fiction and intialize structbookFiction = {“A Time to Kill”, {“Arthur Smith”, “John Clark”}, 556, 19.95}; CENG 114
Memory Allocation for Fiction &Fiction Fiction.author[0] Fiction.author[1] &Fiction.pages Fiction.title &Fiction.price
Accessing Elements using Pointers struct book Fiction; struct book *ptr; ptr = &Fiction; Fiction.title (*ptr).title ptr->title Fiction.author[0] (*ptr).author[0] ptr->author[0] Fiction.price (*ptr).price ptr->price CENG 114
Example • #include <stdio.h> • struct book { • char Title[25]; • char Auth[2][20]; • int Pgs; • double Prc; • }; • typedefstruct book Book_t; • int main(void) { • struct book bk1 = { • "Calculus for Sophmores", • {"John Thompson", "Carrie Thompson"}, • 787, • 89.95 • }; CENG 114
Example • struct book *bkptr; • bkptr = &bk1; • printf("Size of Title: %d\n", sizeof(bk1.Title)); • printf("Size of Auth 0: %d\n", sizeof(bk1.Auth[0])); • printf("Size of Auth 0: %d\n", sizeof(bk1.Auth[1])); • printf("Size of int: %d\n", sizeof(int)); • printf("Size of double: %d\n", sizeof(double)); • printf("Size of structure book is: %d\n", sizeof(Book_t)); • puts(""); • printf("Address of bk1 : %d\n", &bk1); • printf("Address of bkptr: %d\n", &bkptr); • printf("Value of bkptr : %d\n", bkptr); • printf("Value pointed by bk1 : %s\n", &bk1); • printf("Value pointed by bkptr: %s\n", bkptr); • printf("Value pointed by bkptr: %c\n", *bkptr); • puts(""); CENG 114
Example • printf("%s\n", bk1.Title); • printf("%s\n", (*bkptr).Title); • printf("%s\n", bkptr->Title); • printf("%.2f\n", bk1.Prc); • printf("%.2f\n", (*bkptr).Prc); • printf("%.2f\n", bkptr->Prc); • puts(""); • printf("Please enter a new Title: "); • gets(bkptr->Title); • printf("%s\n", bkptr->Title); • printf("Please enter a new Price: "); • scanf("%lf", &bkptr->Prc); • printf("%.2f\n", bkptr->Prc); • return(0); • } CENG 114
Example 2 struct book *bkp; printf("%s\n", bkp->title); printf("%s & %s\n", bkp->author[0], bkp->author[1]); printf("%d\n", bkp->pages); printf("%.2f\n", bkp->price); return(0); } #include <stdio.h> struct book { char title[25]; char author[2][25]; int pages; double price; }; int main(void) { struct book Fiction = { "A Time to Joy", {"Arthur Smith", "John Clark"}, 556, 19.95 };
Example 3 printf("Enter std no: "); scanf("%d", &p->No); fflush(stdin); printf("Enter std first name: "); gets(p->Fname); fflush(stdin); printf("Enter std last name: "); gets(p->Lname); for(i=0; i<12; i++) { printf("Enter quiz grade %2d: ", i+1); scanf("%d", &p->Qgrds[i]); } #include <stdio.h> struct student { intNo; charFname[15], Lname[15]; intQgrds[12]; intQGrd; }; int main(void) { struct student std; struct student *p; inti, j; int temp;
Example 3 p->QGrd = 0; for(i=0; i<10; i++) p->QGrd += p->Qgrds[i]; printf("%-12d", p->No); printf("%-15s", p->Fname); printf("%-15s", p->Lname); printf("%3d\n", p->QGrd); return(0); } for(i=0; i<11; i++) { for(j=0; j<11-i; j++) { if(p->Qgrds[j] < p->Qgrds[j+1]) { temp = p->Qgrds[j]; p->Qgrds[j] = p->Qgrds[j+1]; p->Qgrds[j+1] = temp; } } }
Structure Inp/Outp in Functions • Assume the following structure struct student { char fname[15]; char lname[15]; int no; double GPA; } ; • Structure as input • Structure as output • Structure as input and output • Structure as output (return) • Structure element as input • Structure element as output • Structure element as output (return) CENG 114
Structure as input • Function call • Function Definition • void PrtStd(struct student std) • { • printf(“%s”, std.fname); • printf(“%s “, std.lname); • printf(“\t%d“, std.stdno); • printf(“\t%.2f\n”, std.GPA); • } • int main(void) • { • struct student s = { • "Jane", /* fname */ • "Doe", /* lname */ • 201211333, /* no */ • 3.7 /* GPA */ • }; • PrtStd(s); • return(0); • } CENG 114
Structure as output • Function call • Function Definition • void FillStd(struct student *std) • { • strcpy(std->fname, "John"); • strcpy(std->lname , "Smith"); • std->no = 201011444; • std->GPA = 3.5; • } int main(void) { struct student s; FillStd(&s); return(0); } CENG 114
Structure as input and output • Function Definition • Function call • void ChngGrd(struct student *std) • { • std->GPA *= (5.0/4.0); • } int main(void) { struct student s; ChngGrd(&s); return(0); } CENG 114
Structure as output (return) • Function call • Function Definition • struct studentFillStd2(void) • { • struct student std; • strcpy(std.fname, "Adam"); • strcpy(std.lname , "Johnston"); • std.no = 201111222; • std.GPA = 2.5; • return(std); • } int main(void) { struct student s; s= FillStd2(); return(0); } CENG 114
Structure Element as input • Function call • Function Definition • void PrtGPA(doubleGrd) • { • printf(“The GPA is: %d\n”, Grd); • } • int main(void) • { • struct student s = { • "Jane", /* fname */ • "Doe", /* lname */ • 201211333, /* no */ • 3.7 /* GPA */ • }; • PrtGPA(s.GPA); • return(0); • } CENG 114
Structure Element as output • Function call • Function Definition • void ChngGPA(double *Grd) • { • *Grd = 4.0; • } • int main(void) • { • struct student s = { • "Jane", /* fname */ • "Doe", /* lname */ • 201211333, /* no */ • 3.7 /* GPA */ • }; • PrtGPA(&s.GPA); • return(0); • } CENG 114
Structure Element as output w/Return • Function call • Function Definition • double SetGPA(void) • { • return(2.89); • } • int main(void) • { • struct student s = { • "Jane", /* fname */ • "Doe", /* lname */ • 201211333, /* no */ • 3.7 /* GPA */ • }; • s.GPA = SetGPA(); • return(0); • } CENG 114