This document provides an overview of the C programming language. It discusses the origins and development of C from the B programming language. Some key features and benefits of C discussed include its low-level capabilities as a second-generation language, structured programming approach, use of functions and libraries, and support for pointers, memory allocation, recursion, and bit manipulation. The document also covers C's fundamental and derived data types, defining variables and strings, and the structure of C functions including single-level functions.
The objectives of the session include learning about the benefits and features of C language, data types, functions, input-output functions, and constructs.
C language was developed by Dennis Ritchie from the B language, which was interpreter-based, making it slow.
C is both low-level (second generation) and high-level (third generation), supporting modular programming with a structured approach. Key features include pointers, memory allocation, recursion, and bit manipulation.
C has fundamental (char, int, float) and derived data types (short int, long int, double float), each with specific memory requirements.
Definition formats for variables in C, covering data types, memory allocation, and string definitions.
Functions in C can be single-level or multiple-level, with emphasis on the main() function as the entry point and examples of both function types provided.
Character-based and string-based input-output functions such as getc(), putc(), gets(), and puts() are demonstrated with examples.
Conditional and loop constructs in C are discussed, including if..else, switch-case, and loops like while and do..while.
Introduction to operators in C including relational, logical, unary, binary, ternary, compound assignment, and increment/decrement operators.
Functions are essential for modular programming in C, supporting parameters and reusability. Explanation of call by value and call by reference is included.
Library functions for string handling in C include strcmp(), strcpy(), and strcat(). Their uses in manipulating strings are explained.
Reading and writing files using functions like fopen(), fclose(), fread(), fwrite(), and the implications of file pointers and error handling.
Structures allow for defining complex data types. The session discusses defining, using, and manipulating structures in C.Differences between high-level and low-level I/O, with functions like open(), close(), read(), write(), lseek(), and their relevance for efficient file handling.
Programming in C
Objectives
In this session, you will learn to:
Identify the benefits and features of C language
Use the data types available in C language
Identify the structure of C functions
Use input-output functions
Use constructs
Ver. 1.0 Slide 1 of 53
2.
Programming in C
Identifyingthe Benefits and Features of C Language
Ken Thompson developed a new language called B.
B language was interpreter-based, hence it was slow.
Dennis Ritchie modified B language and made it a
compiler-based language.
The modified compiler-based B language is named as C.
Ver. 1.0 Slide 2 of 53
3.
Programming in C
Cas a Second and Third Generation Language
C language:
Possesses powerful low-level features of second generation
languages.
Provides loops and constructs available in third generation
languages.
Is very powerful and flexible.
Ver. 1.0 Slide 3 of 53
4.
Programming in C
BlockStructured Language - An Advantage for Modular Programming
C language:
Offers all essentials of structured programming.
Has functions that work along with other user-developed
functions and can be used as building blocks for advanced
functions.
Offers only a handful of functions, which form the core of the
language.
Has rest of the functions available in libraries. These functions
are developed using the core functions.
Ver. 1.0 Slide 4 of 53
5.
Programming in C
Featuresof the C Language
The features that make C a widely-used language are:
Pointers: Allows reference to a memory location by a name.
Memory Allocation: Allows static as well as dynamic memory
allocation.
Recursion: Is a process in which a functions calls itself.
Bit Manipulation: Allows manipulation of data in its lowest form
of storage.
Ver. 1.0 Slide 5 of 53
6.
Programming in C
Usingthe Data Types Available in C language
The types of data structures provided by C can be classified
under the following categories:
Fundamental data types
Derived data types
Ver. 1.0 Slide 6 of 53
7.
Programming in C
FundamentalData Types
Fundamental Data Types:
Are the data types at the lowest level.
Are used for actual data representation in the memory.
Are the base for other data types.
Have machine dependent storage requirement.
Are of the following three types:
char
int
float
Ver. 1.0 Slide 7 of 53
8.
Programming in C
FundamentalData Types (Contd.)
The storage requirement for fundamental data types can be
represented with the help of the following table.
Data Number of bytes on a Minimum Maximum
32-byte machine
char 1 -128 127
int 4 -2^31 (2^31) - 1
float 4 6 digits of precision 6 digits of precision
Ver. 1.0 Slide 8 of 53
9.
Programming in C
DerivedData Types
Derived Data Types:
Are represented in memory as fundamental data type.
Some derived data types are:
short int
long int
double float
Ver. 1.0 Slide 9 of 53
10.
Programming in C
DerivedData Types (Contd.)
The storage requirement for derived data types can be
represented with the help of the following table.
Data Number of bytes Minimum Maximum
on a 32-byte
machine
short int 2 -2^15 (2^15) - 1
long int 4 -2^31 (2^31) - 1
double float 8 12 digits of precision 6 digits of
precision
Ver. 1.0 Slide 10 of 53
11.
Programming in C
DefiningData
The syntax for defining data is:
[data type] [variable name],...;
Declaration is done in the beginning of a function.
Definition for various data types is shown in the following
table.
Data definition Data type Memory defined Size (bytes) Value assigned
char a, c; char a 1 -
c 1 -
char a = 'Z'; char a 1 Z
int count; int count 4 -
int a, count =10; int a 4 -
count 4 10
float fnum; float fnum 4 -
float fnum1, float fnum1 4 -
fnum2 = 93.63; fnum2 4 93.63
Ver. 1.0 Slide 11 of 53
12.
Programming in C
Practice:1.1
Write the appropriate definitions for defining the following
variables:
1. num to store integers.
2. chr to store a character and assign the character Z to it.
3. num to store a number and assign the value 8.93 to it.
4. i, j to store integers and assign the value 0 to j.
Ver. 1.0 Slide 12 of 53
13.
Programming in C
Practice:1.1 (Contd.)
Solution:
1. int num;
2. char chr=‘Z‘;
3. float num = 8.93;
4. int i, j=0;
Ver. 1.0 Slide 13 of 53
14.
Programming in C
DefiningData (Contd.)
Defining Strings:
Syntax:
char (variable) [(number of bytes)];
Here number of bytes is one more than the number of
characters to store.
To define a memory location of 10 bytes or to store 9 valid
characters, the string will be defined as follows:
char string [10];
Ver. 1.0 Slide 14 of 53
15.
Programming in C
Practice:1.2
Write the appropriate definitions for defining the following
strings:
1. addrs to store 30 characters.
2. head to store 14 characters.
Ver. 1.0 Slide 15 of 53
16.
Programming in C
Practice:1.2 (Contd.)
Solution:
1. char addrs[31];
2. char head[15];
Ver. 1.0 Slide 16 of 53
17.
Programming in C
Identifyingthe Structure of C Functions
In C language, the functions can be categorized in the
following categories:
Single-level functions
Multiple-level functions
Ver. 1.0 Slide 17 of 53
18.
Programming in C
SingleLevel Functions
Single Level Functions:
Consider the following single-level function:
main()
{
/*print a message*/
printf("Welcome to C");
}
In the preceding function:
main(): Is the first function to be executed.
(): Are used for passing parameters to a function.
{}: Are used to mark the beginning and end of a function. These
are mandatory in all functions.
/* */: Is used for documenting various parts of a function.
Ver. 1.0 Slide 18 of 53
19.
Programming in C
SingleLevel Functions (Contd.)
Semicolon (;): Is used for marking the end of an executable
line.
printf(): Is a C function for printing (displaying) constant or
variable data.
Ver. 1.0 Slide 19 of 53
20.
Programming in C
Practice:1.3
Identify any erroneous or missing component(s) in the
following functions:
1. man()
{
printf("This function seems to be okay")
}
2. man()
{
/*print a line*/
printf("This function is perfect―;
}
Ver. 1.0 Slide 20 of 53
21.
Programming in C
Practice:1.3 (Contd.)
3. main()
}
printf("This has got to be right");
{
4. main()
{
This is a perfect comment line
printf("Is it okay?");
}
Ver. 1.0 Slide 21 of 53
22.
Programming in C
Practice:1.3 (Contd.)
Solution:
1. man instead of main() and semi-colon missing at the end of
the printf() function.
2. mam instead of main() and ‘)’ missing at the end of the
printf() function.
3. ‘}’ instead of ‘{‘ for marking the beginning of the function and
‘{’ instead of ‘}‘ for marking the end of the function.
4. Comment line should be enclose between /* and */.
Ver. 1.0 Slide 22 of 53
23.
Programming in C
MultipleLevel Functions
The following example shows functions at multiple
levels - one being called by another:
main ()
{
/* print a message */
printf ("Welcome to C.");
disp_msg ();
printf ("for good learning");
}
disp_msg ()
{
/* print another message */
printf ("All the best");
}
Ver. 1.0 Slide 23 of 53
24.
Programming in C
MultipleLevel Functions (Contd.)
The output of the preceding program is:
Welcome to C. All the best for good learning.
In the preceding program:
main(): Is the first function to be executed.
disp_msg(): Is a programmer-defined function that can be
independently called by any other function.
(): Are used for passing values to functions, depending on
whether the receiving function is expecting any parameter.
Semicolon (;): Is used to terminate executable lines.
Ver. 1.0 Slide 24 of 53
25.
Programming in C
Practice:1.4
Identify any erroneous or missing component(s) in the
following functions:
a. print_msg()
{ main();
printf(―bye‖);
}
main()
{ printf(―This is the main function‖);}
b. main()
{ /*call another function*/
dis_error();
}
disp_err();
{ printf(―Error in function‖);}
Ver. 1.0 Slide 25 of 53
26.
Programming in C
Practice:1.4 (Contd.)
Solution:
a. main() is always the first function to be executed. Further
execution of the program depends on functions invoked from
main(). Here, after executing printf(), the program
terminates as no other function is invoked. The function
print_msg is not invoked, hence it is not executed.
b. The two functions, dis_error() and disp_error, are not
the same because the function names are different.
Ver. 1.0 Slide 26 of 53
27.
Programming in C
Usingthe Input-Output Functions
The C environment and the input and output operations are
shown in the following figure.
Standard Input Device (stdin) Standard Output Device (stdout)
C Environment
Standard Error Device (stderr)
Ver. 1.0 Slide 27 of 53
28.
Programming in C
Usingthe Input-Output Functions (Contd.)
These are assumed to be always linked to the C
environment:
stdin - refers to keyboard
stdin - refers to keyboard
stdout - refers to VDU
stderr - refers to VDU
Input and output takes place as a stream of characters.
Each device is linked to a buffer through which the flow of
characters takes place.
After an input operation from the standard input device, care
must be taken to clear input buffer.
Ver. 1.0 Slide 28 of 53
29.
Programming in C
Character-BasedInput-Output Functions
Character-Based Input-Output Functions are:
getc()
putc()
getchar()
putchar()
The following example uses the getc() and putc()
functions:
# include < stdio.h>
/* function to accept and display a character*/
main ()
{char alph;
alph = getc (stdin); /* accept a character */
fflush (stdin); /* clear the stdin buffer*/
putc (alph, stdout); /* display a character*/
}
Ver. 1.0 Slide 29 of 53
30.
Programming in C
Character-BasedInput-Output Functions (Contd.)
The following example uses the getchar() and
putchar() functions:
# include < stdio.h >
/* function to input and display a character using the
function getchar() */
main () {
char c;
c = getchar ();
fflush (stdin); /* clear the buffer */
putchar (c);
}
Ver. 1.0 Slide 30 of 53
31.
Programming in C
Practice:1.5
1. Write a function to input a character and display the
character input twice.
Ver. 1.0 Slide 31 of 53
Programming in C
Practice:1.6
1. Write a function to accept and store two characters in
different memory locations, and to display them one after
the other using the functions getchar() and
putchar().
Ver. 1.0 Slide 33 of 53
34.
Programming in C
Practice:1.6 (Contd.)
Solution:
/* function to accept and display two characters*/
#include<stdio.h>
main()
{
char a, b;
a=getchar();
fflush(stdin);
b=getchar();
fflush(stdin);
putchar(a);
putchar(b);
}
Ver. 1.0 Slide 34 of 53
35.
Programming in C
String-BasedInput-Output Functions
String-based input-output functions are:
gets()
puts()
The following example uses the gets() and puts()
functions:
# include < stdio.h >
/* function to accept and displaying */
main ()
{ char in_str {21}; /* display prompt */
puts ("Enter a String of max 20 characters");
gets (in_str); /* accept string */
fflush (stdin); /* clear the buffer */
puts (in_str); /* display input string */
}
Ver. 1.0 Slide 35 of 53
36.
Programming in C
Practice:1.7
1. Write a function that prompts for and accepts a name with a
maximum of 25 characters, and displays the following
message.
Hello. How are you?
(name)
2. Write a function that prompts for a name (up to 20
characters) and address (up to 30 characters) and accepts
them one at a time. Finally, the name and address are
displayed in the following way.
Your name is:
(name)
Your address is:
(address)
Ver. 1.0 Slide 36 of 53
Programming in C
UsingConstructs
There are two types of constructs in C language:
Conditional constructs
Loop constructs
Ver. 1.0 Slide 38 of 53
39.
Programming in C
ConditionalConstructs
Conditional Constructs:
Requires relation operators as in other programming language
with a slight change in symbols used for relational operators.
The two types of conditional constructs in C are:
if..else construct
switch…case construct
Ver. 1.0 Slide 39 of 53
40.
Programming in C
ConditionalConstructs (Contd.)
The Syntax of the if..else construct is as follows:
if (condition)
{
statement 1 ;
statement 2 ;
:
}
else
{
statement 1 ;
statement 2 ;
:
}
Ver. 1.0 Slide 40 of 53
41.
Programming in C
Practice:1.8
1. Write a function that accepts one-character grade code, and
depending on what grade is input, display the HRA
percentage according to the following table.
Grade HRA %
A 45%
B 40%
C 30%
D 25%
Ver. 1.0 Slide 41 of 53
42.
Programming in C
Practice:1.8 (Contd.)
Identify errors, if any, in the following function:
#include<stdio.h>
/*function to check if y or n is input*/
main()
{
char yn;
puts("Enter y or n for yes/no");
yn = getchar();
fflush(stdin);
if(yn=‘y‘)
puts("You entered y");
else if(yn=‗n')
puts("You entered n");
else
puts("Invalid input");
}
Ver. 1.0 Slide 42 of 53
Programming in C
ConditionalConstructs (Contd.)
Syntax of switch…case construct:
switch (variable)
{
case 1 :
statement1 ;
break ;
case 2 :
statement 2 ;
:
:
break;
default :
statement
}
Ver. 1.0 Slide 44 of 53
45.
Programming in C
Practice:1.9
Write a function to display the following menu and accept a
choice number. If an invalid choice is entered then an
appropriate error message must be displayed, else the
choice number entered must be displayed.
Menu
1. Create a directory
2. Delete a directory
3. Show a directory
4. Exit
Your choice:
Ver. 1.0 Slide 45 of 53
Programming in C
LoopConstructs
The two types of conditional constructs in C are:
while loop construct.
do..while construct.
The while loop construct has the following syntax:
while (condition in true)
{
statement 1 ; loop
statement 2 ; body
}
Used to iterate a set of instructions (the loop body) as long as
the specified condition is true.
Ver. 1.0 Slide 47 of 53
48.
Programming in C
LoopConstructs (Contd.)
The do..while loop construct:
The do..while loop is similar to the while loop, except that the
condition is checked after execution of the body.
The do..while loop is executed at least once.
The following figure shows the difference between the while loop
and the do...while loop.
while do while
False Execute
Evaluate
Body of
Condition
Loop
True
Execute False
Body of Evaluate
Loop Condition
True
Ver. 1.0 Slide 48 of 53
49.
Programming in C
Practice:1.10
1. Write a function to accept characters from the keyboard until
the character ‘!’ is input, and to display whether the total
number of non-vowel characters entered is more than, less
than, or equal to the total number of vowels entered.
Ver. 1.0 Slide 49 of 53
Programming in C
Summary
In this session, you learned that:
C language was developed by Ken Thompson and Dennis
Ritchie.
C language combines the features of second and third
generation languages.
C language is a block structured language.
C language has various features that make it a widely-used
language. Some of the important features are:
Pointers
Memory Allocation
Recursion
Bit-manipulation
Ver. 1.0 Slide 51 of 53
52.
Programming in C
Summary(Contd.)
The types of data structures provided by C can be classified
under the following categories:
Fundamental data types: Include the data types, which are used
for actual data representation in the memory.
Derived data types: Are based on fundamental data types.
Fundamental data types:
char, int, and float
Some of the derived data types are:
short int, long int, and double float
Definition of memory for any data, both fundamental and
derived data types, is done in the following format:
[data type] [variable name],...;
Ver. 1.0 Slide 52 of 53
53.
Programming in C
Summary(Contd.)
In C language, the functions can be categorized in the
following categories:
Single-level functions
Multiple-level functions
For standard input-output operations, the C environment uses
stdin, stdout, and stderr as references for accessing the
devices.
There are two types of constructs in C language:
Conditional constructs
Loop constructs
Ver. 1.0 Slide 53 of 53
54.
Programming in C
Objectives
In this session, you will learn to:
Work with operators
Use loops
Use formatted input-output functions
Ver. 1.0 Slide 54 of 53
55.
Programming in C
Workingwith Operators
An operator:
Is a symbol used to command the computer to do
mathematical or logical manipulations.
Operates on data and variables.
C has a rich set of operators, which can be classified into
following various categories:
Relational operators
Logical operators
Unary operators
Binary operators
Ternary operator
Compound assignment operators
Increment/Decrement operators
Ver. 1.0 Slide 55 of 53
56.
Programming in C
Practice:2.1
Write a function that accepts either y or n only as input. For
any other character input, an appropriate error message
should be displayed and the input is accepted again.
Ver. 1.0 Slide 56 of 53
57.
Programming in C
Practice:2.1 (Contd.)
Solution:
#include<stdio.h>
main()
{ char yn;
do {
puts(―Enter y/n (Yes/No)‖);
yn=getchar ();
fflush (stdin);
if(yn!=‘y‘ && yn!=‘n‘)
puts(―Invalid input‖);
}
while(yn!=‘y‘ && yn!=‘n‘);
}
Ver. 1.0 Slide 57 of 53
58.
Programming in C
UnaryOperators
Unary Operators:
Operates on a single operand.
Prefixed to an integer constant.
Tells the compiler to reverse the sign by subtracting the value
(or variable) from zero.
Has the same effect as the – sign, which is used to indicate a
number less than zero, for example -12.
Ver. 1.0 Slide 58 of 53
59.
Programming in C
Practice:2.2
Which of the following are valid?
1. valuea=-12; /* valuea is int* /
2. valuea = - valueb – 12 /* valuea and valueb
both are int */
Ver. 1.0 Slide 59 of 53
Programming in C
BinaryOperators
Binary Operators:
Operate on two operands.
Are as follows:
+ (add)
- (subtract)
* (multiply)
/ (divide)
% (modulo)
Ver. 1.0 Slide 61 of 53
62.
Programming in C
Practice:2.3
In the following set of statements:
char ch;
ch=‘S‘;
ch=ch+‘a‘-‗A‘; /*statement A*/
ch=ch+‘A‘-‗a‘; /*statement B*/
What will be the value of ch after:
1. Statement A is executed?
2. Statement B is executed?
Ver. 1.0 Slide 62 of 53
63.
Programming in C
Practice:2.3 (Contd.)
Solution:
1. ch is equal to s. Note that ‘a’-‘A’ gives 32 after statement 1 is
executed.
2. ch is back to S after statement 2 is executed.
Ver. 1.0 Slide 63 of 53
64.
Programming in C
BinaryOperators (Contd.)
There are some set or rules, if followed, would prevent
unexpected results, at the time of execution of programs:
Any operand of type char is converted to int.
All floats are converted to doubles.
If either operand is double, the other is converted to a
double, giving a double result.
Ver. 1.0 Slide 64 of 53
65.
Programming in C
Practice:2.4
1. In which of the following assignments is there no loss of
data? (i is an int, f a float, and d a double)
i=d;
d=f;
f=d;
i=f+d;
d=i+f;
2. Is type casting necessary in the following example?
int i,j;
float f;
double d;
d=f+(float) i + j;
Ver. 1.0 Slide 65 of 53
66.
Programming in C
Practice:2.4 (Contd.)
Solution:
1. a. Loss of data. int set equal to a double.
b. No loss of data. double set equal to a float.
c. Loss of data. float set equal to a double.
d. Loss of data. Right-hand result is a double while left-hand
side is just an int.
e. No loss of data. Right-hand result is a double and
left-hand side is also a double.
2. Not necessary. The ints will automatically be converted to
doubles (following the conversion of the float to a double).
Ver. 1.0 Slide 66 of 53
67.
Programming in C
TernaryOperator
Ternary Operator:
Is a shorthand method for writing if.else conditional
construct.
Helps in reducing lines of code.
Has the following form for the expression using the ternary
operator:
(test-expression) ? T-expression : F-expression;
Ver. 1.0 Slide 67 of 53
68.
Programming in C
TernaryOperator (Contd.)
Consider the following example:
if(condition)
{ Statements if condition is true }
else
{ Statements if condition is false }
Can be rewritten using the shorthand operator as follows:
larger_of_the_two = ( x > y ) ? x : y;
Ver. 1.0 Slide 68 of 53
69.
Programming in C
Practice:2.5
1. State whether True or False:
In the general form of an expression that uses a ternary
operator, the test expression will be checked. If it is true, the T-
expression will be evaluated, otherwise the F-expression will be
evaluated.
2. What will the following statement do?
quotient = (b==0) ? 0 : (a/b); /*a, b, and
quotient are ints*/
3. Can the preceding statement be written as follows?
quotient = (b) ? (a/b) : 0;
4. What will the following statement do?
always_negative = (j>0) ? j : (-j);
Ver. 1.0 Slide 69 of 53
70.
Programming in C
Practice:2.5 (Contd.)
Solution:
1. True.
2. If b is non-zero, it will determine the quotient of a and b. If b
equals zero, quotient is set to 0.
3. Yes. Note that if b is non-zero, the test expression (b)
evaluates to true and hence quotient is set to (a/b).
4. The variable always_negative will always take on a non-
negative value, i.e. it will be assigned the absolute value of j.
The name of the variable always_negative is just a red
herring. Remember that self-documenting variable names will
help in writing programs that are readable. Note the unary
operator (-j).
Ver. 1.0 Slide 70 of 53
71.
Programming in C
CompoundAssignment Operators
Compound Assignment Operators:
Are useful especially when long variable names are used.
Has the following general form:
left-value op= right-expression;
Here op can be either + (add), - (subtract, * (multiply), /
(divide), and % (modulo).
Consider the following example:
a_very_long_identifier=a_very_long_identifier + 2;
It can be written as:
a_very_long_identifier += 2;
Ver. 1.0 Slide 71 of 53
72.
Programming in C
Increment/ Decrement Operators
Increment / Decrement Operators:
Are used to increase or decrease the value of a variable by 1.
Has the following two forms:
The ++ (two plus symbols without a space), called the increment
operator while that in ++ before the variable is called the pre
increment operator and after the variable is called the post
increment operator.
The -- (two minus symbols without a space), called the decrement
operator while that in ++ before the variable is called the pre
decrement operator and after the variable is called the post
increment operator.
Ver. 1.0 Slide 72 of 53
73.
Programming in C
Increment/ Decrement Operators (Contd.)
Consider the following code snippet:
total = sum++; /* statement A */
total = ++sum; /* statement B */
The first statement is equivalent to:
total = sum; sum = sum + 1;
While the second is the same as:
sum = sum + 1; total = sum;
Ver. 1.0 Slide 73 of 53
74.
Programming in C
Practice:2.6
1. Consider the following code snippet:
int sum = 3, total = 5;
total = sum++;
total = ++sum; /*statement A */
total = sum—
total = --sum; /*statement B */
What will be the values of total and sum after:
a. statement A is executed?
b. statement B is executed?
Ver. 1.0 Slide 74 of 53
75.
Programming in C
Practice:2.6 (Contd.)
2. State whether True or False:
The following statement:
for(i = 0; i< 100); i = i + 1)
{
Some statements
}
can be written as:
for (i = 0; i < 100; i++)
{
Some statements
}
Ver. 1.0 Slide 75 of 53
76.
Programming in C
Practice:2.6 (Contd.)
3. State whether True or False:
The for statement in #2 can also be written as:
fori = 0; i < 100; ++i)/*Note: ++i and not i++*/
{
Some statements
}
4. Write a program, which reads in a year and reports on
whether it is a leap year or not (centuries should also be
considered).
Ver. 1.0 Slide 76 of 53
77.
Programming in C
Practice:2.6 (Contd.)
Solution:
1. total=5, sum=5
total=3, sum=3
quite a complicated way of reducing total by 2.
2. True. i+1 is equivalent to i++.
3. True. i+1 is equivalent to 1+i.
4.
Ver. 1.0 Slide 77 of 53
78.
Programming in C
UsingLoops
The while and do…while looping constructs are generally
used in situations where the number of execution of the loop
is not known.
The for loop construct is used when the number of
execution of the loop is known.
Ver. 1.0 Slide 78 of 53
79.
Programming in C
Thefor Loop Construct
The for loop construct:
Has three components in the loop control:
Initialization
Condition
Re-initialization (increment/decrement)
Has the following sequence of execution:
Initialization
Evaluation of loop condition
Body of loop
Re-initialization
Ver. 1.0 Slide 79 of 53
80.
Programming in C
Thefor Loop Construct (Contd.)
The sequence of execution of a complete for loop construct
is shown in the following figure.
INITIALIZATION
FALSE
EVALUATE
CONDITION
TRUE
BODY OF LOOP
REINITIALIZATION
Ver. 1.0 Slide 80 of 53
81.
Programming in C
Thefor Loop Construct (Contd.)
In a for loop construct:
Multiple initializations and/or multiple re- initializations, are
separated by commas.
Multiple conditions are specified using logical operators.
Ver. 1.0 Slide 81 of 53
82.
Programming in C
Practice:2.7
1. Write a function to accept twenty characters from the
character set, and to display whether the number of lower-
case characters is greater than, less than, or equal to
number of upper-case characters. Display an error message
if the input is not an alphabet.
2. Modify the function to accept characters endlessly until the
character ! is input from keyboard.
Ver. 1.0 Slide 82 of 53
Programming in C
Controllingthe Loop Execution
At times there is a need to exit from a loop before the loop
condition is re-evaluated after iteration.
To exit from loop control, break and continue statements
are used.
Ver. 1.0 Slide 84 of 53
85.
Programming in C
Practice:2.8
Write a function, which accepts numbers until 0 is entered or
10 numbers have been accepted. The function prints the
total number of entries, the number of positive entries, and
the sum of all the positive numbers.
Ver. 1.0 Slide 85 of 53
Programming in C
UsingFormatted Input-Output Functions
C provides the following functions for formatted input-output:
printf()
scanf()
Ver. 1.0 Slide 87 of 53
88.
Programming in C
FormattedOutput
Syntax of the formatted output function printf() is:
printf (format, data1, data 2, ….);
Consider the following example:
printf(―%c‖, inp);
The character specified after % is called a conversion
character.
The conversion character allows one data type to be
converted to another type and printed.
Ver. 1.0 Slide 88 of 53
89.
Programming in C
FormattedOutput (Contd.)
The conversion characters and their meanings are shown in
the following table.
Character Meaning
d the data is converted to decimal (integer)
c the data is taken as a character
s the data is a string and characters from
the string are printed until a NULL
character is reached
f the data is output as a double or float with
a default precision to 6
Ver. 1.0 Slide 89 of 53
90.
Programming in C
Practice:2.9
What is the output of the statement:
printf(―Integer is: %d; Alphabet is: %cn‖,
inum, inp);
where inum contains 15 and inp contains Z.
Ver. 1.0 Slide 90 of 53
Programming in C
FormattedInput
The scanf() function is used for formatted input.
The syntax for the scanf() functions is as follows:
scanf (format, data1, data2……);
Here
format - The format-specification string
data1, data2 - Data names where the input data
is to be stored as per the
format-specification string
Ver. 1.0 Slide 92 of 53
93.
Programming in C
FormattedInput (Contd.)
The format-specification string in scanf() consists of:
Blanks, tabs, (also called white space characters).
New line which are ignored.
Conversion consisting of %, an optional number specification
specifying the width and a conversion character.
While accepting strings using scanf(), a space is
considered as a string terminator.
Ver. 1.0 Slide 93 of 53
94.
Programming in C
Practice:2.10
Write a function to accept and display the element number
and the weight of a Proton. The element number is an
integer and weight is fractional.
Ver. 1.0 Slide 94 of 53
95.
Programming in C
Practice:2.10 (Contd.)
Solution:
#include<stdio.h>
main()
{
int e_num;
float e_wt;
printf(―Enter the Element No. and Weight of a
Protonn‖);
scanf(―%d %f‖, &e_num, &e_wt);
fflush(stdin);
printf(―The Element No. is: ―, e_num);
printf(―The weight of a Proton is: %fn―,
e_wt);
}
Ver. 1.0 Slide 95 of 53
96.
Programming in C
Practice:2.11
Write a function to input a string of continuous characters
with no white space as part of the input. The function should
assign the input to variables of the types specified in the
following table.
Position of character from Number of Type of argument to
start of string characters assign
1 2 int
3 4 float
7 2 char (string)
9 3 int
The function should also print out each of the assigned data
items in separate lines.
Ver. 1.0 Slide 96 of 53
97.
Programming in C
Practice:2.11
Solution:
#include<stdio.h>
main()
{
int i,j;
char str[3];
float fnum;
printf(―Enter a string of 11 chrsn‖); /*why
11: because 11 is the total length of */
/*input.*/
scanf(―%2d %4f %2s %3d‖,&i, &fnum, str, &j);
fflush(stdin);
printf(―%2dn %4fn %2sn %3dn‖, i, fnum,
str, j);
}
Ver. 1.0 Slide 97 of 53
98.
Programming in C
Summary
In this session, you learned that:
An operator is a symbol that is used to command the computer
to do mathematical or logical manipulations.
The operators in C language are classified into the following
categories:
Logical operators
Unary operators
Binary operators
Ternary operator
Compound assignment operators
Increment/Decrement operators
Ver. 1.0 Slide 98 of 53
99.
Programming in C
Summary(Contd.)
The logical operators of C and their notations are as follows.
Operator Notation
OR ||
AND &&
NOT !
The unary operator prefixed to an integer constant or variable
tells the compiler to reverse the sign by subtracting the value
or variable from zero.
Binary operators in C language are + (add), - (subtract), *
(multiply), / (divide), and % (modulo).
Ternary operator offers a shorthand way of writing the
commonly used if…else construct.
Ver. 1.0 Slide 99 of 53
100.
Programming in C
Summary(Contd.)
The syntax for using the ternary operator is:
(test-expression) ? T-expression : F-expression;
Compound assignment operators simplify the statements.
Increment / Decrement operators are used to
increment/decrement a variable by 1.
A for loop is used when the number of execution of the loop
is known.
The components of a for loop construct are:
initialization
loop condition
reinitialization (increment/decrement)
Ver. 1.0 Slide 100 of 53
101.
Programming in C
Summary(Contd.)
The sequence of execution of a complete for loop is:
initialization
evaluation of the loop condition
the body of the loop
reinitialization
The break and continue statements are used to exit from
loop control.
The break statement is used to exit from all loop constructs
(while, do...while, and for) and switch...case
statements.
The continue statement is used to skip all subsequent
instructions and brings the control back to the loop.
The function printf() is used for formatted output to
standard output based on a format specification.
Ver. 1.0 Slide 101 of 53
102.
Programming in C
Summary(Contd.)
The syntax of the function printf() is:
printf(format, datal, data 2,,..);
The function scanf() is used for formatted input from
standard input and provides many of the conversion facilities of
the function printf().
The syntax of the function scanf() is:
scanf (format, datal, data2, ...);
Ver. 1.0 Slide 102 of 53
103.
Programming in C
Objectives
In this session, you will do the practice questions of Chapter
1 and Chapter 2.
Ver. 1.0 Slide 103 of 53
104.
Programming in C
Chapter1
1. Write a function to accept a character and display it 40
times.
2. Write a function that accepts a number from 0 to 9, along
with a string. The string should then be displayed the
number of times specified.
Ver. 1.0 Slide 104 of 53
105.
Programming in C
Chapter2
1. Write a for loop, which will produce the following output
(Hint: use two nested for loops):
1
22
333
4444
55555
2. Create a C program, which calculates the triangular number
of the user’s request, read from the keyboard using scanf().
A triangular number is the sum of the preceding
numbers, so the triangular number 7 has the value of
7+6+5+4+3+2+1 (same as a factorial in mathematics, for
example, factorial of 7 ---- !7).
Ver. 1.0 Slide 105 of 53
106.
Programming in C
Chapter2
3. Create a C program to check whether the number entered
by user is even or odd.
Ver. 1.0 Slide 106 of 53
107.
Programming in C
Objectives
In this session, you will learn to:
Work with arrays
Appreciate preprocessor directives
Ver. 1.0 Slide 107 of 53
108.
Programming in C
Workingwith Arrays
Arrays:
Are a group of similar objects.
Can be defined as a contiguous area in memory.
Can be referred to by a common name.
Has a unique identifier for each element, called as a subscript
or an index.
Can be categorized as:
One-dimensional/Single-dimensional arrays
Multidimensional arrays
Ver. 1.0 Slide 108 of 53
109.
Programming in C
One-DimensionalArrays
The syntax for declaring a one-dimensional array is:
type arrayname[n];
For Example:
char string [11];
Defines a character array named string to store 10
characters.
string[0] to string[9] are for valid characters.
string[10] for the string-terminator character, 0 (NULL).
Similarly:
int numbers [11];
Defines an integer type array called numbers to store 11
integers.
Integers are stored in numbers[0] to numbers[10].
Ver. 1.0 Slide 109 of 53
110.
Programming in C
Practice:3.1
1. Write the array definition statements for storing the following
data:
a. Ten amounts with paisa.
b. Five ages to be stored in years and six non-fractional
quantities.
c. A thirty character long name.
Ver. 1.0 Slide 110 of 53
111.
Programming in C
Practice:3.1 (Contd.)
Solution:
a. float fnum[10];
b. int age[5], qty[6];
c. char name[31];
Ver. 1.0 Slide 111 of 53
112.
Programming in C
One-DimensionalArrays (Contd.)
Initializing Arrays:
An array can be initialized, when declared.
Initialization at the time of declaration is possible only outside a
function unless it is declared static.
Direct initialization is possible in the following ways:
char strl[7]={‗E‘,‘X‘,‘O‘,‘D‘,‘U‘,‘S‘,‘0‘};
char str2[7]={"EXODUS"};
In the first case, individual elements have been moved into the
array. Therefore, it is essential that the string terminator be
specified explicitly. While in the second case, the string
terminator gets attached automatically because a string has
been assigned.
Ver. 1.0 Slide 112 of 53
113.
Programming in C
Practice:3.2
1. Write a function that stores the alphabets A to Z in an array
by applying arithmetic on ASCII codes, given that the ASCII
code of character A is 65. The function should display the
string also.
2. In a file-delete utility program for 256 files the user response
to whether a file is to be deleted or not is to be stored in an
array as Y for yes and N for no for all files. By default the
user response should be N for all files. Write a function that
sets up an array and accepts user-responses.
Ver. 1.0 Slide 113 of 53
Programming in C
One-DimensionalArrays (Contd.)
Array elements:
Are referenced by using subscripts.
Are integers, therefore array manipulation is possible through
the use of variables.
Ver. 1.0 Slide 115 of 53
116.
Programming in C
Practice:3.3
1. Write a function to convert a character string into
lower-case.
2. Write a function to compare two strings and to print the
larger one. The strings may be compared in terms of ASCII
code of each character in the strings.
Ver. 1.0 Slide 116 of 53
Programming in C
Practice:3.4
1. Write a function to accept up to 25 numbers and to display
the highest and lowest numbers along with all the numbers.
Ver. 1.0 Slide 118 of 53
Programming in C
One-DimensionalArrays (Contd.)
Array Addressing:
To arrive at a particular element, the following formula is
applied:
Starting address + ( Offset number * Scaling
factor) of the array
Here,
Scaling factor is the number of bytes of storage space required
by the specific data type.
Offset number * Scaling factor gives the number of bytes
to be added to the starting address of the array to get to a desired
element.
Ver. 1.0 Slide 120 of 53
121.
Programming in C
Practice:3.5
1. Write a program in C to extract a substring from a specified
position containing a specified number of characters from
an input string.
Ver. 1.0 Slide 121 of 53
Programming in C
MultidimensionalArrays
C also supports multidimensional arrays.
A two-dimensional array is the simplest form of the
multidimensional array.
A two-dimensional array is an array of one-dimensional
arrays.
A two-dimensional array is also known as a two-d array.
A two-d array is declared as follows:
type arrayname[Row][Col];
Rules for initializing a two-d array are same as that of a
one-dimensional array.
The row subscript may be left blank for a more flexible
declaration.
Ver. 1.0 Slide 123 of 53
124.
Programming in C
Practice:3.6
1. State whether True or False:
If the number of salesmen is 5, then the declaration of the
two-dimensional array and its initialization to zero would be:
int s_p_array [5][4] = {
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
};
Ver. 1.0 Slide 124 of 53
125.
Programming in C
Practice:3.6 (Contd.)
Solution:
1. False. Note that since there are 5 salesman with 4
products, there should be 5 sets of {}, each containing four
zeroes. The correct initialization is:
int s_p_array [5][4] = {
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
};
Ver. 1.0 Slide 125 of 53
126.
Programming in C
MultidimensionalArrays (Contd.)
Two-Dimensional Character Arrays:
Are typically used to create an array of strings.
Use two subscripts, one for row and the other for column.
Are declared as:
char err_msg [row] [col];
Can be initialized at the time of declaration.
Ver. 1.0 Slide 126 of 53
127.
Programming in C
Practice:3.7
1. Based on the books array, predict the output of the following
commands:
a. printf(―%c‖, books[2][5]);
b. printf(―%s‖,books[3]);
c. printf(―%d‖,books[4][7]);
Ver. 1.0 Slide 127 of 53
128.
Programming in C
Practice:3.7 (Contd.)
Solution:
a. M
b. Birds, Beasts, and Relatives
c. 97
Ver. 1.0 Slide 128 of 53
129.
Programming in C
Practice:3.8
1. Write the program segment to calculate the class average
across students in each subject.
2. Assume that the data exists in the arrays and averages
have been calculated. Write program segments, which will
allow the user to query on the arrays to:
a. Display Student Names and Average Marks.
b. Display Subjects and Class Averages.
Ver. 1.0 Slide 129 of 53
130.
Programming in C
Practice:3.8 (Contd.)
c. Display Marks of a specific Student in a specific Subject.
d. Display Subject wise marks of all students whose average is
above 80.
For each option the following action needs to be taken.
OPTION ACTION
a. Display each student's name along with his average marks.
b. Display each subject along with class average on the subject.
c. Display list of students and list of subjects. Allow the user to
choose one from each. Based on the numbers chosen, display
the appropriate marks. Remember, subscripting in C starts from
zero.
d. Check the average of each student. Wherever average exceeds
80, display the student name and the subject name and marks
in each subject.
Ver. 1.0 Slide 130 of 53
Programming in C
AppreciatingPreprocessor Directives
Preprocessor directives:
Are instructions to the compiler in the source code of a C
program.
Are not actually a part of the C language.
Expand the scope of the C programming environment.
Begin with a #.
#include is also a preprocessor directive.
#include instructs the compiler to include the specified
source file into the one which contains the #include
directive.
#define defines an identifier and a string constant that will
be substituted for the identifier each time it is encountered in
the file.
Ver. 1.0 Slide 132 of 53
133.
Programming in C
AppreciatingPreprocessor Directives (Contd.)
It helps in reducing the chances of inconsistency within the
program and also makes the program easy to modify.
Consider the following macro definition:
#define TRUE 1
No semicolon is required after the statement.
Every time the compiler encounters the string TRUE in the
program, it substitutes it with the value 1.
No text substitution will occur if the identifier is enclosed
within quotes.
Ver. 1.0 Slide 133 of 53
134.
Programming in C
Summary
In this session, you learned that:
An array can be defined as a contiguous area in memory,
which can be referred to by a common name.
In C, arrays can be categorized as:
One-dimensional/Single-dimensional arrays
Multidimensional arrays
The syntax for declaring a one-dimensional array is as follows:
type arrayname[n];
Array elements are referenced by using subscripts.
The last element in a character array is reserved to store the
string terminator character 0 (NULL).
An array can be initialized, when declared, by specifying the
values of some or all of its elements.
Initialization can also be done inside the function, after the
array has been declared, by accepting the values.
Ver. 1.0 Slide 134 of 53
135.
Programming in C
Summary(Contd.)
To arrive at the particular element, the following formula is
applied:
Starting address + ( Offset number * Scaling
factor) of the array
C supports multidimensional arrays.
The simplest form of the multidimensional array is the
two-dimensional (two-d) array.
The general form of declaration of the two-d array would be:
type arrayname[x][y];
Two-dimensional integer arrays are very much like
one-dimensional integer arrays, the only difference being that
two-dimensional arrays have two indices.
Initialization of two-dimensional arrays can be done at the time
of declaration itself.
A better way to initialize a two-dimensional array is using the
for statement.
Ver. 1.0 Slide 135 of 53
136.
Programming in C
Summary(Contd.)
Two-dimensional character arrays are declared in the same
way as two-dimensional integer arrays:
The first index specifies the number of strings.
The second index specifies the length of the longest string plus
one.
Initialization can be done along with declaration, if done
outside main().
Preprocessor directives are not actually a part of the C
language; they expand the scope of the C programming
environment.
The preprocessor directives normally begin with a #.
#include is also a preprocessor directive. It instructs the
compiler to include the specified source file into the one which
contains the #include directive.
Ver. 1.0 Slide 136 of 53
137.
Programming in C
Summary(Contd.)
The #define statement can be used to declare a variable with
a constant value throughout the program. It helps in:
Reducing the chances of inconsistency within the program.
Making modification easier, as the value has to be changed only
at one place.
Ver. 1.0 Slide 137 of 53
138.
Programming in C
Objectives
In this session, you will learn to:
Declare and manipulate pointers
Use pointers to manipulate character arrays
Ver. 1.0 Slide 138 of 53
139.
Programming in C
Declaringand Manipulating Pointers
Every stored data item occupies one or more contiguous
memory cells.
Every cell in the memory has a unique address.
Any reference to a variable, declared in memory, accesses
the variable through the address of memory location.
Pointers are variables, which contain the addresses of other
variables (of any data type) in memory.
Ver. 1.0 Slide 139 of 53
140.
Programming in C
DeclaringPointers
A pointer variable must be declared before use in a
program.
A pointer variable is declared preceded by an asterisk.
The declaration:
int *ptr; /* ptr is pointing to an int */
Indicates that ptr is a pointer to an integer variable.
An uninitialized pointer may potentially point to any area of
the memory and can cause a program to crash.
A pointer can be initialized as follows:
ptr= &x;
In the preceding initialization, the pointer ptr is pointing to x.
Ver. 1.0 Slide 140 of 53
141.
Programming in C
Practice:4.1
1. In the following declaration:
float *ptr_to_float;
The pointer variable ptr_to_float is pointing to a
variable of type ____________.
2. Is the following declaration valid?
*ptr_to_something;
3. State whether True or False:
An integer is declared In the following declaration:
int *ptr_to_int;
4. Is the following declaration valid?
int some_int, *ptr_to_int;
Ver. 1.0 Slide 141 of 53
142.
Programming in C
Practice:4.1 (Contd.)
Solution:
1. float
2. No. When a pointer variable is being declared, the type of
variable to which it is pointing to (int, float, or char)
should also be indicated.
3. False. A pointer to an integer is being declared and not an
integer.
4. Yes. It is okay to club declaration of a certain type along with
pointers to the same type.
Ver. 1.0 Slide 142 of 53
143.
Programming in C
ManipulatingPointers
Pointers can be manipulated like variables.
The unary operator * gives value of the variable a pointer is
pointing to.
The unary operator * is also termed as the indirection
operator.
The indirection operator can be used only on pointers.
Ver. 1.0 Slide 143 of 53
144.
Programming in C
Practice:4.2
1. The symbol _________ is used to obtain the address of a
variable while the symbol__________ is used to obtain the
value of the variable to which a pointer is pointing to.
2. With the following declarations:
int x, y, *ptr;
Which of the following are meaningful assignments?
a. x = y;
b. y=*ptr;
c. x = ptr;
d. x = &.ptr;
e. ptr = &x;
f. x = &y;
Ver. 1.0 Slide 144 of 53
145.
Programming in C
Practice:4.2 (Contd.)
3. Consider the following sequence of statements and
complete the partially-filled table:
int x, y, *ptrl, *ptr2;
x = 65;
y = 89;
ptr1 = &x; /*ptrl points to x */
ptr2 = &y/; /* ptr2 points to y */
x = *ptr1; /* statement A*)
ptr1 = ptr2: /* statement B */
x = *ptr1; /* statement C*/
After statement &x x &y y ptr1 ptr2
A 1006 1018
B
C
Ver. 1.0 Slide 145 of 53
146.
Programming in C
Practice:4.2 (Contd.)
4. What is the output of the following sequence of statements:
int x, y, temp,*ptrl, *ptr2; /* declare */
x = 23;
y = 37;
ptrl = &x;/* ptrl points to x */
ptr2 = &y;/* ptr2 points to y */
temp = *ptrl;
*ptr1 = *ptr2;
*ptr2 = temp;
printf(―x is %d while y is %d‖, x, y);
Ver. 1.0 Slide 146 of 53
Programming in C
PointerArithmetic
Pointer Arithmetic:
Arithmetic operations can be performed on pointers.
Therefore, it is essential to declare a pointer as pointing to a
certain datatype so that when the pointer is incremented or
decremented, it moves by the appropriate number of bytes.
Consider the following statement:
ptr++;
It does not necessarily mean that ptr now points to the next
memory location. The memory location it will point to will
depend upon the datatype to which the pointer points.
May be initialized when declared if done outside main().
Consider the following example:
#include <stdio.h>
char movie[]= ―Jurassic Park‖;
main() {
char *ptr;
Ver. 1.0 Slide 148 of 53
149.
Programming in C
PointerArithmetic (Contd.)
Consider the following example:
#include <stdio.h>
char movie[]= ―Jurassic Park‖;
main() {
char *ptr;
ptr=movie;
printf(―%s‖, movie); /* output: Jurassic Park */
printf(―%s‖,ptr); /* output: Jurassic Park */
ptr++;
printf(―%s‖,movie); /* output: Jurassic Park */
printf(―%s",prr); /* output: urassic Park */
ptr++;
printf(―%s‖,movie); /* output; Jurassic Park */
printf(―%s‖,ptr); /* output: rassic Park */
/* Note that the incrementing of the pointer ptr
does not in any way affect the pointer movie */
}
Ver. 1.0 Slide 149 of 53
150.
Programming in C
Practice:4.3
1. Consider the following code snippet:
#include <stdio.h>
int one_d[] = {l,2,3};
main(){
int *ptr;
ptr = one_d;
ptr +=3; /* statement A*/
printf(―%dn‖, *ptr); /*statement B */
}
a. After statement A is executed, the new address of ptr will be
____ bytes more than the old address.
b. State whether True or False:
The statement B will print 3.
Ver. 1.0 Slide 150 of 53
151.
Programming in C
Practice:4.3 (Contd.)
Solution:
a. 12 ( Size of integer = 4*3)
b. False. Note that ptr is now pointing past the one-d array.
So, whatever is stored (junk or some value) at this address is
printed out. Again, note the dangers of arbitrary assignments
to pointer variables.
Ver. 1.0 Slide 151 of 53
152.
Programming in C
UsingPointers to Manipulate Character Arrays
Array name contains the address of the first element of the
array.
A pointer is a variable, which can store the address of another
variable.
It can be said that an array name is a pointer. Therefore, a
pointer can be used to manipulate an array.
Ver. 1.0 Slide 152 of 53
153.
Programming in C
One-DimensionalArrays and Pointers
One-Dimensional Arrays and Pointers:
Consider the following example:
#include <stdio.h>
char str[13]={―Jiggerypokry‖};
char strl[]={ ―Magic‖};
main() {
char *ptr;
printf(―We are playing around with %s", str);
/* Output: We are playing around with Jiggerypokry*/
ptr=str ; /* ptr now points to whatever str is
pointing to */
printf(―We are playing around with %s" ,ptr);
/* Output: We are playing around with Jiggerypokry */
}
Ver. 1.0 Slide 153 of 53
154.
Programming in C
One-DimensionalArrays and Pointers (Contd.)
In the preceding example the statement:
ptr=str;
Gives the impression that the two pointers are equal. However,
there is a very subtle difference between str and ptr. str is a
static pointer, which means that the address contained in str
cannot be changed. While ptr is a dynamic pointer. The address
in ptr can be changed.
Ver. 1.0 Slide 154 of 53
155.
Programming in C
Practice:4.4
1. Given the declaration:
char some_string [10];
some_string points to _________.
2. State whether True or False:
In the following declaration, the pointer err_msg contains a
valid address:
char *err_msg = ―Some error message‖;
3. State whether True or False:
Consider the following declaration:
char *err_msg = ―Some error message‖;
It is more flexible than the following declaration:
char err_msg[19]=‖Some error message‖;
Ver. 1.0 Slide 155 of 53
156.
Programming in C
Practice:4.4 (Contd.)
Solution:
1. some_string [0]
2. True
3. True. Note that one does not have to count the size of the
error message in the first declaration.
Ver. 1.0 Slide 156 of 53
157.
Programming in C
Two-DimensionalArrays and Pointers
Two-dimensional arrays can be used to manipulate multiple
strings at a time.
String manipulation can also be done by using the array of
pointers, as shown in the following example:
char *things[6]; /* declaring an array of 6
pointers to char */
things[0]=‖Raindrops on roses‖;
things[1]=‖And Whiskers on kettles‖;
things[2]=‖Bright copper kettles‖;
things[3]=‖And warm woolen mittens‖;
things[4]=‖Brown paper packages tied up with
strings‖;
things[5]=‖These are a few of my favorite
things‖;
Ver. 1.0 Slide 157 of 53
158.
Programming in C
Two-DimensionalArrays and Pointers (Contd.)
The third line of the song can be printed by the following
statement:
printf(―%s‖, things[2]);
/*Output: Bright copper kettles */
Ver. 1.0 Slide 158 of 53
159.
Programming in C
Practice:4.5
1. State whether True or False:
While declaring two-dimensional character arrays using
pointers, yon do not have to go through the tedium of
counting the number of characters in the longest string.
2. Given the following error messages:
All's well
File not found
No read permission for file
Insufficient memory
No write permission for file
Write a program to print all the error messages on
screen, using pointers to array.
Ver. 1.0 Slide 159 of 53
160.
Programming in C
Practice:4.5 (Contd.)
Solution:
1. True. New strings can be typed straight away within the {}. As
in:
char *err_msg_msg[]= {
―All's well‖,
―File not found‖,
―No read permission for file‖,
―Insufficient memory‖,
―No write permission for file‖
};
The number of strings will define the size of the array.
Ver. 1.0 Slide 160 of 53
161.
Programming in C
Practice:4.5 (Contd.)
2. The program is:
# include<stdio.h>
# define ERRORS 5
char *err_msg[]= { /*Note the missing index*/
―All's well‖,
―File not found‖,
―No read permission for file‖,
―Insufficient memory‖,
―No write permission for file‖ };
main() {
int err_no;
for ( err_no = 0; err_no < ERRORS; err_no++ ) {
printf ( ―nError message %d is : %sn‖, err_no +
1, err_msg[err_no]); } }
Ver. 1.0 Slide 161 of 53
162.
Programming in C
Two-DimensionalArrays and Pointers (Contd.)
Consider the following two-d array declaration:
int num[3][4]= {
{3, 6, 9, 12},
{15, 25, 30, 35},
{66, 77, 88, 99}
};
This statement actually declares an array of 3 pointers (constant)
num[0], num[l], and num[2] each containing the address of
the first element of three single-dimensional arrays.
The name of the array, num, contains the address of the first
element of the array of pointers (the address of num[0]).
Here,
*num is equal to num[0] because num[0] points to num[0][0].
*(*num) will give the value 3.
*num is equal to num[0].
Ver. 1.0 Slide 162 of 53
163.
Programming in C
String-HandlingFunctions Using Pointers
Pointers can be used to write string-handling functions.
Consider the following examples:
/* function to calculate length of a string*/
#include <stdio.h>
main() {
char *ptr, str[20];
int size=0;
printf(―nEnter string:‖);
gets(str);
fflush(stdin);
for(ptr=str ; *ptr != '0'; ptr++) {
size++;
} printf(―String length is %d‖, size);
}
Ver. 1.0 Slide 163 of 53
164.
Programming in C
UsingPointers to Manipulate Character Arrays (Contd.)
/*function to check for a palindrome */
# include <stdio.h>
main() {
char str[50],*ptr,*lptr;
printf(―nEnter string :‖);
gets(str); fflush(stdin);
for(lptr=str; *lptr !=‘0'; lptr++); /*reach
the string terminator */
lptr--; /*position on the last character */
for(ptr=str; ptr<=lptr; lptr--,ptr++) {
if(*ptr != *lptr)
break;}
if(ptr>lptr)
printf(―%s is a palindrome‖ );
else
printf(―%s is not a palindrome");
}
Ver. 1.0 Slide 164 of 53
165.
Programming in C
Summary
In this session, you learned that:
A pointer is a variable, which contains the address of some
other variable in memory.
A pointer may point to a variable of any data type.
A pointer can point to any portion of the memory.
A pointer variable is declared as:
datatype *<pointer variable name>
A pointer variable is initialized as:
pointer variable name> = &<variable name to which
the pointer will point to>
The & returns the address of the variable.
The * before a pointer name gives the value of the variable to
which it is pointing.
Ver. 1.0 Slide 165 of 53
166.
Programming in C
Summary(Contd.)
Pointers can also be subjected to arithmetic.
Incrementing a pointer by 1 makes it point to a memory
location given by the formula:
New address = Old address + Scaling factor
One-dimensional character arrays can be declared by
declaring a pointer and initializing it.
The name of a character array is actually a pointer to the first
element of the array.
Two-dimensional character arrays can also be declared by
using pointers.
Ver. 1.0 Slide 166 of 53
167.
Programming in C
Objectives
In this session, you will learn to:
Implement modular approach in C programs
Use library functions for string manipulation
Work with data storage types
Ver. 1.0 Slide 167 of 53
168.
Programming in C
ImplementingModular Approach in C Programs
Functions are the building blocks of C.
Every C program must consist of at least one function,
main().
The main() function is the entry point of a C program.
Ver. 1.0 Slide 168 of 53
169.
Programming in C
Advantagesof Functions
Functions:
Allow reusability of code and structuring of programs.
Provide programmers a convenient way of designing
programs.
Ver. 1.0 Slide 169 of 53
170.
Programming in C
Parametersof Functions
A parameter:
Is the data that the function must receive when called from
another function.
May or may not be present in a function.
Of a user-defined function is declared outside the {} of that
function.
Ver. 1.0 Slide 170 of 53
171.
Programming in C
Practice:5.1
1. From the following program, identify the functions invoked
from main(), and state which functions have parameters.
Also state the parameters.
Ver. 1.0 Slide 171 of 53
172.
Programming in C
Practice:5.1 (Contd.)
Solution:
1. The standard functions used in this program within main() are
as follows:
scanf() – parameters are format of input, and pointers to the
variable(s) in which the input must be stored
fflush() – parameter is stdin
The user-defined functions are:
output() – no parameters
calc() – one parameter, g, an int type data
Ver. 1.0 Slide 172 of 53
173.
Programming in C
InvokingFunctions
Functions that have parameters are invoked in one of the
following ways:
Call by value: In call by value, the called function cannot refer
to the variables of the caller function directly, but creates its
own copy of the values in different variables.
Call by reference: In call by reference, the called function
should be able to refer to the variables of the caller function
directly, and does not create its own copy of the values in
different variables. It is possible only if the addresses of the
variables are passed as parameters to a function.
Ver. 1.0 Slide 173 of 53
174.
Programming in C
PassingArrays to Functions
Arrays are inherently passed to functions through call by
reference method.
An array can be passed to a function in the following way:
Function name (array name);
Ver. 1.0 Slide 174 of 53
175.
Programming in C
Practice:5.2
1. If the variable avar is passed to a function by a call by
reference, can the value of the variable avar be modified in
the called function? Give reasons for your answer.
2. State whether True or False:
When an array is passed to a function, the array elements
are copied into the parameter of the function.
3. Consider the program code given in the following file.
Ver. 1.0 Slide 175 of 53
176.
Programming in C
Practice:5.2 (Contd.)
Based on the code, answer the following questions:
a. The function (max() / min()) is invoked by a call by value.
b. The function (max() / min()) is invoked by a call by reference.
c. After the function max() is executed, where does the control go to:
i. The min() function.
ii. The first line of the main() function.
iii. The first line of the main() following the line on which max() was invoked.
d. After execution of the function min(), program execution:
i. Stops without returning to main().
ii. Goes back to the main() function.
e. If the values of i and j were to be printed after the function max()
and again after the function min(), what values would be displayed?
Ver. 1.0 Slide 176 of 53
177.
Programming in C
Practice:5.2 (Contd.)
4. Write a program that calls a function called power(m,n),
which displays the nth power of the integer m (m and n are
parameters). The function must be invoked by a call by
reference.
Ver. 1.0 Slide 177 of 53
178.
Programming in C
Practice:5.2 (Contd.)
Solution:
1. Yes, because the addresses of the variables are passed in by
using call by reference, the memory locations of the variables
are known to the function. Using pointers to the variables, their
values can be modified.
2. False. Values of variables are copied into the parameters only
in the case of a call by value.
3. a. max()
b. min()
c. iii
d. ii
e. After max() is executed, the values of i and j printed out
would be the same as those entered during execution. After
min() is executed, the value of i would still be the same, but
j would increase by 5 (since b is a pointer to the variable j).
Ver. 1.0 Slide 178 of 53
179.
Programming in C
Practice:5.2 (Contd.)
4.main() {
int x, y;
printf(―Enter Number: ‖);
scanf(―%d‖, &x);
fflush(stdin);
printf(―Enter power raise to : ―);
scanf(―%d‖, &y);
fflush(stdin);
power(&x, &y); }
power(m,n)
int *m, *n; /* power is pointed to by
n, value is pointed to by m */
{ int i=1,val=1;
while(i++<= *n)
val = val ** m;
printf(―%d the power of %d is
%dn‖, *n,*m, val);}
Ver. 1.0 Slide 179 of 53
180.
Programming in C
ReturningValues from a Function
A function can return a value to the caller function.
The return statement is used to send back a value to the
caller function.
The return statement also transfers control back to calling
function.
The default return value is int type.
The return statement can return only one value.
The syntax for the return statement is:
return[expression]
A function can also return an array. This could be done by:
return [array name]
Ver. 1.0 Slide 180 of 53
181.
Programming in C
Practice:5.3
1. Point out the error(s), if any, in the functions given in the
following file:
2. The following program should calculate the square of any
float value, using a function called square(). The float value
is an input to the program. The program is incomplete. Put
in the appropriate statements in the program given in the
following file:
Ver. 1.0 Slide 181 of 53
182.
Programming in C
Practice:5.3 (Contd.)
3. The function, makeint(), was coded to convert any
number entered into a char array to integer type. The
function takes the string as parameter and returns the value,
as given in the following file:
Ver. 1.0 Slide 182 of 53
Programming in C
Command-LineArguments
Command-line arguments:
Are the parameters that the main() function can receive from
the command line.
Are passed as information from the OS prompt to a program.
The main() function has 2 arguments, argc and argv.
The format of the main() function with parameters is as
follows:
main(argc, argv)
int argc;
char *argv[];
{
:
}
Here, argc is integer and argv is a character array of
unlimited size (hence [ ] in the declaration).
Ver. 1.0 Slide 184 of 53
185.
Programming in C
Practice:5.4
1. Given that a C program called temp is executed by the
following command:
temp start 6
match the following:
a. value of argc 1. points to array "6"
b. argv [0] 2. points to arrm/ "start"
c. argv [1] 3. 3
d. argv[2] 4. points to array "temp"
2. Modify the program upper so that it first checks the number
of arguments entered on the command line. The program
should display an error message if no arguments have been
entered and also allow conversion of as many strings to
upper-case as have been specified as arguments on the
command line.
Ver. 1.0 Slide 185 of 53
186.
Programming in C
Practice:5.4 (Contd.)
3. Consider the following program to calculate the sum of 2
integers specified on the command line:
main (argc, argv)
int argc;
char *argv [ ];{
sum (argv [1], argv [2]);
}
sum (num1, num2)
int numl, num2;{
return numl + num2;
}
The program has some logical errors. Point out the errors and
correct the code.
Ver. 1.0 Slide 186 of 53
Programming in C
UsingLibrary Functions for String Manipulation
Library functions:
Are also known as built-in functions.
Can be used by including the concerned header files.
Ver. 1.0 Slide 188 of 53
189.
Programming in C
StandardString-Handling Functions
Some of the standard string-handling functions are:
strcmp(): Compares 2 strings (its parameters) character by
character (ASCII comparison).
strcpy(): Copies the second string to the first string named
in the strcpy() parameters.
strcat(): Appends the second string passed at the end of
the first string passed to it .
strlen(): Returns the number of characters in the string
passed to it.
Ver. 1.0 Slide 189 of 53
190.
Programming in C
Practice:5.5
1. What will the following function call return?
x = strcmp(―Cada‖, ―CADA‖);
What should the declaration of x be?
2. Assume that array contains the string 846*.
What will array contain when the following statement is executed?
strcat(array,‖>‖);
3. State whether True or False:
The following statement returns a value of 4 to x.
x = strlen ("abc");
Ver. 1.0 Slide 190 of 53
191.
Programming in C
Practice:5.5 (Contd.)
Solution:
1. Value returned - 32
Declaration - int x;
2. 846*>
3. False
Ver. 1.0 Slide 191 of 53
192.
Programming in C
Stringto Numeric Conversion Functions
Conversion functions:
Are available as a part of the standard library.
Are used to convert one data type into another.
The following functions are used to convert a string to a
numeric value:
atoi(): Returns the int type value of a string passed to it
and the value 0 in the case the string does not begin with a
digit.
atof(): Returns the double type value of a string passed to it
and the value 0 in the case the string does not begin with a
digit or a decimal point.
Ver. 1.0 Slide 192 of 53
193.
Programming in C
Practice:5.6
1. What value will the variable val contain in each of the
following situations?
a. val = atoi ("A345"); /* val is int type */
b. val = atof ("345A"); /* val is double type */
Ver. 1.0 Slide 193 of 53
Programming in C
Functionsfor Formatting Data in Memory
The formatting functions are available as a part of the
standard library.
The following functions are used to format data in memory:
sprintf():
Writes to a variable in the memory and stores the data in different
variables specified.
Are used for transferring data between variables in a specific
format.
Has the following syntax:
sprintf(string, format-specification, data, ….);
sscanf():
Performs formatted input from a string.
Has the following syntax:
sscanf(string, format-specification, data, ….);
Ver. 1.0 Slide 195 of 53
196.
Programming in C
Practice:5.7
1. What data is assigned to the variable string by each of the
following?
a. sprintf(string,"%04d%3.2f%2s",21,4.576, "Hi―);
b. sprintf (string, "%10s", "ABC");
c. sscanf ("0987APZ", "%4d%s", &num, string);
2. What is the error, if any, in the instructions given below
against each purpose? Give the correct instruction in case
of an error.
Purpose Instruction
Accept a name from keyboard printf(“%s”, name);
Format the contents of variables printf (string,"%d%f, i_num,f_num)
i_num(int) and f_num(float), and store
them into a character array called string.
Ver. 1.0 Slide 196 of 53
Programming in C
Workingwith Data Storage Types
C language provides the following data storage types:
auto: Variables of this type retain their value only as long as
the function is in the stage of execution.
static: Variables of this type retain its value even after the
function to which it belongs has been executed.
extern: Variables of this type are declared at the start of the
program and can be accessed from any function.
Ver. 1.0 Slide 198 of 53
199.
Programming in C
Practice:5.8
1. Given the following declarations:
float area;
static float val;
auto char number;
State which variable(s) will be:
a. Created each tune the function is invoked.
b. Created only once.
2. A numeric array has to store 4 values - 2.5, 6,3, 7.0 and 8.0.
This array is to be declared and used in a function called
compute(). Which of the following is/are correct
declarations of this array?
a. static int values[4] = {2.5,6.3,7.0,8.0};
b. auto float values[4] = {2.5,6.3,7.0,8.0 };
c. float values [4]= {2.5,6.3,7.0,8.0};
d. static float values [4] = {2.5,6.3,7.0,8.0};
Ver. 1.0 Slide 199 of 53
200.
Programming in C
Practice:5.8 (Contd.)
Solution:
1. a. area, number
b. val
2. (a) Is invalid because the array should be float or double type.
(b) Is invalid because it is declared as auto type.
(c) Is invalid because it is declared as auto type.
(d) Is correct.
.
Ver. 1.0 Slide 200 of 53
201.
Programming in C
Practice:5.9
1. If the variable val is declared as global in the program B,
just illustrated, how would program A be modified? Give the
appropriate declarations required in both programs.
2. Consider the following 2 program files:
Program A
float x;
calc() {
int i;
: } printout()
{ static char z;
: }
Program B
char numarray[5];
main() {
char c ;
: }
Ver. 1.0 Slide 201 of 53
202.
Programming in C
Practice:5.9 (Contd.)
Based on this code, answer the following:
a. The variable z can be accessed in the function(s)
____________________.
b. The variable(s) that can be accessed from functions of both program
files is/are ___________.
c. Slate whether True or False:
The variable i can be used in the function printout().
d. Memory for variable z is reserved each time the function printout()
is invoked. State whether true or false.
e. If the function printout() has to access the variable x, does x have
to be declared within the function printout()?
If so, give the declaration.
f. The auto variable(s) in these programs is/are _________________.
Ver. 1.0 Slide 202 of 53
203.
Programming in C
Practice:5.9 (Contd.)
Solution:
1. In program B, val would be declared as follows:
int val;
calc(){
:}
In program A, the declaration would be as follows:
main()
{ extern int val;
:}
2. a. printout() only (Since it is declared within the function
printout() and hence is not global)
x and numarray (if proper extern statements are coded).
b. False (Since it is declared within the function calc(), and
hence it is not global)
Ver. 1.0 Slide 203 of 53
204.
Programming in C
Practice:5.9 (Contd.)
c. False (Since z is a static variable, it is created only
once – the function printout() is invoked.)
d. No (Since x is declared as global in program A, and
printout() is defined in the same program file. However,
declaring it as extern while within printout() is wrong.)
e. The variable i defined in calc() and the variable c defined
in main().
Ver. 1.0 Slide 204 of 53
205.
Programming in C
Practice:5.10
1. The following file contains a C program called remdigit.c
and a list of errors in the program indicated by the compiler.
Go through the error list and correct the program. Since the
C compiler does not always give very meaningful error
messages, go through the program given in the following file
carefully.
Ver. 1.0 Slide 205 of 53
206.
Programming in C
Practice:5.10 (Contd.)
2. Write a program to display all the positions at which a
character occurs in a string. Both the character to be located
and the string to be searched should be passed to a
function called nextpos (findchar, searchstr).
Each time the function locates the diameter, it should pass
back the position.
After searching the entire string, the function should return
the value -1.
Ver. 1.0 Slide 206 of 53
207.
Programming in C
Practice:5.10 (Contd.)
Solution:
Work out your answers. A discussion on these follows in the
Classroom.
Ver. 1.0 Slide 207 of 53
208.
Programming in C
Summary
In this session, you learned that:
Functions provide advantages of reusability and structuring of
programs.
A parameter of a function is the data that the function must
receive when called or invoked from another function.
Functions that have parameters are invoked in one of the
following two ways:
Call by value
Call by reference
Call by value means that the called function creates its own
copy of the values in different variables.
Call by reference means that the called function should be able
to refer to the variables of the caller function directly, and does
not create its own copy of the values in different variables.
Ver. 1.0 Slide 208 of 53
209.
Programming in C
Summary(Contd.)
Arrays are passed to functions by the call by reference
method.
Functions can return values by using the return statement.
The main() function can have parameters, argc and argv.
argc is integer type while argv is a string.
The information that is passed to a program from the OS
prompt is known as command-line arguments.
Some of the standard string-handling functions are:
strcmp(): Compares two strings.
strcpy(): Copies the second string to the first string.
strcat(): Appends the second string passed at the end of the
first string passed as parameters.
strlen(): Returns the number of characters in the string
passed as a parameter.
Ver. 1.0 Slide 209 of 53
210.
Programming in C
Summary(Contd.)
atoi(): Returns the int type value of a string passed to it.
aof(): Returns the double type value of a string passed to it.
The following functions are used to format data in memory:
sprintf()
sscanf()
C language provides the following data storage types:
auto: Variables of this type retain their value only as long as the
function is in the stage of execution.
static: Variables of this type retain its value even after the
function to which it belongs has been executed.
extern: Variables of this type are declared at the start of the
program and can be accessed from any function.
Ver. 1.0 Slide 210 of 53
211.
Programming in C
Objectives
In this session, you will do the practice questions of Chapter
4 and Chapter 5.
Ver. 1.0 Slide 211 of 53
212.
Programming in C
Chapter4
1. Modify the program that determines the length of a string
so that it allows input of the string from the user and
displays its length. (Maximum size of the input string is 80).
2. Modify the string comparison program so that it allows
input of strings and reports on whether they are the same
or not.
Ver. 1.0 Slide 212 of 53
213.
Programming in C
Chapter4 (Contd.)
3. A program can be easily understood if it is indented
properly. This has one drawback, in terms of the size of the
program on the disk. One simple way of cutting down the
size significantly is described here.
Assume the following piece of code:
123456789012345678901234567890 (indicates column)
printf("This is the last straw");
The 15 blanks at the start of the line can be replaced by the
number 15 so that the line of code is now:
123456789012345678901234567890 (indicates column)
15printf("This is the last straw");
Note that a saving of 13 bytes (15 - 2) has been
accomplished at one shot.
Ver. 1.0 Slide 213 of 53
214.
Programming in C
Chapter4 (Contd.)
Write a program, which takes in a line of code from the user
(maximum length of 80 characters) and prints out the
condensed string (with the number of spaces occupying the
first two characters in the condensed string).
Ver. 1.0 Slide 214 of 53
215.
Programming in C
Chapter5
1. Alcatel Automatics is a company known for its marketing
success. This success has been largely due to its superb
data analysis programs.
The product manager wants some modifications to the
existing programs. When running the program, he should be
able to specify any of the following with the run command
itself:
%s: for displaying the product sales by each salesman as a
percentage of the total salesman sales.
%p: for displaying the product sales by each salesman as a
percentage of the total product sales.
%i: for displaying the product sales as an index of total sales of
all products
Ver. 1.0 Slide 215 of 53
216.
Programming in C
Chapter5 (Contd.)
He should also be shown some help message to assist him
in case he forgets what to specify with the command and
should then be able to give the command again.
Since the calculations will be coded in separate functions,
which are stored together in one file called func.c,
separate from the main() function. The function available
in this file are:
intdat(): Displays the data as an index of total sales.
proddata(): Displays the data as a percentage of total
product sales.
calcprodtot(): Calculates the salesman-wise totals.
Ver. 1.0 Slide 216 of 53
217.
Programming in C
Chapter5 (Contd.)
The contents of func.c are as follows:
Ver. 1.0 Slide 217 of 53
218.
Programming in C
Objectives
In this session, you will learn to:
Read and write contents in a file
Use random access in files
Ver. 1.0 Slide 218 of 53
219.
Programming in C
Readingand Writing Contents in a File
File inputs-outputs is similar to input from/to the terminal.
Files are treated as streams of characters.
Function are available for single character as well as
multiple character input-output from/to files.
Ver. 1.0 Slide 219 of 53
220.
Programming in C
OpeningFiles
A file needs to be opened to read or to write contents in it.
The fopen() function is used to open a file.
The fopen() function returns a pointer of the FILE type
data.
The fopen() function opens a file in a specific access
mode.
The various modes in which a file can be opened are:
r - Read-Only Mode
w - Write-Only Mode
a - Append Mode
r+ - Read + Write Mode
w+ - Write + Read Mode
a+ - Read + Append Mode
Ver. 1.0 Slide 220 of 53
221.
Programming in C
FILEType Pointers
The FILE type pointer is:
Returned when a file is opened by using the fopen()
function.
Used to manipulate a file.
Used to check whether a file has opened successfully.
The stdin, stdout, and stderr FILE pointers refer to
the standard input device (keyboard) and standard output
and error device (VDU).
Ver. 1.0 Slide 221 of 53
222.
Programming in C
Theexit() Function
The exit() Function:
Is used to terminate a program execution.
Is used as shown in the following code snippet:
if (argc ! = 3)
{
print (―invalid arguments n‖);
exit ();
}
Ver. 1.0 Slide 222 of 53
223.
Programming in C
CharacterInput-Output with Files
The functions used for character input-output with files are:
fgetc(): Reads one character at a time from a file, assigns it
to a character variable, and moves the file pointer to the next
character. It returns an integer type of value.
fputc(): Writes one character at a time in a file.
Ver. 1.0 Slide 223 of 53
224.
Programming in C
ClosingFiles
The fclose() function is used to close files.
Closing the file release the resources.
The syntax of the fclose() function is:
fclose (ptr1);
Where ptr1 is a FILE pointer.
Ver. 1.0 Slide 224 of 53
225.
Programming in C
Practice:6.1
1. What does the following code do?
while((c = fgetc (fp)) != EOF) {
if ((c >= ‗a‘) && (c <= ‗z‘))
c -= 32;
fputc(c, stdout); }
2. Write a program called append, which appends the contents
of the first file to the second file specified on the command
line. The program should also terminate in the following
situations:
a. 2 arguments are not specified on the command line. In this
case, the following message must be displayed:
Usage: append file1 file2
b. In case the file to be read cannot be opened, the following
message may be displayed:
Cannot open input file
Ver. 1.0 Slide 225 of 53
Programming in C
Practice:6.2
1. Point out the errors in the following code:
a. /* this program creates the file emp.dat */
main() {
FILE point;
fopen(―w‖, ―emp.dat‖);
:
fclose(emp.dat);
}
b. /* this program reads the file emp.dat */
main() {
#include<stdio.h>
file*ptr;
ptr = fopen(emp.dat);
:
ptr= fclose();
}
Ver. 1.0 Slide 227 of 53
228.
Programming in C
Practice:6.2 (Contd.)
2. Given the following statements of a C program:
fopen(―man.txt‖, ―r‖);
fclose(fileptr);
What will the FILE declaration statement of this program
be?
3. Point out the error(s) in the following code:
#include<stdio.h>
main() {
char emp;
FILE *pointer1;
pointer1= fopen(―man1.txt‖,‖w‖);
while((inp = fgetc(pointer1)) != eof) {
printf(―?%c‖, inp);
} }
Ver. 1.0 Slide 228 of 53
229.
Programming in C
Practice:6.2 (Contd.)
4. The copy command of DOS copies the contents of the first
file named on the command line to the second file. Make
appropriate changes to the file-copy program so that it
works identical to the copy command.
Ver. 1.0 Slide 229 of 53
Programming in C
LineInput and Output with Files
The functions used for line input and output with files are:
fgets():
Is used to read number of specified characters from a stream.
Reads number of characters specified – 1 characters.
Has the following syntax:
fgets(str, 181, ptr1);
Str – Character array for storing the string
181 – Length of the string to be read
ptr1- FILE pointer
fputs():
Is used to output number of specified characters to a stream.
Has the following syntax:
fputs(str, ptr1);
Str – Character array to be written
ptr1- FILE pointer
Ver. 1.0 Slide 231 of 53
232.
Programming in C
Practice:6.3
1. State whether True or False:
Files created using the fputs() function will always have
records of equal length.
2. Consider the following C statement to input a record from a
file called number-list:
fgets (line, MAXLEN, file_ind);
Given that MAXLEN is a #define and that all lines in the file
number-list are 25 characters long what will the declaration
statements for the parameters of fgets() be?
3. Assume that the file number_list contains the following
records:
120
1305
Ver. 1.0 Slide 232 of 53
233.
Programming in C
Practice:6.3 (Contd.)
Given that the file has been opened and the first input
statement executed is as follows:
fgets(line, 3, file_ind);
Which of the following will the array called line contain?
a. 1 followed by 0.
b. 12 followed by 0.
c. 120 followed by 0.
4. Match the following functions with the values they can
return:
a. fgets() 1. NULL
b. fgetc() 2. EOF
c. fopen() 3. FILE type pointer
Ver. 1.0 Slide 233 of 53
234.
Programming in C
Practice:6.3 (Contd.)
If a function can return more than one type of these values,
state the conditions under which the values are returned.
5. A utility called hprint has to be written in C, which will
allow a user to display, on screen, any number of lines from
the beginning of any file. The user has to specify both the
number of lines and the file name on the command line in
the following format:
hprint number file-name
The maximum line length is 80 characters. The program
should handle possible errors.
Ver. 1.0 Slide 234 of 53
235.
Programming in C
Practice:6.3 (Contd.)
Solution:
1. False. fputs() writes the contents of a string onto a file. So
even if a string has size 100, but contains only 20 characters
before a 0, only 20 characters get written.
2. The declarations are:
#define MAXLEN 26/* macro definition outside
main() */
char line[26];
3. b. fgets() will read either 3 - 1 characters , i.e. 2 characters,
or until it comes across a newline character. Since the newline
occurs after the third character, it will read in 2 characters from
the first record.
Ver. 1.0 Slide 235 of 53
236.
Programming in C
Practice:6.3 (Contd.)
4. a. 1
b. 2
c. 1 and 3. (NULL in case file cannot be opened; FILE type
pointer in case of successful open)
5. The answer to this practice will be discussed in class. Work
out your solution.
Ver. 1.0 Slide 236 of 53
237.
Programming in C
FormattedInput and Output with Files
The functions for formatted input and output with files are:
fscanf():
Scans and formats input from a stream.
Is similar to scanf().
Has the following syntax:
int fscanf(FILE *Stream, const char
*format[,address,..]);
fprintf():
Sends formatted output to a stream.
Is similar to printf().
Has the following syntax:
int fprintf(FILE *Stream, const char
*format[,address,..]);
Ver. 1.0 Slide 237 of 53
238.
Programming in C
Practice:6.4
1. Rewrite the following printf() statement using the
function fprintf():
printf(―The test value is %d‖, x);
2. The following statement is written to input 2 fields from the
keyboard:
scanf(― %6s%d‖, array, &num);
It is rewritten as:
fscanf(―%6s%d‖, array, &num);
This statement is erroneous. Give the correct fscanf()
statement.
Ver. 1.0 Slide 238 of 53
239.
Programming in C
Practice:6.4 (Contd.)
3. Write the appropriate statements to input fields from a
record of a file called alpha-doc, the first field being a
float value, and the second field a string of size 10. In
case the file does not have he required data, and the end-
of-file occurs, the following message should be displayed:
End of file encountered.
Ver. 1.0 Slide 239 of 53
240.
Programming in C
Practice:6.4 (Contd.)
4. A utility called format is required to create a formatted report
from a file called manufact. This report is also to be stored
on disk with suitable report headings. The name of the file to
be created should be accepted during program execution.
The program should also ask for a report title, which should
appear after every 60 record of the file manufact.
The file manufact contains the following 3 fields separated
by space.
Field Size
Manufacturer Code 4
Name 20
Address 60
In the output file, the fields should be separated by one tab
character.
Ver. 1.0 Slide 240 of 53
Programming in C
UsingRandom Access in Files
A file can be accessed using sequential access or random
access.
In sequential access, the file is always accessed from the
beginning.
In random access the file can be accessed arbitrarily from
any position.
Ver. 1.0 Slide 242 of 53
243.
Programming in C
Thefseek () Function
The fseek() function:
Is used for repositioning the current position on a file opened
by the fopen() function.
Has the following syntax:
rtn = fseek (file-pointer, offset, from-where);
Here:
int rtn is the value returned by fseek()(0 if successful and 1 if
unsuccessful).
file-pointer is the pointer to the file.
offset is the number of bytes that the current position will shift on a
file.
from-where is the position on the file from where the offset would be
effective.
Ver. 1.0 Slide 243 of 53
244.
Programming in C
Therewind () Function
The rewind() function:
Is used to reposition the current position to the beginning of a
file.
Is useful for reinitializing the current position on a file.
Has the following syntax:
rewind(file-pointer);
Here:
file-pointer is the pointer returned by the function fopen().
After rewind() is executed, current position is always 1,
i.e. beginning of file.
Ver. 1.0 Slide 244 of 53
245.
Programming in C
Practice:6.5
1. Write the equivalent of the function rewind() using
fseek().
2. Assume the following representation of the first 30 bytes of
a file.
0 1 2 3
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
Ver. 1.0 Slide 245 of 53
246.
Programming in C
Practice:6.5 (Contd.)
What will the current position on the file be after the
following instructions are performed in sequence?
a. fp = fopen ("FOR DEMO.DAT", ―r‖);
b. fseek(fp, 29L, 1);
c. rewind(fp);
d. fgets(buffer, 20L, fp);
e. fseek(fp, 4L, 1);
Ver. 1.0 Slide 246 of 53
247.
Programming in C
Practice:6.5 (Contd.)
Solution:
1. fseek(fp, 0L, 0);
2. The following current positions are relative to the beginning of
the file:
a. 1
b. 30
c. 1
d. 20
e. 24
Ver. 1.0 Slide 247 of 53
248.
Programming in C
Practice:6.6
1. Write a function to update the field balance in the file
SAVINGS.DAT based on the following information.
If balance is Increment balance by
< Rs 2000.00 Rs 150.50
Between Rs. 2000.00 Rs 200.00
and Rs 5000.00
<Rs 5000.00 Rs 300.40
The structure of the file SAVINGS.DAT is as follows.
Account number Account holder's name Balance
(5 bytes) (20 bytes) (5 bytes)
Ver. 1.0 Slide 248 of 53
Programming in C
Practice:6.7
1. Go through the following program called inpcopy.c and its
error listing on compilation and then correct the program:
1 #include <stdio.h>
2 main()
3 {
4 file fp;
5 char c;
6
7 fp = fopen(―file‖, w);
8
9 while (( c = fgetc(stdin)) != EOF)
10 fputc(c,fp);
11
12 fclose(fp);
13 }
Ver. 1.0 Slide 250 of 53
251.
Programming in C
Practice:6.7 (Contd.)
Error listing:
"inpcopy/.c", line 4: file undefined
"inpcopy/.c". line 4: syntax error
"inpcopy/.c", line 7: fp undefined
"inpcopy/.c", line 7: w undefined
"inpcopy/.c", line 7: learning: illegal
pointer/integer combination, op = "inpcopy/.c",
line 9: c undefined
Ver. 1.0 Slide 251 of 53
252.
Programming in C
Practice:6.7 (Contd.)
Solution:
1. Work out for your answer. The solution will be discussed in the
classroom session.
Ver. 1.0 Slide 252 of 53
253.
Programming in C
Summary
In this session, you learned that:
C treats file input-output in much the same way as input-output
from/to the terminal.
A file needs to be opened to read or to write contents in it.
The fopen() function is used to open a file.
C allows a number of modes in which a file can be opened.
When a file is opened by using the fopen() function, it
returns a pointer that has to be stored in a FILE type pointer.
This FILE type pointer is used to manipulate a file.
The exit() function is used to terminate program execution.
The fgetc() and fputc() functions are used for character
input-output in files.
After completing the I/O operations on the file, it should be
closed to releases the resources.
Ver. 1.0 Slide 253 of 53
254.
Programming in C
Summary(Contd.)
The fclose() function is used to close a file.
The fgets() and fputs() functions are used for string
input-output in files.
The fscanf() and fprintf() functions are used for
formatted input-output in files.
In sequential access, the file is always accessed from the
beginning.
In random access the file can be accessed arbitrarily from any
position.
C provides the fseek() function for random access.
The function rewind() is used to reposition the current
position to the beginning of a file.
Ver. 1.0 Slide 254 of 53
255.
Programming in C
Objectives
In this session, you will learn to:
Work with structures
Use structures in file handling
Ver. 1.0 Slide 255 of 53
256.
Programming in C
Workingwith 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.
Ver. 1.0 Slide 256 of 53
257.
Programming in C
DefiningStructures
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.
Ver. 1.0 Slide 257 of 53
258.
Programming in C
Practice: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.
Ver. 1.0 Slide 258 of 53
259.
Programming in C
Practice:7.1 (Contd.)
Solution:
1. False
2. 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);
Ver. 1.0 Slide 259 of 53
260.
Programming in C
DefiningStructures (Contd.)
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.
Ver. 1.0 Slide 260 of 53
261.
Programming in C
Practice: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.date
b. date_type.day
Ver. 1.0 Slide 261 of 53
262.
Programming in C
Practice: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;
Ver. 1.0 Slide 262 of 53
263.
Programming in C
Practice:7.2 (Contd.)
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 an
actual structure in memory.
Ver. 1.0 Slide 263 of 53
264.
Programming in C
PassingStructures 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 .
Ver. 1.0 Slide 264 of 53
265.
Programming in C
Practice: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.day
ii. date.month
Given that ptr has been assigned the address of the structure
date.
Ver. 1.0 Slide 265 of 53
266.
Programming in C
Practice: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.
Ver. 1.0 Slide 266 of 53
267.
Programming in C
Practice:7.3 (Contd.)
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.
Ver. 1.0 Slide 267 of 53
268.
Programming in C
Arraysof 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];
Ver. 1.0 Slide 268 of 53
269.
Programming in C
Practice: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.
Ver. 1.0 Slide 269 of 53
Programming in C
Workingwith 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;
};
Ver. 1.0 Slide 271 of 53
272.
Programming in C
Practice:7.5
1. What will the following declaration do?
typedef char sentence[50];
sentence complex[10];
Ver. 1.0 Slide 272 of 53
273.
Programming in C
Practice:7.5 (Contd.)
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).
Ver. 1.0 Slide 273 of 53
274.
Programming in C
UsingStructures 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.
Ver. 1.0 Slide 274 of 53
275.
Programming in C
WritingRecords 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.
Ver. 1.0 Slide 275 of 53
276.
Programming in C
Practice: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 number
Salesman number
Product number (numbered 1 to 4)
Units sold
Value of sale
Value of sale is calculated in the program.
Ver. 1.0 Slide 276 of 53
277.
Programming in C
Practice: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.
Ver. 1.0 Slide 277 of 53
Programming in C
ReadingRecords 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.
Ver. 1.0 Slide 279 of 53
280.
Programming in C
Practice: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.
Ver. 1.0 Slide 280 of 53
Programming in C
Practice:7.8
1. Debug the following program called dat.c using the error
listing provided in the following file.
Ver. 1.0 Slide 282 of 53
283.
Programming in C
Practice:7.8 (Contd.)
Solution:
1. The solution to this practice will be discussed in class. Work
out your answer.
Ver. 1.0 Slide 283 of 53
284.
Programming in C
Summary
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
Ver. 1.0 Slide 284 of 53
285.
Programming in C
Summary(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.
Ver. 1.0 Slide 285 of 53
286.
Programming in C
Objectives
In this session, you will learn to:
Differentiate between high-level and low-level input/output
Work with low-level input/output functions
Use random access in files
Ver. 1.0 Slide 286 of 53
287.
Programming in C
DifferentiatingBetween High-Level and Low-Level Input/Output
In C, files and devices can be accessed by using two groups
of functions:
High-level I/O or stream-level I/O
Low-level I/O
Ver. 1.0 Slide 287 of 53
288.
Programming in C
DifferenceBetween High-level I/O and Low-level I/O
High-level or Stream-level I/O:
Is more flexible and convenient.
Hides complexity from the programmer.
Is slower.
Low-level I/O:
Provides direct access to files and devices.
Is complex (buffer management is to be done by the
programmer).
Is faster.
Uses a file descriptor to track the status of the file.
Ver. 1.0 Slide 288 of 53
289.
Programming in C
Practice:8.1
Which of the following statements is true?
In C, there are many interfaces between a program and
peripheral devices.
A file descriptor is a non-negative integer.
When you perform an operation on a file, the system uses the
name of the file to identify it.
Ver. 1.0 Slide 289 of 53
290.
Programming in C
Practice:8.1 (Contd.)
Solution:
A file descriptor is a non-negative integer.
Ver. 1.0 Slide 290 of 53
291.
Programming in C
Usesof Low-Level Input/Output
Low-level I/O functions are used for:
Accessing files and devices directly.
Reading binary files in large chunks.
Performing I/O operations quickly and efficiently.
Ver. 1.0 Slide 291 of 53
292.
Programming in C
Workingwith Low-Level Input/Output Functions
The low-level I/O system in C provides functions that can be
used to access files and devices.
The basic low-level I/O functions are:
open()
close()
read()
write()
Ver. 1.0 Slide 292 of 53
293.
Programming in C
Theopen() Function
The open() function:
Is used to open an existing file or create a new file.
Returns a file descriptor for the file name passed to it.
Has the following syntax:
int open(char *filename, int flags, int perms
);
Ver. 1.0 Slide 293 of 53
294.
Programming in C
Theclose() Function
The close() function:
Closes the file that was opened using the open() function.
Takes the file descriptor as a parameter to close the file.
Returns 0 on success and -1 in case of an error.
Has the following syntax:
int close(int filedes);
Ver. 1.0 Slide 294 of 53
295.
Programming in C
Theread() function
The read() function:
Reads data from a file.
Starts reading a file from the current file position.
Has the following syntax:
int read (int filedes, char *buffer, int
size);
Ver. 1.0 Slide 295 of 53
296.
Programming in C
Thewrite() function
The write() function:
Enables a user to write contents to a file.
Has the following syntax:
int write (int filedes, char *buffer, int
size);
Ver. 1.0 Slide 296 of 53
297.
Programming in C
Practice:8.2
1. Which of the following statements is true?
a. At end-of-file, if a function is called repeatedly, it will give error.
b. In a read() function, the value of zero indicates end-of-file.
2. What will happen if you do not call the write() function in
a loop?
Ver. 1.0 Slide 297 of 53
298.
Programming in C
Practice:8.2 (Contd.)
Solution:
1. In a read() function, the value of zero indicates end-of-file.
2. If you do not call write() function in a loop then the entire
data would not be written.
Ver. 1.0 Slide 298 of 53
299.
Programming in C
ErrorHandling
Error Handling:
Some of the low-level I/O functions return error flags when
they fail to perform a specified task.
You can find these types of errors using a variable, errno.
The following table lists some values of errno that are
common to the open(), close(), read(), and write()
functions.
errno values Description
EACCES Specifies that the program has failed to access one of the directories
in the file.
ENAMETOOLONG Indicates that the file name is too long.
ENOSPC Specifies that the disc is out of space and the file can not be created.
EIO Specifies that there was a hardware error.
EBADF Specifies that the file descriptor passed to read, write, or close the file
is invalid.
Ver. 1.0 Slide 299 of 53
300.
Programming in C
ErrorHandling (Contd.)
There are certain errno values that are specific to the
open() function, which are shown with the help of the
following table.
errno values Description
EEXIST Specifies that if File already exists, and O_CREAT and O_EXCL are
set, then opening the file would conflict with the existing file and the
file will not open.
EISDIR Specifies that the file is actually a directory.
ENOENT Specifies that some of the file components do not exist.
EMFILE Specifies that too many files are open.
EROFS Specifies that the file is on a read only systembut either one of the
write permissions O_WRONLY, O_RDWR, or O_TRUNC is set.
Ver. 1.0 Slide 300 of 53
301.
Programming in C
ErrorHandling (Contd.)
There are certain errno values that are specific to the
write() function, which are shown with the help of the
following table.
errno values Description
EFBIG Specifies that the file will become too large if the
data is written on it.
EINTR Specifies that the write operation is temporarily
interrupted.
Ver. 1.0 Slide 301 of 53
302.
Programming in C
UsingRandom Access Seek in Files
The read and write operations on files are usually sequential
in nature.
Random access permits non-sequential file access so that a
file can be read or written out of sequence.
Random access in low-level file routines is performed using
the lseek() function.
Ver. 1.0 Slide 302 of 53
303.
Programming in C
Thelseek() Function
The lseek() function:
Returns the file position, as measured in bytes from the
beginning of the file.
Has the following syntax:
long lseek (int filedes, long offset, int
origin);
Ver. 1.0 Slide 303 of 53
304.
Programming in C
Thelseek() Function (Contd.)
The following table lists the various values of the third
parameter (origin).
Values for origin Description
SEEK_SET or 0 Specifies that the offset is relative to the beginning
of the file. The offset can only be positive.
SEEK_CUR or 1 Specifies that the offset is relative to the current
position. The offset can be positive or negative.
SEEK_END or 2 Specifies that the offset is relative to the end of
the file. The offset can be positive or negative.
Ver. 1.0 Slide 304 of 53
305.
Programming in C
Thelseek() Function (Contd.)
The following table lists some instructions for moving to the
end or beginning of a file.
Instruction Function used
To get to the end of a file lseek(filedes,0,2);
To return to the beginning of a file lseek(filedes,0,0);
Ver. 1.0 Slide 305 of 53
306.
Programming in C
Summary
In this session, you learned that:
In C, files and devices can be accessed by using high-level I/O
or stream-level I/O and low-level I/O.
Low-level I/O functions are those, which provide direct access
to files and peripheral devices.
A file descriptor is a non-negative integer, which is returned by
the open() function and is used in read() and write()
functions. It tells about the permission to access the file.
Low-level input/output functions are used for the following
purposes:
Accessing files and devices directly
Reading the binary files in large chunks
Performing I/O operations quickly and efficiently
The open() function is used to open or create a file.
Ver. 1.0 Slide 306 of 53
307.
Programming in C
Summary(Contd.)
The close() function is used for closing the file.
The read() function reads the existing file up to specified size
and stores it into a character array.
The write() function writes on the file taking input from a
character array up to specified size.
Most of the low-level I/O functions throw errors during file
handling.
errno is the variable that tells about the error occurred during
a low-level I/O operation.
Files and devices can also be accessed randomly.
The lseek() function is used to place the file position to the
desired place.
The lseek() function do not require to read or write the file
for positioning it.
Ver. 1.0 Slide 307 of 53
308.
Programming in C
PracticeQuestions
In this session, you will do the practice questions of Chapter
7 and Chapter 8.
Ver. 1.0 Slide 308 of 53
309.
Programming in C
Chapter7
1. You are a part of a database software development team.
The software you are developing is to be used to create
and query on database files. You are assigned the task of
writing a C program, which displays the structure of any
database file, as given in the following file.
Ver. 1.0 Slide 309 of 53
310.
Programming in C
Chapter8
1. Read a file after the first 10 characters and print it on
screen. (Hint: Create a text file by the name of
Example.txt and write 2-3 lines of content in it.)
2. Write your name 10 character after the end of the file. Also,
use the exit() function to terminate the execution, if you
are unable to write or open the file.
Ver. 1.0 Slide 310 of 53