Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CSE1301 Computer Programming Lecture 20 Structures (Part 1)

Similar presentations


Presentation on theme: "1 CSE1301 Computer Programming Lecture 20 Structures (Part 1)"— Presentation transcript:

1 1 CSE1301 Computer Programming Lecture 20 Structures (Part 1)

2 2 Topics Structure Arrays of structs typedef structs and functions Pointers to structs structs within structs Data structures and modular design

3 3 What is a Structure? A collection of related variables under one aggregate name May contain variables of different types Using structures: –Define the structure –Declare/Initialize instances of the structure –Access members of an instance of the structure

4 4 Structure Definition Lunchbox Define a structure called “Lunchbox” which has the following compartments: a fruit compartment a sandwich compartment a drink compartment A structure is a blueprint Example:

5 5 Structure Definition (cont) A struct is used to specify the blueprint The members specify different aspects of a struct Example: struct LunchBox { int fruit; float drink; char sandwich[MAXN]; }; Lunchbox

6 6 Structure Variable Instance of a structure: actual series of contiguous memory locations for storage struct LunchBox kyle; struct LunchBox stan, cartman, kenny; struct LunchBox kids[5];

7 7 Initializing a struct Variable struct LunchBox kyle = { 1, 370.0, “ham”};

8 8 Initializing a struct Variable (cont) struct LunchBox kids[5] = { {1, 370.0, “ham” }, {2, 100.0, “roast”}, {0, 0.0, “muffin”}, {1, 300.0, “salad”}, {0, 0.0, “”} }; 01234

9 9 Members of a struct Variable struct LunchBox stan, kenny; stan.drink = 0.0; stan.fruit = 0; strcpy(stan.sandwich,“fruit cake”); kenny.fruit = 1; strcpy(kenny.sandwich, “muffin”); kenny.drink = 300.0;

10 10 Members of a struct Variable struct LunchBox kids[3]; int index = 1; kids[0].drink = 300.0; kids[0].fruit = 1; strcpy(kids[2].sandwich, “ham”); kids[index].fruit = 3; 0 1 2 kids[index+1].drink = kids[index - 1].drink;

11 11 Input/Output of struct Library functions printf() and scanf() do not have format conversion specifiers for structs Input/Output for each member only struct LunchBox cartman; scanf(“%d”, &(cartman.fruit)); scanf(“%f”, &(cartman.drink)); scanf(“%s”, cartman.sandwich); printf(“%d, %f\n”, cartman.fruit, cartman.drink); printf(“%s\n”, cartman.sandwich);

12 12 Input/Output of struct (cont) struct LunchBox kids[3]; int i = 0; for (i=0; i < 3; i++) { scanf(“%d %f %s”, &(kids[i].fruit),&(kids[i].drink), kids[i].sandwich); } for (i=0; i < 3; i++) { printf(“%d, %f, %s\n”, kids[i].fruit, kids[i].drink, kids[i].sandwich); } 0 1 2

13 13 Example: Student Record Write a program to read in and print a list of student last names and test marks input number of students for each student in the list { input last name and mark } for each student in the list { output last name and mark }

14 14 #include #define MAXLEN 50 #define MAXN 20 int main() { char lastname[MAXN][MAXLEN]; float mark[MAXN]; int count = 0; int i; printf("How many students? "); scanf("%d", &count); marks1.c Example without struct -1

15 15 if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { printf("Enter last name and mark: "); scanf("%s %f", lastname[i], &mark[i]); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printf("Last name: %s\n", lastname[i]); printf(" Mark: %.1f\n\n", mark[i]); } return 0; } marks1.c Example without struct -2

16 16 Example: Student Record Define a struct: StudentRec struct StudentRec { char lastname[MAXLEN]; float mark; }; Easy to extend later to include ID number, first name, etc

17 17 Example with struct (testing) #include #define MAXLEN 50 struct StudentRec { char lastname[MAXLEN]; float mark; }; int main() { struct StudentRec studA; struct StudentRec studB; printf("Enter last name and mark for student A: "); scanf("%s %f", studA.lastname, &(studA.mark)); printf("Enter last name and mark for student B: "); scanf("%s %f", studB.lastname, &(studB.mark)); printf("Student A: %s\t%f\n", studA.lastname, studA.mark); printf("Student B: %s\t%f\n", studB.lastname, studB.mark); return 0; } marks2a.c

