CS8251-Programming in C Notes
CS8251-Programming in C Notes
Thirumazhisai, Chennai
CS 8251 - PROGRAMMING IN C
Prepared by,
Ms.A.Mary JaNiS,
Assistant Professor/CSE
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
1
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Procedural languages
The next advance was the development of procedural languages. These third-
generation languages (the first described as high-level languages) use vocabulary related to the
problem being solved. For example,
COmmon Business Oriented Language (COBOL) – uses terms
like file, move and copy.
FORmula TRANslation (FORTRAN) – using mathematical language terminology, it
was developed mainly for scientific and engineering problems.
ALGOrithmic Language (ALGOL) – focused on being an appropriate language to
define algorithms, while using mathematical language terminology and targeting scientific
and engineering problems just like FORTRAN.
Programming Language One (PL/I) – a hybrid commercial-scientific general purpose
language supporting pointers.
Beginners All purpose Symbolic Instruction Code (BASIC) – it was developed to
enable more people to write programs.
C – a general-purpose programming language, initially developed by Dennis
Ritchie between 1969 and 1973 at AT&T Bell Labs.
Features of C Programming Language
C is a robust language with rich set of built-in functions and operators.
Programs written in C are efficient and fast.
C is highly portable, programs once written in C can be run on another machines with
minor or no modification.
C is basically a collection of C library functions, we can also create our own function and
add it to the C library.
C is easily extensible.
Advantages of C
C is the building block for many other programming languages.
Programs written in C are highly portable.
Several standard functions are there (like in-built) that can be used to develop programs.
C programs are basically collections of C library functions, and it’s also easy to add own
functions in to the C library.
2
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
The modular structure makes code debugging, maintenance and testing easier.
Disadvantages of C
C does not provide Object Oriented Programming (OOP) concepts.
There is no concepts of Namespace in C.
C does not provide binding or wrapping up of data in a single unit.
C does not provide Constructor and Destructor.
Object-oriented programming
Object-oriented programming (OOP) languages were created, such as Simula, Smalltalk,
C++, C#, Eiffel, PHP, and Java. In these languages, data and methods to manipulate it are kept
as one unit called an object. The only way that another object or user can access the data is via
the object's methods. Thus, the inner workings of an object may be changed without affecting
any code that uses the object.
1. Documentation section:
The documentation section consists of a set of comment lines giving the name of the
program, the author and other details, which the programmer would like to use later.
2. Link section: The link section provides instructions to the compiler to link functions
from the system library such as using the #include directive.
3
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
3. Definition section: The definition section defines all symbolic constants such using
the #define directive.
4. Global declaration section: There are some variables that are used in more than one
function. Such variables are called global variables and are declared in the global
declaration section that is outside of all the functions. This section also declares all
the user-defined functions.
5. main () function section: Every C program must have one main function section. This
section contains two parts; declaration part and executable part
i. Declaration part: The declaration part declares all the variables used in the
executable part.
ii. Executable part: There is at least one statement in the executable part. These two
parts must appear between the opening and closing braces. The program
execution begins at the opening brace and ends at the closing brace. The closing
brace of the main function is the logical end of the program. All statements in the
declaration and executable part end with a semicolon.
6. Subprogram section: If the program is a multi-function program then the subprogram
section contains all the user-defined functions that are called in the main () function.
User-defined functions are generally placed immediately after the main () function,
although they may appear in any order.
All section, except the main () function section may be absent when they are not required.
4
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
void As the name suggests it holds no value and is generally used for specifying
the type of function or what it returns. If the function has a void type, it
means that the function will not return any value.
Data Description
Types
Arrays Arrays are sequences of data items having homogeneous values. They have
adjacent memory locations to store values.
Pointers These are powerful C features which are used to access the memory and deal with
5
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
their addresses.
User Defined Data Types
C allows the feature called type definition which allows programmers to define their own
identifier that would represent an existing data type. There are three such types:
Data Description
Types
These allow storing various data types in the same memory location.
Union Programmers can define a union with different members but only a single
member can contain a value at given time.
Enumeration is a special data type that consists of integral constants and each of
Enum them is assigned with a specific name. “enum” keyword is used to define the
enumerated data type.
Let's see the basic data types. Its size is given according to 32 bit architecture.
6
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
float 4 byte
double 8 byte
7
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int main()
{
printf("Storage size for int is: %d \n", sizeof(int));
printf("Storage size for char is: %d \n", sizeof(char));
return 0;
}
Garbage
auto RAM Local Within function
Value
Garbage
register Register Local Within function
Value
1) auto
The auto keyword is applied to all local variables automatically. It is the default
storage class that is why it is known as automatic variable.
#include<stdio.h>
int main()
{
8
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int a=10;
auto int b=10;//same like above
printf("%d %d",a,b);
return 0;
}
Output:
10 10
2) register
The register variable allocates memory in register than RAM. Its size is same of
register size. It has a faster access than other variables.
It is recommended to use register variable only for quick access such as in counter.
We can’t get the address of register variable.
Example: register int counter=0;
3) static
The static variable is initialized only once and exists till the end of the program. It
retains its value between multiple functions call.
The static variable has the default value 0 which is provided by compiler.
Example:
#include<stdio.h>
int func()
{
static int i=0;//static variable
int j=0;//local variable
i++;
j++;
printf("i= %d and j= %d\n", i, j);
}
int main() {
func();
func();
func();
9
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
return 0;
}
Output:
i= 1 and j= 1
i= 2 and j= 1
i= 3 and j= 1
4) extern
The extern variable is visible to all the programs. It is used if two or more files are
sharing same variable or function.
Example: extern int counter=0;
1.5 CONSTANTS
A constant is a value or variable that can't be changed in the program, for example: 10,
20, 'a', 3.4, "c programming" etc.
There are different types of constants in C programming.
List of Constants in C
Constant Example
10
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
11
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Output:
3.140000
Backslash character constant
C supports some character constants having a backslash in front of it. The lists of
backslash characters have a specific meaning which is known to the compiler. They are also
termed as “Escape Sequence”.
Example:
\t is used to give a tab
\n is used to give new line
\t horizontal tab
enum tagname{value1,value2,value3,….};
12
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
It is start with 0 (zero) by default and value is incremented by 1 for the sequential
identifiers in the list. If constant one value is not initialized then by default sequence will be start
from zero and next to generated value should be previous constant value one.
Example of Enumeration in C:
enum week{sun,mon,tue,wed,thu,fri,sat};
enum week today;
In above code first line is create user defined data type called week.
week variable have 7 value which is inside { } braces.
today variable is declare as week type which can be initialize any data or value among
7 (sun, mon,....).
Example:
#include<stdio.h>
#include<conio.h>
enum abc{x,y,z};
void main()
{
int a;
clrscr();
a=x+y+z; //0+1+2
printf(“sum: %d”,a);
getch();
13
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
}
Output:
Sum: 3
1.7 KEYWORDS
A keyword is a reserved word. You cannot use it as a variable name, constant name etc.
There are only 32 reserved words (keywords) in C language.
A list of 32 keywords in c language is given below:
Arithmetic Operators
Relational Operators
Logical Operators
Bitwise Operators
Assignment Operators
14
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Arithmetic Operators
Given table shows all the Arithmetic operator supported by C Language. Lets suppose
variable A hold 8 and B hold 3.
15
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
!= A!=(-4) True
Logical Operator
Which can be used to combine more than one Condition?. Suppose you want to
combined two conditions A<B and B>C, then you need to use Logical Operator like (A<B)
&& (B>C). Here && is Logical Operator.
16
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Both increment and decrement operator are used on a single operand or variable, so it is
called as a unary operator. Unary operators are having higher priority than the other operators
it means unary operators are executed before other operators.
Increment and decrement operators are cannot apply on constant.
The operators are ++, --
Type of Increment Operator
pre-increment
post-increment
pre-increment (++ variable)
In pre-increment first increment the value of variable and then used inside the
expression (initialize into another variable).
Syntax:
++variable;
Example:
#include<stdio.h>
#include<conio.h>
void main()
{
int x,i;
i=10;
x=++i;
printf(“Pre-increment\n”);
printf(“x::%d”,x);
printf(“i::%d”,i);
i=10;
x=i++;
17
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
printf(“Post-increment\n”);
printf(“x::%d”,x);
printf(“i::%d”,i);
}
Output:
Pre-increment
x::10
i::10
Post-increment
x::10
i::11
Type of Decrement Operator
pre-decrement
post-decrement
Pre-decrement (-- variable)
In pre-decrement first decrement the value of variable and then used inside the
expression (initialize into another variable).
Syntax:
--variable;
18
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
x=--i;
printf(“Pre-decrement\n”);
printf(“x::%d”,x);
printf(“i::%d”,i);
i=10;
x=i--;
printf(“Post-decrement\n”);
printf(“x::%d”,x);
printf(“i::%d”,i);
}
Output:
Pre-decrement
x::9
i::9
Post-decrement
x::10
i::9
Ternary Operator
If any operator is used on three operands or variable is known as Ternary Operator. It can
be represented with ? : . It is also called as conditional operator
Advantage of Ternary Operator
Using ?: reduce the number of line codes and improve the performance of application.
Syntax:
In the above symbol expression-1 is condition and expression-2 and expression-3 will be
either value or variable or statement or any mathematical expression. If condition will be true
expression-2 will be execute otherwise expression-3 will be executed.
19
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
20
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Operator Description
* Pointer to a variable.
Expression evaluation
In C language expression evaluation is mainly depends on priority and associativity.
Priority
This represents the evaluation of expression starts from "what" operator.
Associativity
It represents which operator should be evaluated first if an expression is containing
more than one operator with same priority.
Precedence Operator Operator Meaning Associativity
1 () function call
[] array reference
Left to Right
-> structure member access
. structure member access
2 ! negation
~ 1's complement
+ Unary plus
- Unary minus
++ incre
-- ment operator Right to Left
& decrement operator
* address of operator
sizeof pointer
(type) returns size of a variable
type conversion
3 * multiplication
/ division Left to Right
% remainder
4 + addition
Left to Right
- subtraction
5 << left shift
Left to Right
>> right shift
6 < less than
<= less than or equal to
Left to Right
> greater than
>= greater than or equal to
21
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
7 == equal to
Left to Right
!= not equal to
8 & bitwise AND Left to Right
9 ^ bitwise EXCLUSIVE OR Left to Right
10 | bitwise OR Left to Right
11 && logical AND Left to Right
12 || logical OR Left to Right
13 ?: conditional operator Left to Right
14 = assignment
*= assign multiplication
/= assign division
%= assign remainder
+= assign additon
-= assign subtraction Right to Left
&= assign bitwise AND
^= assign bitwise XOR
|= assign bitwise OR
<<= assign left shift
>>= assign right shift
15 , separator Left to Right
Example:
22
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Managing Input/Output
I/O operations are useful for a program to interact with users. stdlib is the standard C
library for input-output operations. While dealing with input-output operations in C, there are
two important streams that play their role. These are:
Standard Input (stdin)
Standard Output (stdout)
Standard input or stdin is used for taking input from devices such as the keyboard as a
data stream. Standard output or stdout is used for giving output to a device such as a monitor.
For using I/O functionality, programmers must include stdio header-file within the program.
Reading Character In C
The easiest and simplest of all I/O operations are taking a character as input by reading
that character from standard input (keyboard). getchar() function can be used to read a single
character. This function is alternate to scanf() function.
Syntax:
var_name = getchar();
Example:
#include<stdio.h>
void main()
{
char title;
title = getchar();
}
There is another function to do that task for files: getc which is used to accept a
character from standard input.
Syntax:
int getc(FILE *stream);
Writing Character In C
Similar to getchar() there is another function which is used to write characters, but one at a time.
Syntax:
putchar(var_name);
23
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Example:
#include<stdio.h>
void main()
{
char result = 'P';
putchar(result);
putchar('\n');
}
Similarly, there is another function putc which is used for sending a single character to the
standard output.
Syntax:
int putc(int c, FILE *stream);
Formatted Input
It refers to an input data which has been arranged in a specific format. This is possible
in C using scanf(). We have already encountered this and familiar with this function.
Syntax:
scanf("control string", arg1, arg2, ..., argn);
Format specifier:
24
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Example:
#include<stdio.h>
void main()
{
int var1= 60;
int var1= 1234;
scanf("%2d %5d", &var1, &var2);
}
Input data items should have to be separated by spaces, tabs or new-line and the
punctuation marks are not counted as separators.
Reading and Writing Strings in C
There are two popular library functions gets() and puts() provides to deal with strings in
C.
gets: The char *gets(char *str) reads a line from stdin and keeps the string pointed to by
the str and is terminated when the new line is read or EOF is reached. The declaration of gets()
function is:
Syntax:
char *gets(char *str);
25
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
If the type of the expression is identical to that of the variable, the result is saved in the
variable.
Otherwise, the result is converted to the type of the variable and saved there.
o If the type of the variable is integer while the type of the result is real, the
fractional part, including the decimal point, is removed making it an integer
result.
o If the type of the variable is real while the type of the result is integer, then a
decimal point is appended to the integer making it a real number.
Once the variable receives a new value, the original one disappears and is no more
available.
Examples of assignment statements,
b = c ; /* b is assigned the value of c */
a = 9 ; /* a is assigned the value 9*/
b = c+5; /* b is assigned the value of expr c+5 */
The expression on the right hand side of the assignment statement can be:
An arithmetic expression;
A relational expression;
A logical expression;
A mixed expression.
For example,
int a;
float b,c ,avg, t;
avg = (b+c) / 2; /*arithmetic expression */
a = b && c; /*logical expression*/
a = (b+c) && (b<c); /* mixed expression*/
26
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
In this section we are discuss about if-then (if), if-then-else (if else), and switch statement. In C
language there are three types of decision making statement.
if
if-else
switch
if Statement
if-then is most basic statement of Decision making statement. It tells to program to
execute a certain part of code only if particular condition is true.
Syntax:
if(condition)
{
Statements executed if the condition is
true
}
Constructing the body of "if" statement is always optional, Create the body when we
are having multiple statements.
For a single statement, it is not required to specify the body.
If the body is not specified, then automatically condition part will be terminated with
next semicolon ( ; ).
Example:
#include<stdio.h>
void main()
{
27
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int time=10;
if(time>12)
{
printf(“Good morning”)
}
}
Output:
Good morning
if-else statement
In general it can be used to execute one block of statement among two blocks, in C
language if and else are the keyword in C.
In the above syntax whenever condition is true all the if block statement are executed
remaining statement of the program by neglecting else block statement. If the condition is false
else block statement remaining statement of the program are executed by neglecting if block
statements.
Example:
#include<stdio.h>
void main()
{
28
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int time=10;
if(time>12)
{
printf(“Good morning”)
}
else
{
printf(“good after noon”)
}
}
Output:
Good morning
switch(expression/variable)
{
case value1:
statements;
break;//optional
case value2:
statements;
break;//optional
default:
statements;
break;//optional
}
29
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
30
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
}
}
Output:
Please enter a no between 1 and 5 3
You choice three
31
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Syntax:
while (condition)
{
statement(s);
Increment statement;
}
Example:
#include<stdio.h>
int main ()
{
/* local variable Initialization */
int n = 1,times=5;
/* while loops execution */
while( n <= times )
{
printf("C while loops: %d\n", n);
n++;
}
return 0;
}
Output:
C while loops:1
C while loops:2
C while loops:3
C while loops:4
C while loops:5
32
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Do..while loops:
C do while loops are very similar to the while loops, but it always executes the code
block at least once and furthermore as long as the condition remains true. This is an exit-
controlled loop.
Syntax:
do
{
statement(s);
}while( condition );
Example:
#include<stdio.h>
int main ()
{
/* local variable Initialization */
int n = 1,times=5;
/* do loops execution */
do
{
printf("C do while loops: %d\n", n);
n = n + 1;
}while( n <= times );
return 0;
}
Output:
C do while loops:1
C do while loops:2
C do while loops:3
33
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
C do while loops:4
C do while loops:5
for loops
C for loops is very similar to a while loops in that it continues to process a block of code
until a statement becomes false, and everything is defined in a single line. The for loop is
also entry-controlled loop.
Syntax:
Example:
#include<stdio.h>
int main ()
{
/* local variable Initialization */
int n,times=5;;
34
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Output:
C for loops:1
C for loops:2
C for loops:3
C for loops:4
C for loops:5
C Loop Control Statements
Loop control statements are used to change the normal sequence of execution of the loop.
Expanded
C program Preprocessor Source Compiler
Code
All preprocessor directives starts with hash # symbol.
Let's see a list of preprocessor directives.
o #include
o #define
o #undef
35
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
o #ifdef
o #ifndef
o #if
o #else
o #elif
o #endif
o #error
o #pragma
Preprocessor
S.No Purpose Syntax
directives
Used to paste code of given file into current
#include <filename>
#include file. It is used include system-defined and
1 #include “filename”
user-defined header files. If included file is
not found, compiler renders error.
Used to define constant or micro
2 #define #define PI 3.14
substitution. It can use any basic data type.
Used to undefine the constant or macro #define PI 3.14
3 #undef
defined by #define. #undef PI
Checks if macro is defined by #define. If #ifdef MACRO
4 #ifdef yes, it executes the code otherwise #else //code
code is executed, if present. #endif
Checks if macro is not defined by #define. #ifndef MACRO
5 #ifndef If yes, it executes the code otherwise #else //code
code is executed, if present. #endif
Evaluates the expression or condition. If
#if expression
condition is true, it executes the code
6 #if //code
otherwise #elseif or #else or #endif code is
#endif
executed.
#if expression
Evaluates the expression or condition if //if code
7 #else condition of #if is false. It can be used with #else
#if, #elif, #ifdef and #ifndef directives. //else code
#endif
Indicates error. The compiler gives fatal #error First include then c
8 #error error if #error directive is found and skips ompile
further compilation process.
Used to provide additional information to
the compiler. The #pragma directive is used #pragma token
9 #pragma
by the compiler to offer machine or 1.
operating-system feature.
36
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
$ vi filename.c
The diagram on right shows a simple program to add two numbers.
Then compile it using below command.
$ gcc –Wall filename.c –o filename
The option -Wall enables all compiler’s warning messages. This option is recommended to
generate better code.
The option -o is used to specify output file name. If we do not use this option, then an output file
with name a.out is generated.
After compilation executable is generated and we run the generated executable using below
command.
$ ./filename
What goes inside the compilation process?
Compiler converts a C program into an executable. There are four phases for a C program to
become an executable:
1. Pre-processing
2. Compilation
3. Assembly
4. Linking
By executing below command, We get the all intermediate files in the current directory along
with the executable.
37
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Pre-processing
This is the first phase through which source code is passed. This phase include:
Removal of Comments
Expansion of Macros
The preprocessed output is stored in the filename.i. Let’s see what’s inside filename.i:
using $vi filename.i
In the above output, source file is filled with lots and lots of info, but at the end our code
is preserved.
Analysis:
printf contains now a + b rather than add(a, b) that’s because macros have expanded.
Comments are stripped off.
#include<stdio.h> is missing instead we see lots of code. So header files has been
expanded and included in our source file.
Compiling
The next step is to compile filename.i and produce an; intermediate compiled output
file filename.s. This file is in assembly level instructions. Let’s see through this file using $vi
filename.s
Assembly
In this phase the filename.s is taken as input and turned into filename.o by assembler.
This file contain machine level instructions. At this phase, only existing code is converted into
machine language, the function calls like printf() are not resolved. Let’s view this file using $vi
filename.o
Linking
This is the final phase in which all the linking of function calls with their definitions are
done. Linker knows where all these functions are implemented. Linker does some extra work
also, it adds some extra code to our program which is required when the program starts and ends.
For example, there is a code which is required for setting up the environment like passing
command line arguments. This task can be easily verified by using $size filename.o and $size
filename. Through these commands, we know that how output file increases from an object file
to an executable file. This is because of the extra code that linker adds with our program.
38
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
data_type array_name[array_size];
39
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Initialization of C Array
A simple way to initialize array is by index. Notice that array index starts from 0 and
ends with [SIZE - 1].
marks[0]=80;//initialization of array
marks[1]=60;
marks[2]=70;
marks[3]=85;
marks[4]=75;
Example 1:
#include<stdio.h>
int main(){
int i=0;
int marks[5];//declaration of array
marks[0]=80;//initialization of array
marks[1]=60;
marks[2]=70;
marks[3]=85;
marks[4]=75;
//traversal of array
for(i=0;i<5;i++){
printf("%d \n",marks[i]);
}//end of for loop
return 0;
}
Output:
80
60
40
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
70
85
75
C Array: Declaration with Initialization
We can initialize the c array at the time of declaration. Let's see the code.
int marks[5]={20,30,40,50,60};
In such case, there is no requirement to define size. So it can also be written as the following
code.
int marks[]={20,30,40,50,60};
Example 2:
#include<stdio.h>
int main(){
int i=0;
int marks[5]={20,30,40,50,60};//declaration and initialization of array
//traversal of array
for(i=0;i<5;i++)
{
printf("%d \n",marks[i]);
}
return 0;
}
Output:
20
30
40
50
60
41
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
The two dimensional, three dimensional or other dimensional arrays are also known
as multidimensional arrays.
Declaration of two dimensional Array in C
We can declare an array in the c language in the following way.
data_type array_name[size1][size2];
42
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
arr[1][2] = 4
arr[2][0] = 3
arr[2][1] = 4
arr[2][2] = 5
arr[3][0] = 4
arr[3][1] = 5
arr[3][2] = 6
STRING OPERATIONS
What is meant by String?
String in C language is an array of characters that is terminated by \0 (null character).
There are two ways to declare string in c language.
1. By char array
2. By string literal
Let's see the example of declaring string by char array in C language.
char ch[10]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
As you know well, array index starts from 0, so it will be represented as in the figure
given below.
While declaring string, size is not mandatory. So you can write the above code as given
below:
char ch[]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
You can also define string by string literal in C language. For example:
char ch[]="javatpoint";
In such case, '\0' will be appended at the end of string by the compiler.
Difference between char array and string literal
43
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
The only difference is that string literal cannot be changed whereas string declared by
char array can be changed.
Example:
Let's see a simple example to declare and print string. The '%s' is used to print string in c
language.
#include<stdio.h>
#include <string.h>
int main(){
char ch[11]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
char ch2[11]="javatpoint";
printf("Char Array Value is: %s\n", ch);
printf("String Literal Value is: %s\n", ch2);
return 0;
}
Output:
Char Array Value is: javatpoint
String Literal Value is: javatpoint
1. String operations: length-strlen()
The strlen() function returns the length of the given string. It doesn't count null
character '\0'.
Example:
#include<stdio.h>
#include <string.h>
int main(){
char ch[20]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
printf("Length of string is: %d",strlen(ch));
return 0;
}
Output:
Length of string is: 10
44
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
45
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
46
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
These functions are provided by the system and stored in the library, therefore it is also
called Library Functions.
e.g. scanf(), printf(), strcpy, strlwr, strcmp, strlen, strcat etc.
To use these functions, you just need to include the appropriate C header files.
User Defined Functions
These functions are defined by the user at the time of writing the program.
Parts of Function
1. Function Prototype (function declaration)
2. Function Definition
3. Function Call
47
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
1. Function Prototype
Syntax:
Example:
int addition();
2. Function Definition
Syntax:
returnType functionName(Function
arguments)
{
//body of the function
}
Example:
int addition()
{
}
3. Calling a function in C
Syntax:
functionName(Function arguments)
48
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
49
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Call by reference
Call by Value
In call by value parameter passing method, the copy of actual parameter values are
copied to formal parameters and these formal parameters are used in called function. The
changes made on the formal parameters does not affect the values of actual parameters.
That means, after the execution control comes back to the calling function, the actual parameter
values remains same. For example consider the following program...
Example:
#include <stdio.h>
#include<conio.h>
void main(){
int num1, num2 ;
void swap(int,int) ; // function declaration
clrscr() ;
num1 = 10 ;
num2 = 20 ;
printf("\nBefore swap: num1 = %d, num2 = %d", num1, num2) ;
swap(num1, num2) ; // calling function
printf("\nAfter swap: num1 = %d\nnum2 = %d", num1, num2);
getch() ;
}
void swap(int a, int b) // called function
{
int temp ;
temp = a ;
a=b;
b = temp ;
}
Output:
Before swap: num1 = 10, num2 = 20
After swap: num1 = 10, num2 = 20 swap: num1 = 10, num2 = 20
50
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
In the above example program, the variables num1 and num2 are called actual
parameters and the variables a and b are called formal parameters. The value of num1 is copied
into a and the value of num2 is copied into b. The changes made on variables a and b does not
affect the values of num1 and num2.
Call by Reference
In Call by Reference parameter passing method, the memory location address of the
actual parameters is copied to formal parameters. This address is used to access the memory
locations of the actual parameters in called function. In this method of parameter passing, the
formal parameters must be pointer variables.
That means in call by reference parameter passing method, the address of the actual
parameters is passed to the called function and is received by the formal parameters (pointers).
Whenever we use these formal parameters in called function, they directly access the memory
locations of actual parameters. So the changes made on the formal parameters effects the
values of actual parameters. For example consider the following program...
Example:
#include <stdio.h>
#include<conio.h>
void main(){
int num1, num2 ;
void swap(int *,int *) ; // function declaration
clrscr() ;
num1 = 10 ;
num2 = 20 ;
printf("\nBefore swap: num1 = %d, num2 = %d", num1, num2) ;
swap(&num1, &num2) ; // calling function
printf("\nAfter swap: num1 = %d, num2 = %d", num1, num2);
getch() ;
}
void swap(int *a, int *b) // called function
{
int temp ;
51
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
temp = *a ;
*a = *b ;
*b = temp ;
}
Output:
Before swap: num1 = 10, num2 = 20
After swap: num1 = 20, num2 = 10
In the above example program, the addresses of variables num1 and num2 are copied to
pointer variables a and b. The changes made on the pointer variables a and b in called function
effects the values of actual parameters num1 and num2 in calling function.
strcmp(first_string, Compares the first string with second string. If both strings
4)
second_string) are same, it returns 0.
Math Functions
C Programming allows us to perform mathematical operations through the functions
defined in <math.h> header file. The <math.h> header file contains various methods for
performing mathematical operations such as sqrt(), pow(), ceil(), floor() etc.
52
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
There are various methods in math.h header file. The commonly used functions of math.h
header file are given below.
Rounds down the given number. It returns the integer value which
2) floor(number)
is less than or equal to given number.
53
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
3.000000
4.000000
2.645751
16.000000
27.000000
12
3.4 RECURSION
When function is called within the same function, it is known as recursion in C. The
function which calls the same function, is known as recursive function.
A function that calls itself, and doesn't perform any task after function call, is know
as tail recursion. In tail recursion, we generally call the same function with return statement. An
example of tail recursion is given below.
Let's see a simple example of recursion.
recursionfunction(){
recursionfunction();//calling self function
}
Example:
#include<stdio.h>
int factorial (int n)
{
if ( n < 0)
return -1; /*Wrong value*/
if (n == 0)
return 1; /*Terminating condition*/
return (n * factorial (n -1));
}
int main(){
int fact=0;
fact=factorial(5);
printf("\n factorial of 5 is %d",fact);
54
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
return 0;
}
Output:
factorial of 5 is 120
We can understand the above program of recursive method call by the figure given below:
3.5 POINTERS
The pointer in C language is a variable, it is also known as locator or indicator that
points to an address of a value.
Advantage of pointer
1) Pointer reduces the code and improves the performance, it is used to retrieving strings,
trees etc. and used with arrays, structures and functions.
2) We can return multiple values from function using pointer.
3) It makes you able to access any memory location in the computer's memory.
Usage of pointer
There are many usage of pointers in c language.
55
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Address Of Operator
The address of operator '&' returns the address of a variable. But, we need to use %u to
display the address of a variable.
Example:
#include<stdio.h>
int main(){
int number=50;
printf("value of number is %d, address of number is %u",number,&number);
return 0;
}
Output
value of number is 50, address of number is fff4
Declaring a pointer
The pointer in c language can be declared using * (asterisk symbol).
int *a;//pointer to int
char *c;//pointer to char
Pointer example
An example of using pointers printing the address and value is given below.
56
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
As you can see in the above figure, pointer variable stores the address of number variable
i.e. fff4. The value of number variable is 50. But the address of pointer variable p is aaa3.
By the help of * (indirection operator), we can print the value of pointer variable p.
Let's see the pointer example as explained for above figure.
#include<stdio.h>
int main(){
int number=50;
int *p;
p=&number;//stores the address of number variable
printf("Address of p variable is %x \n",p);
printf("Value of p variable is %d \n",*p);
return 0;
}
Output
Address of number variable is fff4
Address of p variable is fff4
Value of p variable is 50
NULL Pointer
A pointer that is not assigned any value but NULL is known as NULL pointer. If you
don't have any address to be specified in the pointer at the time of declaration, you can assign
NULL value. It will a better approach.
int *p=NULL;
In most the libraries, the value of pointer is 0 (zero).
Example: Pointer Program to swap 2 numbers without using 3rd variable
#include<stdio.h>
57
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int main(){
int a=10,b=20,*p1=&a,*p2=&b;
printf("Before swap: *p1=%d *p2=%d",*p1,*p2);
*p1=*p1+*p2;
*p2=*p1-*p2;
*p1=*p1-*p2;
printf("\nAfter swap: *p1=%d *p2=%d",*p1,*p2);
return 0;
}
Output:
Before swap: *p1=10 *p2=20
After swap: *p1=20 *p2=10
58
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
As you can see in the above figure, p2 contains the address of p (fff2) and p contains the
address of number variable (fff4).
Example:
#include<stdio.h>
int main(){
int number=50;
int *p;//pointer to int
int **p2;//pointer to pointer
p=&number;//stores the address of number variable
p2=&p;
printf("Address of number variable is %x \n",&number);
printf("Address of p variable is %x \n",p);
printf("Value of *p variable is %d \n",*p);
printf("Address of p2 variable is %x \n",p2);
printf("Value of **p2 variable is %d \n",*p);
return 0;
}
Output:
Address of number variable is fff4
Address of p variable is fff4
Value of *p variable is 50
Address of p2 variable is fff2
Value of **p variable is 50
59
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
o Comparison
Incrementing Pointer in C
Incrementing a pointer is used in array because it is contiguous memory location.
Moreover, we know the value of next location.
Increment operation depends on the data type of the pointer variable. The formula of
incrementing pointer is given below:
60
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
61
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
62
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
63
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Notice, that there is an equal difference (difference of 1 byte) between any two consecutive
elements of array charArr.
But, since pointers just point at the location of another variable, it can store any address.
Relation between Arrays and Pointers
Consider an array:
int arr[4];
In C programming, name of the array always points to address of the first element of an
array.
In the above example, arr and &arr[0] points to the address of the first element.
&arr[0] is equivalent to arr
Since, the addresses of both are the same, the values of arr and &arr[0] are also the same.
arr[0] is equivalent to *arr (value of an address of the pointer)
Similarly,
&arr[1] is equivalent to (arr + 1) AND, arr[1] is equivalent to *(arr + 1).
&arr[2] is equivalent to (arr + 2) AND, arr[2] is equivalent to *(arr + 2).
&arr[3] is equivalent to (arr + 3) AND, arr[3] is equivalent to *(arr + 3).
.
.
&arr[i] is equivalent to (arr + i) AND, arr[i] is equivalent to *(arr + i).
In C, you can declare an array and can use pointer to alter the data of an array.
Example: Program to find the sum of six numbers with arrays and pointers
#include <stdio.h>
int main()
{
int i, classes[6],sum = 0;
printf("Enter 6 numbers:\n");
for(i = 0; i < 6; ++i)
64
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
{
// (classes + i) is equivalent to &classes[i]
scanf("%d",(classes + i));
// *(classes + i) is equivalent to classes[i]
sum += *(classes + i);
}
printf("Sum = %d", sum);
return 0;
}
Output:
Enter 6 numbers:
2
3
4
5
3
4
Sum = 21
65
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
int i, *array_of_pointers[ARRAY_SIZE];
for ( i = 0; i < ARRAY_SIZE; i++)
{
/* for indices 1 through 5, set a pointer to
point to a corresponding integer: */
array_of_pointers[i] = &array_of_integers[i];
}
for ( i = 0; i < ARRAY_SIZE; i++)
{
/* print the values of the integers pointed to
by the pointers: */
printf("array_of_integers[%d] = %d\n", i, *array_of_pointers[i] );
}
return 0;
}
Output:
array_of_integers[0] = 5
array_of_integers[1] = 10
array_of_integers[2] = 20
array_of_integers[3] = 40
array_of_integers[4] = 80
UNIT IV STRUCTURES
Structure - Nested structures – Pointer and Structures – Array of structures – Example Program
using structures and pointers – Self referential structures – Dynamic memory allocation - Singly
linked list - typedef
4.1 STRUCTURE
Structure in c language is a user defined datatype that allows you to hold different
type of elements.
Each element of a structure is called a member.
66
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
It works like a template in C++ and class in Java. You can have different type of
elements in it.
It is widely used to store student information, employee information, product
information, book information etc.
Defining structure
The struct keyword is used to define structure. Let's see the syntax to define structure in c.
struct structure_name
{
data_type member1;
data_type member2;
.
.
data_type memberN;
};
67
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
68
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Let's see the code to access the id member of p1 variable by . (member) operator.
p1.id
Example:
#include<stdio.h>
#include <string.h>
struct employee
{ int id;
char name[50];
}e1; //declaring e1 variable for structure
int main( )
{
//store first employee information
e1.id=101;
strcpy(e1.name, "Sonoo Jaiswal");//copying string into char array
//printing first employee information
printf( "employee 1 id : %d\n", e1.id);
printf( "employee 1 name : %s\n", e1.name);
return 0;
}
Output:
employee 1 id : 101
employee 1 name : Sonoo Jaiswal
69
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
struct Date
{
int dd;
int mm;
int yyyy;
};
struct Employee
{
int id;
char name[20];
struct Date doj;
}emp1;
As you can see, doj (date of joining) is the variable of type Date. Here doj is used as a
member in Employee structure. In this way, we can use Date structure in many structures.
Embedded structure
We can define structure within the structure also. It requires less code than previous way.
But it can't be used in many structures.
struct Employee
{
int id;
char name[20];
struct Date
{
int dd;
int mm;
int yyyy;
}doj;
}emp1;
Accessing Nested Structure
We can access the member of nested structure by Outer_Structure.
Nested_Structure.member as given below:
70
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
e1.doj.dd
e1.doj.mm
e1.doj.yyyy
71
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Output:
Enter Records of 5 students
Enter Rollno:1
Enter Name:Sonoo
Enter Rollno:2
Enter Name:Ratan
Enter Rollno:3
Enter Name:Vimal
Enter Rollno:4
Enter Name:James
Enter Rollno:5
Enter Name:Sarfraz
Student Information List:
Rollno:1, Name:Sonoo
Rollno:2, Name:Ratan
Rollno:3, Name:Vimal
Rollno:4, Name:James
Rollno:5, Name:Sarfraz
72
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Memory can't be increased while executing Memory can be increased while executing
program. program.
ptr=(cast-type*)malloc(byte-size)
Example:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
73
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
}
printf("Enter elements of array: ");
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf("Sum=%d",sum);
free(ptr);
return 0;
}
Output:
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
calloc()
The calloc() function allocates multiple block of requested memory.
It initially initialize all bytes to zero.
It returns NULL if memory is not sufficient.
The syntax of calloc() function is given below:
ptr=(cast-type*)calloc(number, byte-size)
Example:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
74
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
ptr=realloc(ptr, new-size)
free()
The memory occupied by malloc() or calloc() functions must be released by calling free()
function. Otherwise, it will consume memory until program exit.
75
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
free(ptr)
76
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
A node is a collection of two sub-elements or parts. A data part that stores the element
and a next part that stores the link to the next node.
Linked List:
A linked list is formed when many such nodes are linked together to form a chain. Each
node points to the next node present in the order. The first node is always used as a reference to
traverse the list and is called HEAD. The last node points to NULL.
Declaring a Linked list :
In C language, a linked list can be implemented using structure and pointers .
struct LinkedList
{
int data;
struct LinkedList *next;
};
The above definition is used to create every node in the list. The data field stores the
element and the next is a pointer to store the address of the next node.
In place of a data type, struct LinkedList is written before next. That's because its a self-
referencing pointer. It means a pointer that points to whatever it is a part of. Here next is a part
of a node and it will point to the next node.
Creating a Node:
Let's define a data type of struct LinkedList to make code cleaner.
typedef struct LinkedList *node; //Define node as pointer of data type struct LinkedList
node createNode(){
node temp; // declare a node
temp = (node)malloc(sizeof(struct LinkedList)); // allocate memory using malloc()
temp->next = NULL;// make next point to NULL
return temp;//return the new node
}
77
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Here the new node will always be added after the last node. This is known as inserting a
node at the rear end.
Food for thought
This type of linked list is known as simple or singly linked list. A simple linked list can be
traversed in only one direction from head to the last node.
78
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
4.7 TYPEDEF
The C programming language provides a keyword called typedef, by using this keyword you
can create a user defined name for existing data type. Generally typedef are use to create
an alias name (nickname).
Declaration of typedef
Example:
typedef int tindata;
Example program:
#include<stdio.h>
#include<conio.h>
typedef int intdata;
void main()
{
int a=10;
integerdata b=20
79
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Sum::30
Code Explanation
In above program Intdata is an user defined name or alias name for an integer data
type.
All properties of the integer will be applied on Intdata also.
Integerdata is an alias name to existing user defined name called Intdata.
Advantages of typedef
80
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
student a,b;
This way typedef make your declaration simpler.
5.1 FILES
A file represents a sequence of bytes on the disk where a group of related data is stored.
File is created for permanent storage of data. It is a readymade structure.
Why files are needed?
When a program is terminated, the entire data is lost. Storing in a file will preserve your
data even if the program terminates.
If you have to enter a large number of data, it will take a lot of time to enter them all.
However, if you have a file containing all the data, you can easily access the contents of
the file using few commands in C.
You can easily move your data from one computer to another without any changes.
Types of Files
When dealing with files, there are two types of files you should know about:
1. Text files
2. Binary files
1. Text files
Text files are the normal .txt files that you can easily create using Notepad or any simple
text editors.
When you open those files, you'll see all the contents within the file as plain text. You
can easily edit or delete the contents.
They take minimum effort to maintain, are easily readable, and provide least security
and takes bigger storage space.
81
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
2. Binary files
Binary files are mostly the .bin files in your computer.
Instead of storing data in plain text, they store it in the binary form (0's and 1's).
They can hold higher amount of data, are not readable easily and provides a better
security than text files.
File Operations
In C, you can perform four major operations on the file, either text or binary:
1. Creating a new file
2. Opening an existing file
3. Closing a file
4. Reading from and writing information to a file
5. C provides a number of functions that helps to perform basic file operations. Following
are the functions,
Function description
82
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Here, *fp is the FILE pointer (FILE *fp), which will hold the reference to the opened(or
created) file.
filename is the name of the file to be opened and mode specifies the purpose of opening the file.
Mode can be of following types,
Mode Description
83
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Here fclose() function closes the file and returns zero on success, or EOF if there is an
error in closing the file. This EOF is a constant defined in the header file stdio.h.
Input/ Output operation on File
In the above table we have discussed about various file I/O functions to perform reading
and writing on file. getc() and putc() are the simplest functions which can be used to read and
write individual characters to a file.
Example:
#include<stdio.h>
int main()
{
FILE *fp;
char ch;
fp = fopen("one.txt", "w");
printf("Enter data...");
while( (ch = getchar()) != EOF) {
putc(ch, fp);
}
fclose(fp);
fp = fopen("one.txt", "r");
while( (ch = getc(fp)! = EOF)
printf("%c",ch);
// closing the file pointer
fclose(fp);
return 0;
}
Reading and Writing to File using fprintf() and fscanf()
#include<stdio.h>
struct emp
{
char name[10];
int age;
84
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
};
void main()
{
struct emp e;
FILE *p,*q;
p = fopen("one.txt", "a");
q = fopen("one.txt", "r");
printf("Enter Name and Age:");
scanf("%s %d", e.name, &e.age);
fprintf(p,"%s %d", e.name, e.age);
fclose(p);
do
{
fscanf(q,"%s %d", e.name, e.age);
printf("%s %d", e.name, e.age);
}
while(!feof(q));
}
In this program, we have created two FILE pointers and both are refering to the same file
but in different modes.
fprintf() function directly writes into the file, while fscanf() reads from the file, which can
then be printed on the console using standard printf() function.
Difference between Append and Write Mode
Write (w) mode and Append (a) mode, while opening a file are almost the same. Both are
used to write in a file. In both the modes, new file is created if it doesn't exists already.
The only difference they have is, when you open a file in the write mode, the file is reset,
resulting in deletion of any data already present in the file. While in append mode this will not
happen.
Append mode is used to append or add data to the existing data of file(if any). Hence,
when you open a file in Append(a) mode, the cursor is positioned at the end of the present
data in the file.
85
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
fread() is also used in the same way, with the same arguments like fwrite() function. Below
mentioned is a simple example of writing into a binary file
const char *mytext = "The quick brown fox jumps over the lazy dog";
FILE *bfp= fopen("test.txt", "wb");
if (bfp)
{
fwrite(mytext, sizeof(char), strlen(mytext), bfp);
fclose(bfp);
}
86
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
Where
file pointer ---- It is the pointer which points to the file.
displacement ---- It is positive or negative. This is the number of bytes which are skipped
backward (if negative) or forward( if positive) from the current position. This is attached with L
because this is a long integer.
Pointer position:
This sets the pointer position in the file.
87
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
2)fseek( p,5L,1)
1 means current position of the pointer position. From this statement pointer position is
skipped 5 bytes forward from the current position.
3)fseek(p,-5L,1)
From this statement pointer position is skipped 5 bytes backward from the current
position.
ftell(): It tells the byte location of current position of cursor in file pointer.
rewind(): It moves the control to beginning of the file.
Example program for fseek():
Write a program to read last ‘n’ characters of the file using appropriate file functions(Here
we need fseek() and fgetc())
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fp;
char ch;
clrscr();
fp=fopen("file1.c", "r");
if(fp==NULL)
printf("file cannot be opened");
else
{
printf("Enter value of n to read last ‘n’ characters");
scanf("%d",&n);
fseek(fp,-n,2);
while((ch=fgetc(fp))!=EOF)
{
printf("%c\t",ch);}
}
}
88
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
fclose(fp);
getch();
}
Here argc counts the number of arguments on the command line and argv[ ] is a pointer
array which holds pointers of type char which points to the arguments passed to the program.
Example:
#include <stdio.h>
#include <conio.h>
int main(int argc, char *argv[])
{
int i;
if( argc >= 2 )
{
printf("The arguments supplied are:\n");
for(i = 1; i < argc; i++)
{
printf("%s\t", argv[i]);
}
}
else
{
printf("argument list is empty.\n");
89
Programming in C Ms. A.Mary JaNiS, Assistant Professor/CSE, Alpha College of Engineering
}
return 0;
}
Remember that argv[0] holds the name of the program and argv[1] points to the first
command line argument and argv[n] gives the last argument. If no argument is
supplied, argc will be 1.
90