Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.