1 structures unimap sem i - 11/12ekt 120 computer programming

30
1 Structures UniMAP SEM I - 11/12 EKT 120 Computer Programming

Upload: shannon-white

Post on 03-Jan-2016

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

1

Structures

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 2: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

2

Outline Introduction Structure Definitions and

Declarations Initializing Structures Operations on Structures Members Structures as Functions Parameters Array of Structures

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 3: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

3

Introduction Structures

Collection of related data items called components (or members) that are NOT necessarily of the same data type.

Commonly used to define records to be stored in files. Usually the collections of related data item are

characteristics in an object For example:

Object CharacteristicsBook price, number of pages, year publishedCar price, year, model, colourStudent name, matric_no, semester

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 4: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

4

Structure Definition Syntax:

struct StructureTypeName {

structure member declaration list};

Example:struct book {

float fPrice;int iNumPages;int iYear;

};

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 5: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

UniMAP SEM I - 11/12 EKT 120 Computer Programming5

Structure Definition struct information

A struct cannot contain an instance of itself

Can contain a member that is a pointer to the same structure type

A structure definition does not reserve space in memory

Instead creates a new data type used to define structure variables

Page 6: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

6

Structure Declaration After defining a structure type, we may

declare variables that are of that type. A structure variable declaration requires these elements : keyword struct structure type name a list of variables names separated by commas concluding semicolon

E.g. struct book sBook1;

struct book sMyBook,sHisBook,sHerBook;

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 7: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

7

How does it look like in my program?

#include <stdio.h>struct book{

float fPrice;int iNumPages;int iYear;

};int main( )

{struct book sBook1;……

}

#include <stdio.h>struct book{

float fPrice;int iNumPages;int iYear;

} sBook1;

int main( ){

……}

or

struct book sBook1;

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 8: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

8

Initializing Structures

struct book sBook1 = {25.50, 690, 2005};ORsBook1.fPrice = 25.50;sBook1.iNumPages = 690;sBook1.iYear = 2005;

dot operator

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 9: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

9

Operations on Structures Members

Operation Normal variable Structure member

Read from user

scanf(“%f”, &fPrice);

scanf(“%f”, &sBook1.fPrice);

Assign value fPrice = 25.50; sBook1.fPrice = 25.50;

Print as output printf(“%f\n”, fPrice);

printf(“%f\n”, sBook1.fPrice);

Copy to a variable

fNewPrice = fPrice; fNewPrice = sBook1.fPrice;

Pass value to a function

if(fnFun1(fPrice) > 5)

if(fnFun1(sBook1.fPrice) > 5)

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 10: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

10

Multiple Structures Variables

struct book sMyBook, sHisBook, sHerBook;

sMyBook

fPrice

iNumPages

iYear

fPrice

iNumPages

iYear

fPrice

iNumPages

iYear

sHisBook

sHerBook

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 11: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

11

Multiple Structures Variablese.g.struct book sMyBook, sHisBook, sHerBook;sMyBook. fPrice = 25.50;sHerBook.fPrice = 10.50;if(sMyBook.fPrice > sHerBook.fPrice)

printf(“My book is more expensive than hers\n”);else

printf(“My book is cheaper than hers\n”);

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 12: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

12

Sample Program#include <stdio.h>

struct book { float fPrice; int iNumPages; int iYear;};

int main(){ struct book sMyBook =

{25.50,690,2005}; struct book sHerBook;

printf("Enter book price : "); scanf("%f", &sHerBook.fPrice); printf("Enter number of pages : "); scanf("%d", &sHerBook.iNumPages); printf("Enter year published : "); scanf("%d", &sHerBook.iYear);

printf("My book :\n");printf("%.2f\t%d\t%d\n", sMyBook.fPrice, sMyBook.iNumPages, sMyBook.iYear);printf("Her book :\n");printf("%.2f\t%d\t%d\n", sHerBook.fPrice, sHerBook.iNumPages, sHerBook.iYear);

if(sMyBook.iYear > sHerBook.iYear) printf("My book is the latest publication\n");else printf("Her book is the latest publication\n"); return 0;}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 13: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

13