18 18 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; int main() { struct StudentRec class[MAXN]; int count = 0; int i; printf("How many students? "); scanf("%d", &count); marks3a.c Example with struct -1

19 19 if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { printf("Enter last name and mark: "); scanf("%s %f", class[i].lastname, &(class[i].mark)); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printf("Last name: %s\n", class[i].lastname); printf(" Mark: %.1f\n\n", class[i].mark); } return 0; } marks3a.c Example with struct -2

20 20 Common Mistake struct StudentRec { char lastname[MAXLEN]; float mark; } ; Do not forget the semicolon here!

21 21 Notes on structs Initialization vs. Assignment struct StudentRec studA = {“Fermat”, 90}; struct StudentRec studA; studA = {“Fermat”, 90}; struct StudentRec studA = {“Fermat”, 90}; struct StudentRec studB; studB = studA; /* struct contains pointers? */

22 22 Notes on structs (cont) struct variables cannot be compared We can perform member comparisons only if (studA == studB) { printf(“Duplicate data.\n”); } if (strcmp(studA.lastname, studB.lastname) == 0 && (studA.mark == studB.mark) ) { printf(“Duplicate data.\n”); }

23 23 Notes on structs (cont) struct StudentRec { char lastname[MAXLEN]; float mark; } studA, studB, class[MAXN]; We can define a struct, and declare instances of that struct

24 24 typedef A typedef statement makes an identifier equivalent to a type specification struct StudentRec { char lastname[MAXLEN]; float mark; }; struct StudentRec studentA; struct StudentRec class[MAXN]; Example without typedef

25 25 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; Student studA; Student class[MAXN]; Example with typedef typedef (cont) The typedef statement makes an identifier equivalent to a type specification

26 26 Example with typedef (testing) #include #define MAXLEN 50 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; int main() { Student studA; Student studB; printf("Enter last name and mark for student A: "); scanf("%s %f", studA.lastname, &(studA.mark)); printf("Enter last name and mark for student B: "); scanf("%s %f", studB.lastname, &(studB.mark)); printf("Student A: %s\t%f\n", studA.lastname, studA.mark); printf("Student B: %s\t%f\n", studB.lastname, studB.mark); return 0; } marks2b.c

27 27 Example with typedef -1 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); marks3b.c

28 28 if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { printf("Enter last name and mark: "); scanf("%s %f", class[i].lastname, &(class[i].mark) ); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printf("Last name: %s\n", class[i].lastname); printf(" Mark: %.1f\n\n", class[i].mark); } return 0; } marks3b.c Example with typedef -2

29 29 Notes on typedef Yet another way of using typedef : typedef struct { char lastname[MAXLEN]; float mark; } Student; Student studA, studB; Student class[MAXN];

30 30 Passing a struct to a Function As always, the formal parameters are copies of the actual parameters void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); } main() { Student studentA = {“Gauss”, 99.0}; printRecord(studentA); }

31 31 Function Returning a struct A “package” containing several values main() { Student studentA; studentA = readRecord(); } Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f",newStudent.lastname,&(newStudent.mark)); return newStudent; } Version 1

32 32 Function Returning a struct (cont) Student readRecord ( Student newStudent ) { printf("Enter last name and mark: "); scanf("%s %f",newStudent.lastname,&(newStudent.mark)); return newStudent; } main() { Student studentA; studentA = readRecord(studentA); } Version 2 A “package” containing several values

33 33 Example: Structs and Functions-1 #include #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f", newStudent.lastname, &(newStudent.mark)); return newStudent; } void printRecord ( Student item ) { printf("Last name: %s\n", item.lastname); printf(" Mark: %.1f\n\n", item.mark); } marks4a.c

34 34 int main() { int count = 0; Student class[MAXN]; int i; printf("How many students? "); scanf("%d", &count); if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { class[i] = readRecord(); } printf("\nClass list:\n\n"); for (i=0; i < count; i++) { printRecord(class[i]); } return 0; } marks4a.c Example: Structs and Functions-2

35 35 Deitel & Deitel Chapter 10 - Sections 10.1 to 10.7 to be continued... Reading


Download ppt "1 CSE1301 Computer Programming Lecture 20 Structures (Part 1)"

Similar presentations


Ads by Google