c programming session 09

31
Slide 1 of 31 Ver. 1.0 Programming in C In this session, you will learn to: Work with structures Use structures in file handling Objectives

Upload: dushmanta-nath

Post on 16-Apr-2017

1.707 views

Category:

Education


2 download

TRANSCRIPT

Page 1: C programming session 09

Slide 1 of 31Ver. 1.0

Programming in C

In this session, you will learn to:Work with structuresUse structures in file handling

Objectives

Page 2: C programming session 09

Slide 2 of 31Ver. 1.0

Programming in CWorking with Structures

Structures:Are collection of heterogeneous data types.Are also known as records.Are used to define new data types.Are defined using the struct keyword.

Page 3: C programming session 09

Slide 3 of 31Ver. 1.0

Programming in CDefining Structures

A structure is defined by using the struct keyword.Consider the following example: struct {

char transno [4];int salesno;int prodno;int unit_sold;float value_of_sale;} salesrec;

All the variables in the record are treated as one data structure – salesrec.

Page 4: C programming session 09

Slide 4 of 31Ver. 1.0

Programming in CPractice: 7.1

1. State whether True or False:The members of a structure must be of the same data type.

2. a. Give the declaration for a structure called date with the following members.

day (2 digits)month (2 digits)year (4 digits)

b. Give appropriate statements to accept values into the members of the structure date and then print out the date as mm/dd/yyyy.

Page 5: C programming session 09

Slide 5 of 31Ver. 1.0

Programming in C

Solution:1. False2. a. The structure declaration should be: struct {

int day;int month; int year;

} date;

b. The statements could be:scanf(“%d%d%d”, &date, &date.month,

&date.year);printf(“%d/%d/5d”, date.month, date.day, date.year);

Practice: 7.1 (Contd.)

Page 6: C programming session 09

Slide 6 of 31Ver. 1.0

Programming in C

Defining a label structures:Structure label may be declared as:struct salesdata {

char transno [4];int salesno;int prodno;int unit_sold;float value_of-sale;};

struct salesdata salesrec;

Here, salesdata is the label and salesrec is the data item.

Defining Structures (Contd.)

Page 7: C programming session 09

Slide 7 of 31Ver. 1.0

Programming in CPractice: 7.2

Given the following declarations:struct date_type{ struct {

int day; int day;int month; int month;int year; int year;

}; } date;

Declaration 1 Declaration 2 Answer the following questions:1. Memory is allocated for the structure (date_type/ date).2. Which of the following is/are the correct way(s) of referring to

the variable day?a. day.dateb. date_type.day

Page 8: C programming session 09

Slide 8 of 31Ver. 1.0

Programming in CPractice: 7.2 (Contd.)

3. What change(s) should be made to the first declaration so that the structure date is created of type date_type?

4. Is the following statement valid in case of the second declaration? If not, why?

struct date another_date;

Page 9: C programming session 09

Slide 9 of 31Ver. 1.0

Programming in C

Solution:1. date (date_type is only a structure type)2. a. Invalid because the structure name precedes the variable

name. b. Invalid because date_type is not actually created in memory, it is only a label.

3. The following statement should be added after the struct declaration:

struct date_type date;

4. This is invalid because date is not a structure type but anactual structure in memory.

Practice: 7.2 (Contd.)

Page 10: C programming session 09

Slide 10 of 31Ver. 1.0

Programming in CPassing Structures to Functions

Passing Structures to Functions:Structures may be passed to functions either by value or by reference.Usually methods pass the address of the structure.The name of the variable being referenced is preceded by the symbol .

Page 11: C programming session 09

Slide 11 of 31Ver. 1.0

Programming in CPractice: 7.3

1. Consider the following code:struct date_type {int day;int month; int year;}; struct date_type date, *ptr;

a. How can the pointer variable ptr be assigned the address of the structure date?

b. Is the following statement valid?ptr = &date_type;

c. Give alternative ways of referring to:i. &date.dayii. date.month