Structures as Function Parameters

Like variables of any other data type, structure variables can be used as formal and actual function parameters.

In passing structure variables by value to a function, the operating systems makes a copy of the entire structure in the data area of the called function.

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 14: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

14

Structures as Function Parameters

……

float fnComputePrice(struct book sBkC); //function prototype

…int main( ){ struct book sBookC;

……………fNewPrice = fnComputePrice(sBookC); //function call……

}float fnComputePrice(struct book sBkC) //function definition

{ …….sBkC.fPrice=sBkC.fPrice + fTax;……return(fBkC.fPrice);

}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 15: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

15

Structures as Function Parameters

A nonvoid function of a structure type can return a structure of that structure type under the function’s name if we use a return statement in the function.

struct book fnRead (); //function prototypeint main( ){ ……….

struct book sB;sB = fnRead( ); //function call……….

}struct book fnRead( ) //function definition{ struct book sBk;

printf(“Enter price:”);scanf(“%f”, &sBk.fPrice);…..return(sBk);

}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 16: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

16

Structures as Function Parameters

If all members of a structure variable are not needed for a function to perform its task, we can pass only the required members.

However, we must specify structure members using the component selection operator.

int fnModifyYear(int iA, int iB, int iYear); //function prototype……..int main( ){ struct book sBkC;

…………….iAvgYear=fnModifyYear(iAa, iBb, sBkC.iYear); //function call…….

}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 17: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

17

Structures as Function Parameters

It is possible to pass structure variables using pointers

int main(){ struct book sB;

………fnRead(&sB); //function call

}void fnRead(struct book *sBk){

printf(“Enter price:”);scanf(“%f”, &sBk->fPrice);printf(“Enter numpages:”);scanf(“%d”, &sBk->iNumPages);…….

}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 18: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

18

Sample Program#include <stdio.h>struct book { float fPrice; int iNumPages; int iYear;};struct book fnRead();void fnPrint(struct book, struct book);void fnCompare(int, int);int main(){ struct book sMyBook =

{25.50,690,2005}; struct book sSheBook; sSheBook=fnRead(); fnPrint(sMyBook , sSheBook); fnCompare(sMyBook.iYear,

sSheBook.iYear); return 0;}

struct book fnRead(){ struct book sHerBook;

printf("Enter book price : "); scanf("%f", &sHerBook.fPrice); printf("Enter number of pages : "); scanf("%d", &sHerBook.iNumPages); printf("Enter year published : "); scanf("%d", &sHerBook.iYear); return(sHerBook);}void fnPrint(struct book sMyBook, struct book

sHerBook){ printf("My book :\n"); printf("%.2f\t%d\t%d\n", sMyBook.fPrice,

sMyBook.iNumPages, sMyBook.iYear); printf("Her book :\n"); printf("%.2f\t%d\t%d\n", sHerBook.fPrice,

sHerBook.iNumPages, sHerBook.iYear);}void fnCompare(int iMyYear, int iSheYear){ if(iMyYear > iSheYear) printf("My book is the latest publication\

n"); else printf("Her book is the latest publication\

n");}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 19: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

Sample program2#include <stdio.h>struct student{ char name[50];

char program[5];float gpa;

};void displayInfo(struct student);struct student readInfo();int main(){struct student year1={"Aliana","RK20",3.33};struct student year2;displayInfo(year1);

year2=readInfo();displayInfo(year2);return 0;}void displayInfo(struct student std){ printf("%s\t%s\t%.2f\n",std.name,std.program,std.gpa);}struct student readInfo(){ struct student s;

printf("Enter student name: ");scanf("%s", s.name);printf("Enter program: ");scanf("%s", s.program);printf("Enter gpa: ");scanf("%f", &s.gpa);

return(s);}

19

Page 20: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

Sample program3#include <stdio.h>struct student{ char name[50];

char program[5];float gpa;

};void displayInfo(struct student);void readInfo(struct student *);int main(){struct student postgrad;

readInfo(&postgrad);displayInfo(postgrad);return 0;}

