Download presentation
Presentation is loading. Please wait.
Published byΘεοφάνια Λαγός Modified over 5 years ago
1
Introduction to Computer Programming Lecture 16 Structures (Part 1)
ITCS 102 Computer Programming Introduction to Computer Programming Lecture 16 Structures (Part 1) Assist. Prof. Dr. Nükhet ÖZBEK Ege University Department of Electrical & Electronics Engineering Dr. B. KARLIK
2
Topics Structure Arrays of structs typedef structs and functions
Pointers to structs structs within structs Data structures and modular design
3
ITCS 102 Computer Programming
What is a Structure? In C, we can define our own data types that represent structured collections of data 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 Dr. B. KARLIK
4
ITCS 102 Computer Programming
Structure Definition A structure is a blueprint Example: Lunchbox Define a structure called “Lunchbox” which has the following compartments: a fruit compartment a sandwich compartment a drink compartment Dr. B. KARLIK
5
Structure Definition (cont)
ITCS 102 Computer Programming 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 Dr. B. KARLIK
6
Structure Variable Instance of a structure: actual series of contiguous memory locations for storage struct LunchBox ali; struct LunchBox veli,ayse,fatma; struct LunchBox kids[5];
7
Initializing a struct Variable
struct LunchBox ali = {1,370.0,“kofte”};
8
Initializing a struct Variable (cont)
1 2 3 4 struct LunchBox kids[5] = { {1, 370.0, “kofte” }, {2, 100.0, “doner”}, {0, 0.0, “kebap”}, {1, 300.0, “salata”}, {0, 0.0, “”} };
9
Members of a struct Variable
struct LunchBox ali, veli; veli.drink = 0.0; veli.fruit = 0; strcpy(veli.sandwich,“doner”); ali.fruit = 1; strcpy(ali.sandwich, “kofte”); ali.drink = 300.0;
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,“kofte”); kids[index].fruit = 3; 1 kids[index+1].drink = kids[index - 1].drink; 2
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 ayse; scanf(“%d”, &(ayse.fruit)); scanf(“%f”, &(ayse.drink)); scanf(“%s”, ayse.sandwich); printf(“%d, %f\n”, ayse.fruit, ayse.drink); printf(“%s\n”, ayse.sandwich);
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); } printf(“%d, %f, %s\n”, kids[i].fruit, kids[i].drink, 1 2
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 } output last name and mark
14
Example without struct-1
ITCS 102 Computer Programming Example without struct-1 #include <stdio.h> #include <stdlib.h> #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 Dr. B. KARLIK
15
Example without struct-2
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"); printf("Last name: %s\n", lastname[i]); printf(" Mark: %.1f\n\n", mark[i]); return 0; marks1.c
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
Example with struct (testing)
ITCS 102 Computer Programming Example with struct (testing) #include <stdio.h> #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 Dr. B. KARLIK
18
ITCS 102 Computer Programming
Example with struct-1 #include <stdio.h> #include <stdlib.h> #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 Dr. B. KARLIK
19
Example with struct-2 { printf("Not enough space.\n"); exit(1); }
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"); printf("Last name: %s\n", class[i].lastname); printf(" Mark: %.1f\n\n", class[i].mark); return 0; marks3a.c
20
Do not forget the semicolon here!
Common Mistake struct StudentRec { char lastname[MAXLEN]; float mark; }; Do not forget the semicolon here!
21
ITCS 102 Computer Programming
Notes on structs Initialization vs. Assignment struct StudentRec studA = {“Ali”, 90}; struct StudentRec studA; studA = {“Ali”, 90}; struct StudentRec studA = {“Ali”, 90}; struct StudentRec studB; studB = studA; /* struct contains pointers? */ Dr. B. KARLIK
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
Notes on structs (cont)
We can define a struct, and declare instances of that struct struct StudentRec { char lastname[MAXLEN]; float mark; } studA, studB, class[MAXN];
24
ITCS 102 Computer Programming
typedef A typedef statement makes an identifier equivalent to a type specification struct StudentRec { char lastname[MAXLEN]; float mark; }; Example without typedef struct StudentRec studentA; struct StudentRec class[MAXN]; Dr. B. KARLIK
25
typedef (cont) The typedef statement makes an identifier equivalent to a type specification struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; Example with typedef Student studA; Student class[MAXN];
26
Example with typedef (testing)
#include <stdio.h> #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
Example with typedef-1 marks3b.c #include <stdio.h>
#include <stdlib.h> #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
Example with typedef-2 marks3b.c { printf("Not enough space.\n");
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"); printf("Last name: %s\n", class[i].lastname); printf(" Mark: %.1f\n\n", class[i].mark); return 0; marks3b.c
29
ITCS 102 Computer Programming
Notes on typedef Yet another way of using typedef: typedef struct { char lastname[MAXLEN]; float mark; } Student; Student studA, studB; Student class[MAXN]; Dr. B. KARLIK
30
Passing a struct to a Function
ITCS 102 Computer Programming 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); } Dr. B. KARLIK
31
Function Returning a struct
A “package” containing several values Student readRecord ( void ) { Student newStudent; printf("Enter last name and mark: "); scanf("%s %f",newStudent.lastname,&(newStudent.mark)); return newStudent; } Version 1 main() { Student studentA; studentA = readRecord(); }
32
Function Returning a struct (cont)
A “package” containing several values Student readRecord ( Student newStudent ) { printf("Enter last name and mark: "); scanf("%s %f",newStudent.lastname,&(newStudent.mark)); return newStudent; } Version 2 main() { Student studentA; studentA = readRecord(studentA); }
33
Example: Structs and Functions-1
#include <stdio.h> #include <stdlib.h> #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
Example: Structs and Functions-2
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"); printRecord(class[i]); return 0; marks4a.c
35
Passing a struct Pointer
Pass a pointer to the struct variable instead! studentPtr: studentA: lastname: mark:
36
Passing a struct Pointer
studentPtr: void readRecord ( Student *studentPtr ) { /* De-reference pointer here. */ } int main() { Student studentA; readRecord( &(studentA) ); return 0; } mark: studentA: lastname: lastname:
37
Passing a struct Pointer
ITCS 102 Computer Programming Passing a struct Pointer studentPtr: mark: studentA: lastname: To de-reference a pointer to a struct variable: Style 1: Use the * operator void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", (*studentPtr).lastname, &((*studentPtr).mark) ); } marks4b.c Dr. B. KARLIK
38
Passing a struct Pointer
ITCS 102 Computer Programming Passing a struct Pointer studentPtr: mark: studentA: lastname: To de-reference a pointer to a struct variable: Style 2: Use the -> operator void readRecord ( Student *studentPtr ) { printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark)); } marks4b.c Dr. B. KARLIK
39
Example: Pointers to Structs-1
#include <stdio.h> #include <stdlib.h> #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark)); } void printRecord ( Student *item ) printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); marks4c.c
40
Example: Pointers to Structs-1 (cont)
#include <stdio.h> #include <stdlib.h> #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark) ); } void printRecord ( Student *item ) printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); marks4c.c
41
Example: Pointers to Structs-1 (cont)
#include <stdio.h> #include <stdlib.h> #define MAXLEN 50 #define MAXN 20 struct StudentRec { char lastname[MAXLEN]; float mark; }; typedef struct StudentRec Student; void readRecord ( Student *studentPtr ) printf("Enter last name and mark: "); scanf("%s %f", studentPtr->lastname, &(studentPtr->mark) ); } void printRecord ( Student *item ) printf("Last name: %s\n", (*item).lastname); printf(" Mark: %.1f\n\n", (*item).mark); marks4c.c
42
Example: Pointers to Structs-2
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++) readRecord( &(class[i]) ); printf("\nClass list:\n\n"); printRecord( &(class[i]) ); return 0; marks4c.c
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.