Given that ptr has been assigned the address of the structure date.

Page 12: C programming session 09

Slide 12 of 31Ver. 1.0

Programming in CPractice: 7.3 (Contd.)

2. Consider the incomplete code of a program that is given in the following file. The code uses a function called printmonth() that displays the month name corresponding to any month number. The month number is accepted into the member month of the structure date. The blanks have to be filled in appropriately.

Microsoft Office Word 97 - 2003 Document

Page 13: C programming session 09

Slide 13 of 31Ver. 1.0

Programming in C

Solution:1. a. By using the following statement:

ptr = &date;

b. No. because date_type is not created in memory; it is only a label.c. i. &(ptr-> date) ii. ptr-> month

2. The statement to invoke printmonth() could be:printmonth(&date); /*invoke printmonth() by passing structure */The missing lines in the code for printmonth() are:printmonth(point)struct date_type *point;point is the parameter of the function since it is used within the function to access members of the structure date.

Practice: 7.3 (Contd.)

Page 14: C programming session 09

Slide 14 of 31Ver. 1.0

Programming in CArrays of Structures

Arrays of structures can also be created.It works in the same way as any other data type array.Consider the following example:

struct prod data{char prodname[8];

int no_of_sales;float tot_sale;

};An array for the preceding structure can be declared as:

struct proddata prod_field[4];

The elements of the structure can be accessed as: prod_field [0].prodnam[0];

Page 15: C programming session 09

Slide 15 of 31Ver. 1.0

Programming in CPractice: 7.4

1. Declare a structure which will contain the following data for 3 employees:

Employee code (3 characters)First name (20 characters)Middle initial (1 character)Last name (20 characters)

The employee codes to be stored in this structure are E01, E02, and E03.

2. Write the code to input for all 3 employees, and print out the initials of each (e.g. Ashraf A Kumar would be printed as AAK) along with their codes.

Page 16: C programming session 09

Slide 16 of 31Ver. 1.0

Programming in C

Solution:

Practice: 7.4 (Contd.)

Microsoft Office Word 97 - 2003 Document

Page 17: C programming session 09

Slide 17 of 31Ver. 1.0

Programming in CWorking with Structures (Contd.)

A structure can be used as a valid data type within another structure. For example, if date has been defined as:

struct date{int dd;int mm;int yy;};

The date structure can be used in another structure as:struct trans_rec{

char transno[4]; char type;

float amount; struct date tran_date; };

Page 18: C programming session 09

Slide 18 of 31Ver. 1.0

Programming in CPractice: 7.5

1. What will the following declaration do?typedef char sentence[50];sentence complex[10];

Page 19: C programming session 09

Slide 19 of 31Ver. 1.0

Programming in C

Solution: 1. The first statement defines sentence as a data type consisting

of an array of 50 characters. The second statement declares complex as a two-dimensional array, (an array of ten arrays of 50 characters each).

Practice: 7.5 (Contd.)

Page 20: C programming session 09

Slide 20 of 31Ver. 1.0

Programming in CUsing Structures in File Handling

To store data permanently, it needs to be stored in a file.Mostly, the data, to be written in the file, is a logical group of information i.e. records.These records can be stored in structure variables. Hence, you need to write structures onto a file.

Page 21: C programming session 09

Slide 21 of 31Ver. 1.0

Programming in CWriting Records onto a File Using Structures

The fwrite() function is used to write structures onto a file. The fwrite() function has the following syntax:

fwrite (constant pointer, sizeof (datatype), 1,FILE pointer);

The first parameter is a pointer to the data to be written.The second parameter is the size of data to be written.The third parameter is the number of objects or data to be written.The fourth parameter is the pointer to file.

Page 22: C programming session 09

Slide 22 of 31Ver. 1.0

Programming in CPractice: 7.6

Now that various assets of the transaction data entry program have been explained, these have to be consolidated and the entire program coded. The problem statement is repeated below.A transaction data entry program called dataent, used at the familiar Alcatel Automatics Company, has to be coded. The transaction file stores the data on transactions made by the salesmen of the company. The records consist of the following fields.