void displayInfo(struct student std){ printf("%s\t%s\t%.2f\n",std.name,std.program,std.gpa);}void readInfo(struct student *s){

printf("Enter student name: ");scanf("%s", s->name);printf("Enter program: ");scanf("%s", s->program);printf("Enter gpa: ");scanf("%f", &s->gpa);

}

20

Page 21: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

21

An Array of Structures Suppose a company has 50 full-time employees.

struct employeeType {

char acFirstName[20]; char acLastName[20]; int iPersonID; char acDeptID[10]; double dYearlySalary; double dMonthlySalary; double dYearToDatePaid; double dMonthlyBonus;

}; struct employeeType asEmployees[50];

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 22: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

22

How it looks like

UniMAP SEM I - 11/12 EKT 120 Computer Programming

[0][1][2]

.

.

.[25]

[26]

.

.

.[48]

[49]

Array of structs asEmployees

asEmployees[2]acFirstNameacLastName

iPersonIDacDeptID

dYearlySalarydMonthlySalarydYearToDatePai

ddMonthlyBonus

Page 23: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

23

How to access??int iCounter;

for(iCounter = 0; iCounter < 50; iCounter++){

scanf(“%s %s %d %s %lf”, &asEmployees[iCounter].acFirstName, &asEmployees[iCounter].acLastName,&asEmployees[iCounter].iPersonID,&asEmployees[iCounter].acDeptID,&asEmployees[iCounter].dYearlySalary);

asEmployees[iCounter].dMonthlySalary=asEmployees[iCounter].dYearlySalary/12; asEmployees[iCounter].dYearToDatePaid = 0.0; asEmployees[iCounter].dMonthlyBonus = 0.0;

}

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 24: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

24

How to access?? Suppose that for a given month the monthly bonuses

are already stored in each employee’s record, and we have to calculate the monthly paycheck and update the yearToDatePaid amount. The following loop computes and prints the employee’s paycheck for the month: double dPayCheck; //variable to calculate the paycheck for(iCounter = 0; iCounter < 50; iCounter++) {

printf(“%s %s”, asEmployees[iCounter].acFirstName, asEmployees[iCounter].acLastName); dPayCheck = asEmployees[iCounter].dMonthlySalary +

asEmployees[iCounter].dMonthlyBonus;

asEmployees[iCounter].dYearToDatePaid = asEmployees[iCounter].dYearToDatePaid + dPayCheck; }

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 25: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

25

Arrays in Structures

Example const arraySize = 5;

struct listType

{

int aiListElem[arraySize]; //array containing the list int iListLength; //length of the list

};

struct listType sList;

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 26: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

26

How it looks like

struct listTypeaiListElem

iListLength

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 27: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

27

Structure Within a Structurestruct nameType {

string acFirst; string acMiddle; string acLast;

}; struct addressType {

string acAddress1; string acAddress2; string acCity; string acState; string acZip;

}; struct dateType{

string acMonth;string acDay; string acYear;

};

struct contactType {

string acPhone; string acCellphone; string acFax; string acPager; string acEmail;

}; struct employeeType {

struct nameType sName; string acEmplID; struct addressType sAddress; struct dateType sHiredate; struct dateType sQuitdate; struct contactType sContact; string acDeptID; double dSalary;

};

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 28: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

28

Structure Within a Structure : How to access??

//variable declaration struct employeeType sNewEmployee; //declare 100 employees' records struct employeeType asEmployees[100];

sNewEmployee.dSalary = 45678.00; sNewEmployee.sName.acFirst = "Mary"; sNewEmployee.sName.acMiddle = "Beth"; sNewEmployee.sName.acLast = "Simmons";

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 29: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

29

Structure Within a Structure : How to access??

The statementscanf(“%s”, &sNewEmployee.sName.acFirst);

reads and stores a string into sNewEmployee.sName.acFirst.

The statement sNewEmployee.dSalary = sNewEmployee.dSalary *

1.05;

updates the salary of newEmployee

UniMAP SEM I - 11/12 EKT 120 Computer Programming

Page 30: 1 Structures UniMAP SEM I - 11/12EKT 120 Computer Programming

TQ

30UniMAP SEM I - 11/12 EKT 120 Computer Programming