Transaction numberSalesman numberProduct number (numbered 1 to 4)Units soldValue of saleValue of sale is calculated in the program.

Page 23: C programming session 09

Slide 23 of 31Ver. 1.0

Programming in CPractice: 7.6 (Contd.)

The program should allow the user to indicate when he wants to stop data entry (i.e. it should keep accepting records until the user indicates that there are no more records).After all records have been entered, a report on the total number of sales and the total sale value for each product is to be printed in the following format (for each product). Product number : ___________________ Product name : ___________________ Total number of sales : ___________________ Total sale value : ___________________Use the structures salesrec, salesdata, prodata, and prod_field defined earlier and code for the report printing within main(). Also use the code provided on page 7.2 and 7.3 in your solution.

Page 24: C programming session 09

Slide 24 of 31Ver. 1.0

Programming in C

Solution:

Practice: 7.6 (Contd.)

Microsoft Office Word 97 - 2003 Document

Page 25: C programming session 09

Slide 25 of 31Ver. 1.0

Programming in CReading Records from Files Using Structures

The fread() function is used to read data from a stream.The fread() function has the following syntax: fread (ptr, sizeof, 1, fp);

The first parameter is a pointer to the variable where the data is to be fetched.The second parameter is the size of data to be read.The third parameter is the number of objects or data to be read.The fourth parameter is the pointer to file.

Page 26: C programming session 09

Slide 26 of 31Ver. 1.0

Programming in CPractice: 7.7

1. Is the following statement to read the first 5 records of the file trans.dat valid?fread (ptr, (sizeof(salesrec) *5), 1, fp);

If not state why and give the correct statement. No checks are to be done for an unsuccessful read.

2. Modify the above fread() statement to include an end-of-file check and also check whether the records have been read successfully. In case of end-of-file, display the message:

End-of-file encountered

and in case of other errors, display the message and exit:Unsuccessful read

In case of a successful read, display the salesman number and transaction number of each record. Give all the structure declarations required.

Page 27: C programming session 09

Slide 27 of 31Ver. 1.0

Programming in C

Solution:

Practice: 7.7 (Contd.)

Microsoft Office Word 97 - 2003 Document

Page 28: C programming session 09

Slide 28 of 31Ver. 1.0

Programming in CPractice: 7.8

1. Debug the following program called dat.c using the error listing provided in the following file.

Microsoft Office Word 97 - 2003 Document

Page 29: C programming session 09

Slide 29 of 31Ver. 1.0

Programming in C

Solution:1. The solution to this practice will be discussed in class. Work

out your answer.

Practice: 7.8 (Contd.)

Page 30: C programming session 09

Slide 30 of 31Ver. 1.0

Programming in CSummary

In this session, you learned that:Records can be defined in C by using structures.Structure members can be of the same/different data type.Memory is not reserved when a structure label is declared. A structure is created when it is declared as a struct of the same type as the structure label.A member of a structure can be accessed as follows:structure-name.member-name

A pointer to a structure can be used to pass a structure to a function. Using pointers, the structure members are accessed as follows:pointer-name->member-name

Arrays of structures can be defined and initialized (if global or static). To access any member, an index has to be used after the structure name, as follows:structure-name [index ].member-name

Page 31: C programming session 09

Slide 31 of 31Ver. 1.0

Programming in CSummary (Contd.)

The typedef statement can assign names to user-defined data types. These are treated the same way as data types provided by C.The fread() function can read records from a file into a structure/array of structures. The format of the function is:fread (pointer, size of structure, number of objects to be read, file pointer);

The fread() function returns the number of objects read from the file. It does not return any special value in case of end-of-file. The feof() function is used in conjunction with fread() to check for end-of-file.The fwrite() function can write a structure array of structures onto a file. All numeric data is written in compressed form. Usually, fread() and fwrite() are used in conjunction.