C Programming Notes
C Programming Notes
NOTES
1
ALGORITHM
Algorithm is a finite sequence of instructions, each of which has a clear meaning and can be
performed with a finite amount of effort in a finite length of time. No matter what the input values
may be, an algorithm terminates after executing a finite number of instructions.
We represent an algorithm using a pseudo language that is a combination of the constructs of a
programming language together with informal English statements.
The ordered set of instructions required to solve a problem is known as an algorithm.
The characteristics of a good algorithm are:
• Precision – the steps are precisely stated (defined).
• Uniqueness – results of each step are uniquely defined and only depend on the input
and the result of the preceding steps.
• Finiteness – the algorithm stops after a finite number of instructions are executed.
• Input – the algorithm receives input.
• Output – the algorithm produces output.
• Generality – the algorithm applies to a set of inputs.
Example
Q. Write a algorithem to find out number is odd or even?
Ans.
step 1 : start step 2 : input
number step 3 : rem=number
mod 2 step 4 : if rem=0 then
print "number even"
else
print "number odd"
endif
step 5 : stop
FLOWCHART
Flowchart is a diagrammatic representation of an algorithm. Flowchart is very helpful in writing
program and explaining program to others.
Symbols Used In Flowchart
Different symbols are used for different states in flowchart, For example: Input/Output and
decision making has different symbols. The table below describes all the symbols that are used in
making flowchart
2
Examples of flowcharts in programming
Draw a flowchart to add two numbers entered by user.
3
Draw flowchart to find the largest among three different numbers entered by user.
INTRODUCTION TO C LANGUAGE
C is a general-purpose high level language that was originally developed by Dennis Ritchie for the
Unix operating system. It was first implemented on the Digital Eqquipment Corporation PDP-11
computer in 1972.
4
The Unix operating system and virtually all Unix applications are written in the C language. C
has now become a widely used professional language for various reasons.
• Easy to learn
• Structured language
• It produces efficient programs.
• It can handle low-level activities.
• It can be compiled on a variety of computers.
Facts about C
• C was invented to write an operating system called UNIX.
• C is a successor of B language which was introduced around 1970
• The language was formalized in 1988 by the American National Standard Institue
(ANSI).
• By 1973 UNIX OS almost totally written in C.
• Today C is the most widely used System Programming Language.
• Most of the state of the art software have been implemented using C Why to use C?
C was initially used for system development work, in particular the programs that make-up the
operating system. C was adoped as a system development language because it produces code that
runs nearly as fast as code written in assembly language. Some examples of the use of C might be:
• Operating Systems
• Language Compilers
• Assemblers
• Text Editors
• Print Spoolers
• Network Drivers
• Modern Programs
• Data Bases
• Language Interpreters
• Utilities
C Program File
All the C programs are writen into text files with extension ".c" for example hello.c. You can use
"vi" editor to write your C program into a file.
5
HISTORY TO C LANGUAGE
C is a general-purpose language which has been closely associated with the UNIX operating
system for which it was developed - since the system and most of the programs that run it are
written in C.
Many of the important ideas of C stem from the language BCPL, developed by Martin Richards.
The influence of BCPL on C proceeded indirectly through the language B, which was written by
Ken Thompson in 1970 at Bell Labs, for the first UNIX system on a DEC PDP-
7. BCPL and B are "type less" languages whereas C provides a variety of data types.
In 1972 Dennis Ritchie at Bell Labs writes C and in 1978 the publication of The C Programming
Language by Kernighan & Ritchie caused a revolution in the computing world.
In 1983, the American National Standards Institute (ANSI) established a committee to provide a
modern, comprehensive definition of C. The resulting definition, the ANSI standard, or "ANSI
C", was completed late 1988.
6
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. 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
1. Declaration part: The declaration part declares all the variables used in the
executable part.
2. 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.
7
The C Compilation Model
The Preprocessor
The Preprocessor accepts source code as input and is responsible for
• removing comments
• Interpreting special preprocessor directives denoted by #. For example
• #include -- includes contents of a named file. Files usually called header
files. e.g o #include <math.h> -- standard library maths file.
o #include <stdio.h> -- standard library I/O file
• #define -- defines a symbolic name or constant. Macro substitution. o
#define MAX_ARRAY_SIZE 100
C Compiler
The C compiler translates source to assembly code. The source code is received from the
preprocessor.
Assembler
The assembler creates object code. On a UNIX system you may see files with a .o suffix
(.OBJ on MSDOS) to indicate object code files.
Link Editor
If a source file references library functions or functions defined in other source files the link
editor combines these functions (with main()) to create an executable file.
8
C TOKENS
C tokens are the basic buildings blocks in C language which are constructed together to write a C
program.
Each and every smallest individual unit in a C program is known as C tokens.
C tokens are of six types. They are
Keywords (eg: int, while),
Identifiers (eg: main, total),
Constants (eg: 10, 20),
Strings (eg: ―total‖, ―hello‖),
Special symbols (eg: (), {}),
Operators (eg: +, /,-,*)
C KEYWORDS
C keywords are the words that convey a special meaning to the c compiler. The keywords
cannot be used as variable names.
The list of C keywords is given below:
auto break case char const
volatile while
C IDENTIFIERS
9
Identifiers are used as the general terminology for the names of variables, functions and arrays.
These are user defined names consisting of arbitrarily long sequence of letters and digits with
either a letter or the underscore(_) as a first character.
There are certain rules that should be followed while naming c identifiers:
They must begin with a letter or underscore (_).
They must consist of only letters, digits, or underscore. No other special character is allowed.
It should not be a keyword.
It must not contain white space.
It should be up to 31 characters long as only first 31 characters are significant.
Some examples of c identifiers:
Name Remark
_A9 Valid
Temp.var Invalid as it contains special character other than the underscore
void Invalid as it is a keyword
C CONSTANTS
A C constant refers to the data items that do not change their value during the program execution.
Several types of C constants that are allowed in C are:
Integer Constants
Integer constants are whole numbers without any fractional part. It must have at least one digit
and may contain either + or – sign. A number with no sign is assumed to be positive.
There are three types of integer constants:
Decimal Integer Constants
Integer constants consisting of a set of digits, 0 through 9, preceded by an optional – or + sign.
Example of valid decimal integer constants
341, -341, 0, 8972
Octal Integer Constants
Integer constants consisting of sequence of digits from the set 0 through 7 starting with 0 is said
to be octal integer constants.
Example of valid octal integer constants
010, 0424, 0, 0540
10
Hexadecimal Integer Constants
Hexadecimal integer constants are integer constants having sequence of digits preceded by 0x or
0X. They may also include alphabets from A to F representing numbers 10 to 15.
Example of valid hexadecimal integer constants
0xD, 0X8d, 0X, 0xbD
It should be noted that, octal and hexadecimal integer constants are rarely used in programming.
Real Constants
The numbers having fractional parts are called real or floating point constants. These may be
represented in one of the two forms called fractional form or the exponent form and may also
have either + or – sign preceding it.
Example of valid real constants in fractional form or decimal notation
0.05, -0.905, 562.05, 0.015
Representing a real constant in exponent form
The general format in which a real number may be represented in exponential or scientific form
is mantissa e exponent
The mantissa must be either an integer or a real number expressed in decimal notation. The
letter e separating the mantissa and the exponent can also be written in uppercase i.e. E
And, the exponent must be an integer.
Examples of valid real constants in exponent form are:
252E85, 0.15E-10, -3e+8
Character Constants
A character constant contains one single character enclosed within single quotes.
Examples of valid character constants
‗a‘ , ‗Z‘, ‗5‘
It should be noted that character constants have numerical values known as ASCII values, for
example, the value of ‗A‘ is 65 which is its ASCII value.
Escape Characters/ Escape Sequences
C allows us to have certain non graphic characters in character constants. Non graphic characters
are those characters that cannot be typed directly from keyboard, for example, tabs, carriage
return, etc.
11
These non graphic characters can be represented by using escape sequences represented by a
backslash() followed by one or more characters.
NOTE: An escape sequence consumes only one byte of space as it represents a single character.
STRING CONSTANTS
String constants are sequence of characters enclosed within double quotes. For example,
―hello‖
―abc‖
―hello911‖
Every sting constant is automatically terminated with a special character „‟ called thenull
character which represents the end of the string.
For example, ―hello‖ will represent ―hello‖ in the memory.
Thus, the size of the string is the total number of characters plus one for the null character.
Special Symbols
The following special symbols are used in C having some special meaning and thus, cannot be
used for some other purpose.
[] () {} , ; : * … = #
12
Braces{}: These opening and ending curly braces marks the start and end of a block of code
containing more than one executable statement.
Parentheses(): These special symbols are used to indicate function calls and function
parameters.
Brackets[]: Opening and closing brackets are used as array element reference. These indicate
single and multidimensional subscripts.
VARIABLES
A variable is nothing but a name given to a storage area that our programs can manipulate. Each
variable in C has a specific type, which determines the size and layout of the variable's memory;
the range of values that can be stored within that memory; and the set of operations that can be
applied to the variable.
The name of a variable can be composed of letters, digits, and the underscore character. It must
begin with either a letter or an underscore. Upper and lowercase letters are distinct because C is
case-sensitive. Based on the basic types explained in the previous chapter, there will be the
following basic variable types −
Type Description
C programming language also allows defining various other types of variables like Enumeration,
Pointer, Array, Structure, Union, etc.
Variable Definition in C
A variable definition tells the compiler where and how much storage to create for the variable. A
variable definition specifies a data type and contains a list of one or more variables of that type as
follows −
13
type variable_list;
Here, type must be a valid C data type including char, w_char, int, float, double, bool, or any user-
defined object; and variable_list may consist of one or more identifier names separated by
commas. Some valid declarations are shown here −
int i, j, k; char
c, ch;
float f, salary;
double d;
The line int i, j, k; declares and defines the variables i, j, and k; which instruct the compiler to
create variables named i, j and k of type int.
Variables can be initialized (assigned an initial value) in their declaration. The initializer consists
of an equal sign followed by a constant expression as follows −
14
1. Arithmetic operators
2. Assignment operators
3. Relational operators
4. Logical operators
5. Bit wise operators
6. Conditional operators (ternary operators)
7. Increment/decrement operators
8. Special operators
4 Logical operators
These operators are used to perform logical
15
16
#include <stdio.h>
int main()
div = a/b;
mod = a%b;
of a, b is : %d\n", mod);
OUTPUT:
Addition of a, b is : 60
Subtraction of a, b is : 20
Multiplication of a, b is : 800
Division of a, b is : 2
Modulus of a, b is : 0
ASSIGNMENT OPERATORS IN C
In C programs, values for the variables are assigned using assignment operators.
For example, if the value ―10‖ is to be assigned for the variable ―sum‖, it can be assigned as
―sum = 10;‖
17
Simple
assignment
operator 10 is assigned
= sum = 10 to variable sum
This is same as
sum = sum – 10
-= sum -= 10
This is same as
sum = sum / 10
/+ sum /= 10
This is same as
sum = sum %
sum %= 10
%= 10
This is same as
sum = sum &
10
&= sum&=10
18
# include <stdio.h>
Total=0,i;
for(i=0;i<10;i++)
} printf("Total = %d",
Total);
5 == x == y x is equal to y
19
x is not equal to y
6 != x != y
int main() {
int m=40,n=20;
if (m == n) {
equal");
}
OUTPUT:
20
int main()
21
int m=40,n=20; int
o=20,p=30; if (m>n
&& m !=0)
true\n");
condition is true\n");
true\n");
true. " \
}
OUTPUT:
In this program, operators (&&, || and !) are used to perform logical operations on the given
expressions.
22
&& operator – ―if clause‖ becomes true only when both conditions (m>n and m! =0) is true.
Else, it becomes false.
|| Operator – ―if clause‖ becomes true when any one of the condition (o>p || p!=20) is true. It
becomes false when none of the condition is true.
! Operator – It is used to reverses the state of the operand.
If the conditions (m>n && m!=0) is true, true (1) is returned. This value is inverted by ―!‖
operator.
So, ―! (m>n and m! =0)‖ returns false (0).
x x
& ^
y y
0 0 0 0 0 & Bitwise_AND
0 1 1 0 1 | Bitwise OR
1 0 1 0 1 ~ Bitwise_NOT
1 1 1 1 0 ^ XOR
23
>> Right Shift
Consider x=40 and y=80. Binary form of these values are given below.
x = 00101000 y=
01010000
All bit wise operations for x and y are given below.
x&y = 00000000 (binary) = 0 (decimal)
x|y = 01111000 (binary) = 120 (decimal)
~x = 11111111111111111111111111 11111111111111111111111111111111010111
.. ..= -41 (decimal)
x^y = 01111000 (binary) = 120 (decimal)
x << 1 = 01010000 (binary) = 80 (decimal)
x >> 1 = 00010100 (binary) = 20 (decimal)
Note:
Bit wise NOT: Value of 40 in binary
is0000000000000000000000000000000000000000000000000010100000000000. So, all 0‘s are
converted into 1‘s in bit wise NOT operation.
Bit wise left shift and right shift : In left shift operation ―x << 1 ―, 1 means that the bits will
be left shifted by one place. If we use it as ―x << 2 ―, then, it means that the bits will be left
shifted by 2 places.
main()
AND_opr = (m&n);
OR_opr = (m|n);
24
NOT_opr = (~m); XOR_opr = (m^n);
OUTPUT:
AND_opr value = 0
OR_opr value = 120
NOT_opr value = -41
XOR_opr value = 120
left_shift value = 80
right_shift value = 20
In above example, if A is greater than 100, 0 is returned else 1 is returned. This is equal to if else
conditional statements.
int main() {
int x=1, y ;
25
y = ( x ==1 ? 2 : 0 ) ; printf("x
OUTPUT:
x value is 1
y value is 2
C – Increment/decrement Operators
PREVNEXT
Increment operators are used to increase the value of the variable by one and decrement operators
are used to decrease the value of the variable by one in C programs.
Syntax:
Increment operator: ++var_name ;( or) var_name++; Decrement
operator: – -var_name; (or) var_name – -;
Example:
Increment operator : ++ i ; i ++ ;
Decrement operator : – – i ; i – – ;
#include <stdio.h>
int main() {
int i=1;
while(i<10)
{
printf("%d ",i);
i++;
26
}
}
OUTPUT:
123456789
#include <stdio.h>
i=20;
while(i>10)
{
printf("%d ",i);
i--;
27
}
OUTPUT:
20 19 18 17 16 15 14 13 12 11
1 Pre increment
++i Value of i is
28
#include <stdio.h>
int main() {
int i=0;
while(++i < 5 )
{
printf("%d ",i);
return 0;
}
OUTPUT:
1234
Step 1 : In above program, value of ―i‖ is incremented from 0 to 1 using pre -increment
operator.
Step 2 : This incremented value ―1‖ is compared with 5 in while expression.
Step 3 : Then, this incremented value ―1‖ is assigned to the variable ―i‖.
Above 3 steps are continued until while expression becomes false and output is displayed as
―1 2 3 4‖.
int main() {
int i=0;
while(i++ < 5 )
printf("%d ",i);
return 0;
}
OUTPUT:
29
12345
int main() {
int i=10;
while(--i > 5 )
printf("%d ",i);
return 0;
}
OUTPUT:
9876
Step 1 : In above program, value of ―i‖ is decremented from 10 to 9 using pre -decrement
operator.
Step 2 : This decremented value ―9‖ is compared with 5 in while expression.
Step 3 : Then, this decremented value ―9‖is assigned to the variable ―i‖.
Above 3 steps are continued until while expression becomes false and output is displayed as
―9 8 7 6‖.
int main()
30
int i=10;
while(i-- > 5 )
{
printf("%d ",i);
return 0;
31
EXAMPLE PROGRAM FOR & AND * OPERATORS IN C
In this program, ―&‖ symbol is used to get the address of the variable and ―*‖ symbol is
used to get the value of the variable that the pointer is pointing to. Please refer C – pointer
topic to know more about pointers.
32
#include <stdio.h>
*ptr, q; q = 50;
ptr = &q;
OUTPUT:
50
main()
{ int
a;
char b;
float c;
type:%d\n",sizeof(d)); return 0;
33
OUTPUT:
EXPRESSIONS
Arithmetic expression in C is a combination of variables, constants and operators written in a
proper syntax. C can easily handle any complex mathematical expressions but these
mathematical expressions have to be written in a proper syntax. Some examples of mathematical
expressions written in proper syntax of C are
Note: C does not have any operator for exponentiation.
C operators in order of precedence (highest to lowest). Their associativity indicates in what order
operators of equal precedence in an expression are applied.
Operator Description Associativity
() Parentheses (function call) (see Note 1) left-to-right
[] Brackets (array subscript)
. Member selection via object name
-> Member selection via pointer
++ -- Postfix increment/decrement (see Note 2)
++ -- Prefix increment/decrement right-to-left
+- Unary plus/minus
!~ Logical negation/bitwise complement
(type) Cast (convert value to temporary value of type)
* Dereference
& Address (of operand)
sizeof Determine size in bytes on this implementation
* / % Multiplication/division/modulus left-to-right
+ - Addition/subtraction left-to-right
<< >> Bitwise shift left, Bitwise shift right left-to-right
< <= Relational less than/less than or equal to left-to-right
> >= Relational greater than/greater than or equal to
== != Relational is equal to/is not equal to left-to-right
34
& Bitwise AND left-to-right
^ Bitwise exclusive OR left-to-right
| Bitwise inclusive OR left-to-right
&& Logical AND left-to-right
|| Logical OR left-to-right
?: Ternary conditional right-to-left
= Assignment right-to-left
+= -= Addition/subtraction assignment
*= /= Multiplication/division assignment
%= &= Modulus/bitwise AND assignment
^= |= Bitwise exclusive/inclusive OR assignment
<<= >>= Bitwise shift left/right assignment
, Comma (separate expressions) left-to-right
Note 1:
Parentheses are also used to group sub-expressions to force a
different precedence; such parenthetical expressions can be
nested and are evaluated from inner to outer.
Note 2:
Postfix increment/decrement have high precedence, but the actual
increment or decrement of the operand is delayed (to be
accomplished sometime before the statement completes
execution). So in the statement y = x * z++; the current value of z
is used to evaluate the expression (i.e., z++ evaluates to z) and z
only incremented after all else is done.
EVALUATION OF EXPRESSION
At first, the expressions within parenthesis are evaluated. If no parenthesis is present, then the
arithmetic expression is evaluated from left to right. There are two priority levels of operators in
C.
High priority: * / %
Low priority: + -
The evaluation procedure of an arithmetic expression includes two left to right passes through the
entire expression. In the first pass, the high priority operators are applied as they are encountered
and in the second pass, low priority operations are applied as they are encountered.
35
Suppose, we have an arithmetic expression as:
x = 9 – 12 / 3 + 3 *2 - 1
This expression is evaluated in two left to right passes as:
First Pass
Step 1: x = 9-4 + 3 * 2 – 1
Step 2: x = 9 – 4 + 6 – 1
Second Pass
Step 1: x = 5 + 6 – 1
Step 2: x = 11 – 1
Step 3: x = 10
But when parenthesis is used in the same expression, the order of evaluation gets changed.
For example,
x = 9 – 12 / (3 + 3) * (2 – 1)
When parentheses are present then the expression inside the parenthesis are evaluated first from
left to right. The expression is now evaluated in three passes as:
First Pass
Step 1: x = 9 – 12 / 6 * (2 – 1)
Step 2: x= 9 – 12 / 6 * 1
Second Pass
Step 1: x= 9 – 2 * 1
Step 2: x = 9 – 2
Third Pass
Step 3: x= 7
There may even arise a case where nested parentheses are present (i.e. parenthesis inside
parenthesis). In such case, the expression inside the innermost set of parentheses is evaluated first
and then the outer parentheses are evaluated.
For example, we have an expression as:
x = 9 – ((12 / 3) + 3 * 2) – 1
The expression is now evaluated as:
First Pass:
36
Step 1: x = 9 – (4 + 3 * 2) – 1
Step 2: x= 9 – (4 + 6) – 1
Step 3: x= 9 – 10 -1
Second Pass
Step 1: x= - 1 – 1
Step 2: x = -2
Note: The number of evaluation steps is equal to the number of operators in the arithmetic
expression.
37
It should be noted that the final result of expression is converted to type of variable on left side of
assignment operator before assigning value to it.
Also, conversion of float to int causes truncation of fractional part, conversion of double to float
causes rounding of digits and the conversion of long int to int causes dropping of excess higher
order bits.
38
Formatted Output
The function printf() is used for formatted output to standard output based on a format
specification. The format specification string, along with the data to be output, are the parameters
to the printf() function.
Syntax:
printf (format, data1, data2,……..);
In this syntax format is the format specification string. This string contains, for each variable to
be output, a specification beginning with the symbol % followed by a character called the
conversion character.
Example:
printf (―%c‖, data1);
The character specified after % is called a conversion character because it allows one data type to
be converted to another type and printed.
See the following table conversion character and their meanings.
Conversion Meaning
Character
d The data is converted to decimal (integer)
c The data is taken as a character.
s The data is a string and character from the string , are printed until a NULL,
character is reached.
39
#include<stdio.h>
#include<conio.h>
Main()
{
Char alphabh="A"; int
number1= 55; float
number2=22.34;
printf(―char=
%c\n‖,alphabh); printf(―int=
%d\n‖,number1);
printf(―float=
%f\n‖,number2); getch();
clrscr(); retrun 0;
}
Output Here…
char =A int=
55
flaot=22.340000
What is the
output of the
statement?
40
• A period: Separating the width from the next digit.
• A digit following the period: specifying the precision (number of decimal places for
numeric data) or the maximum number of characters to be output.
• Letter 1: To indicate that the data item is a long integer and not an int.
41
Int num=65; printf(―Value of num is : %d\n:, num);
printf(―Character equivalent of %d is %c\n‖, num ,
num); getch(); clrscr(); rerurn o; }
Output Here…
char =A int= 55
flaot=22.340000
Formatted Input
The function scanf() is used for formatted input from standard input and provides many of the
conversion facilities of the function printf(). Syntax
scanf (format, num1, num2,……);
The function scnaf() reads and converts characters from the standards input depending on the
format specification string and stores the input in memory locations represented by the other
arguments (num1, num2,….). For Example:
scanf(― %c %d‖,&Name, &Roll No);
Note: the data names are listed as &Name and &Roll No instead of Name and Roll No
respectively. This is how data names are specified in a scnaf() function. In case of string type
data names, the data name is not preceded by the character &.
Example with program
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.
Solve here:
#include<stdio.h>
#include<conio.h>
main()
{
Int e_num; Float e_wt; printf (―Enter the Element No.
and Weight of a Proton\n‖); scanf (―%d %f‖,&e_num,
&e_wt); printf (―The Element No.is:‖,e_num); printf
(―The Weight of a Proton is: %f\n‖, e_wt); getch();
return 0;
}
42
UNIT-II
CONTROL STRUCTURES, ARRAYS AND STRINGS
DECISION STATEMENTS
If statement: Syntax
:
if(expression)
statement1;
Explanation :
• Expression is Boolean Expression It may have true or false value
43
Meaning of If Statement :
• It Checks whether the given Expression is Boolean or not !!
• If Expression is True Then it executes the statement otherwise jumps to next_instruction
Sample Program Code :
void main()
{ int
a=5,b=6,c;
c=a+b;
if (c==11)
printf("Execute me 1");
printf("Execute me 2"); }
Output :
Execute me 1
If Statement :
if(conditional)
{
Statement No 1
Statement No 2
Statement No 3
.
44
.
.
Statement No N
}
Note :
More than One Conditions can be Written inside If statement.
1. Opening and Closing Braces are required only when ―Code‖ after if statement
occupies multiple lines.
if(conditional)
Statement No 1
Statement No 2
Statement No 3
In the above example only Statement 1 is a part of if Statement.
1. Code will be executed if condition statement is True.
2. Non-Zero Number Inside if means “TRUE Condition”
if(100) printf("True
Condition");
if-else Statement :
We can use if-else statement in c programming so that we can check any condition and
depending on the outcome of the condition we can follow appropriate path. We have true path as
well as false path.
Syntax :
if(expression)
{
statement1;
statement2;
}
else
{
statement1;
statement2;
}
45
next_statement;
Explanation :
If expression is True then Statement1 and Statement2 are executed
Otherwise Statement3 and Statement4 are executed.
Sample Program on if-else Statement :
void main()
{ int
marks=50;
if(marks>=40)
{
printf("Student is Pass");
}
else
{
printf("Student is Fail");
}
}
Output :
Student is Pass
Flowchart : If Else Statement
if(num == 20)
46
{
printf("True Block");
}
else
{
printf("False Block");
}
If part Executed if Condition Statement is True.
if(num == 20)
{
printf("True Block");
}
True Block will be executed if condition is True.
Else Part executed if Condition Statement is False.
else
{
printf("False Block");
}
Consider Example 2 with Explanation :
More than One Conditions can be Written inside If statement.
int num1 = 20;
int num2 = 40;
47
//False
code }
Note :
Consider Following Example –
int num = 20;
if(num == 20)
{
printf("True Block");
}
else
{
printf("False Block");
}
If part Executed if Condition Statement is True.
if(num == 20)
{
printf("True Block");
}
True Block will be executed if condition is True.
Else Part executed if Condition Statement is False.
else
{
printf("False Block");
}
More than One Conditions can be Written inside If statement.
int num1 = 20;
int num2 = 40;
48
Switch statement
Why we should use Switch Case?
• One of the classic problem encountered in nested if-else / else-if ladderis called problem
of Confusion.
• It occurs when no matching else is available for if .
• As the number of alternatives increases the Complexity of program increases
drastically.
• To overcome this , C Provide a multi-way decision statement called ‗Switch
Statement‗
See how difficult is this scenario?
if(Condition 1)
Statement 1 else
{
Statement 2
if(condition 2)
{
if(condition 3)
statement 3
else
if(condition 4)
{
statement 4
}
} else
{
statement 5
}
}
First Look of Switch
Case switch(expression)
{ case value1 : body1
break;
case value2 :
body2
break;
49
case value3 :
body3
break;
default :
default-body
break; } next-
statement;
Flow Diagram
:
50
}
As explained earlier –
3 is assigned to integer variable ‗roll‗
On line 5 switch case decides – ―We have to execute block of code specified in 3rd case―.
Switch Case executes code from top to bottom.
It will now enter into first Case [i.e case 1:] It
will validate Case number with variable Roll.
If no match found then it will jump to Next Case..
When it finds matching case it will execute block of code specified in that case.
Note :
For Single Line of Code – Opening and Closing braces are not needed.
while(1) is used for Infinite Loop
Initialization , Incrementation and Condition steps are on different Line.
51
While Loop is also Entry Controlled Loop.[i.e conditions are checked if found true then and then
only code is executed ]
Do while:
Do-While Loop Syntax :
initialization;
do
{
--------------
--------------
--------------
--------------
incrementation;
}while(condition);
Note :
It is Exit Controlled Loop.
Initialization , Incrementation and Condition steps are on different Line.
It is also called Bottom Tested [i.e Condition is tested at bottom and Body has to execute at least
once ]
For statement:
We have already seen the basics of Looping Statement in C. C Language provides us different
kind of looping statements such as For loop, while loop and do-while loop. In this chapter we
will be learning different flavors of for loop statement.
Different Ways of Using For Loop in C Programming
In order to do certain actions multiple times, we use loop control statements. For
loop can be implemented in different verities of using for loop –
52
• Single Statement inside For Loop
• Multiple Statements inside For Loop
• No Statement inside For Loop
• Semicolon at the end of For Loop
• Multiple Initialization Statement inside For
• Missing Initialization in For Loop
• Missing Increment/Decrement Statement
• Infinite For Loop
• Condition with no Conditional Operator.
53
printf("Statement 1");
printf("Statement 2"); printf("Statement
3");
if(condition)
{
--------
--------
}
}
If we have block of code that is to be executed multiple times then we can use curly braces to
wrap multiple statement in for loop.
}
this is bodyless for loop. It is used to increment value of ―i‖.This verity of for loop is not used
generally.
At the end of above for loop value of i will be 5.
54
Way 6 : Missing Increment/Decrement Statement
for(i=0;i<5;)
{
statement1;
statement2;
statement3; i++;
}
however we have to explicitly alter the value i in the loop body.
if(breaking condition)
break;
i++;
}
Infinite for loop must have breaking condition in order to break for loop. otherwise it will cause
overflow of stack.
55
for ( i=0 ; i < 10 ; i++ )
Statement1; Single Statement
for ( i=0 ; i < 10;i++) ; For Loop with no Body (Carefully Look at the
Semicolon)
JUMP STATEMENTS:
Break statement
Break Statement Simply Terminate Loop and takes control out of the loop.
56
initialization ;
while(condition)
{
Statement1;
Statement2;
incrementation
break;
}
57
Way 4 : While Loop
Continue statement:
loop {
continue;
//code
}
Note :
It is used for skipping part of Loop.
Continue causes the remaining code inside a loop block to be skipped and causes execution to
jump to the top of the loop block
58
Loop Use of Continue !!
for
while
do-while
Goto statement:
goto label;
59
------- -----
-- label :
Whenever goto keyword encountered then it causes the program to continue on the line , so long
as it is in the scope .
Types of Goto
Forward
Backward
ARRAYS:
What is an array?
An array is a collection of similar datatype that are used to allocate memory in
a sequential manner.
Syntax : <data type> <array name>[<size of an array>]
Subscript or indexing: A subscript is property of an array that distinguishes all its stored
elements because all the elements in an array having the same name (i.e. the array name). so to
distinguish these, we use subscripting or indexing option. e.g. int ar[20];
First element will be: int ar[0];
60
Second element will be: int ar[1];
Third element will be: int ar[2];
Fourth element will be: int ar[3];
Fifth element will be: int ar[4];
Sixth element will be: int ar[5];
So on……………………
Last element will be: int ar[19];
Types of Array
1. Static Array
2. Dynamic Array.
Static Array
An array with fixed size is said to be a static array.
Types of static array:
1. One Dimensional Array
2. Two Dimensional Array.
3. Multi Dimensional Array.
61
Example: int ar[4][5];
This above array is called two dimensional array because it will store all the elements in column
and in row form
NOTE: In above example of two dimensional array, we have 4 rows and 5 columns.
NOTE: In above example of two dimensional array, we have total of 20 elements.
3. Multi Dimensional Array.
This array does not exist in c and c++.
Dynamic Array.
This type of array also does not exist in c and c++.
Example: Program based upon array:
WAP to store marks in 5 subjects for a student. Display marks in 2nd and 5thsubject.
#include<stdio.h>
#include<conio.h
> void main() {
int ar[5]; int i;
for(i=0;i<5;i++)
{
printf(― \n Enter marks in ―,i, ―subject‖);
scanf(―%d‖,&ar[i]);
} printf(―Marks in 2nd subject is:
is: ‖,ar[4]);
}
STRINGS
What is String?
· A string is a collection of characters.
· A string is also called as an array of characters.
62
· A String must access by %s access specifier in c and c++.
· A string is always terminated with \0 (Null) character.
· Example of string: ―Gaurav‖
· A string always recognized in double quotes.
· A string also consider space as a character.
· Example: ‖ Gaurav Arora‖
· The above string contains 12 characters.
· Example: Char ar[20]
· The above example will store 19 character with I null character.
Example: Program based upon String.
WAP to accept a complete string (first name and last name) and display hello message in the
output.
# include<stdio.h>
#include<conio.h>
#include<string.h> void
main ()
{ char str1[20]; char
str2[20]; printf(―Enter
First Name‖);
scanf(―%s‖,&str1);
printf(―Enter last Name‖);
scanf(―%s‖,&str2);
puts(str1); puts(str2);
}
String Functions in C:
Our c language provides us lot of string functions for manipulating the string.
All the string functions are available in string.h header file.
63
2. strupr().
3. strlwr().
4. strcmp().
5. strcat().
6. strapy().
7. strrev().
1. strlen().
This string function is basically used for the purpose of computing the ength of string.
2. strupr().
This string function is basically used for the purpose of converting the case sensitiveness of the
string i.e. it converts string case sensitiveness into uppercase.
3. strlwr ().
This string function is basically used for the purpose of converting the case sensitiveness of the
string i.e it converts string case sensitiveness into lowercase.
Example: char str = ―gaurav‖
strlwr(str);
printf(―The Lowercase of the string is :%s ‖,str);
4. strcmp ().
This string function is basically used for the purpose of comparing two string.
64
This string function compares two strings character by characters.
Thus it gives result in three cases:
Case 1: if first string > than second string then, result will be true.
Case 2: if first string < than second string then, result will be false.
Case 3: if first string = = to second string then, result will be zero.
Example:
char str1= ―Gaurav‖; char
str2= ―Arora‖; char
str3=strcmp(str1,str2);
printf(―%s‖,str3);
5. strcat().
This string function is used for the purpose of concatenating two strings ie.(merging two or more
strings)
Example:
char str1 = ―Gaurav‖;
char str2 = ―Arora‖;
char str3[30];
str3=strcat(str1,str2);
printf(―%s‖,str3);
6. strcpy()
This string function is basically used for the purpose of copying one string into another string.
char str1= ―Gaurav‖;
char str2[20]; str2 =
strcpy(str2,str1);
printf(―%s‖,str2);
6. strrev()
65
This string function is basically used for the purpose of reversing the string.
char str1= ―Gaurav‖;
char str2[20];
str2= strrev(str2,str1);
printf(―%s‖,str2);
# include<stdio.h>
# include<conio.h>
#include<string.h>
void main() {
char str[20];
char str1[20];
int opt,len;
printf(―\n MAIN MENU‖); printf(―\n 1.
Convert string into upper case‖); printf(―\n 2.
Reverse the string‖); printf(―\n 3. Copy one
string into another string‖); printf(―\n
4.Compute length of string ‖); printf(―Enter
string ‖); scanf(―%s‖, &str); printf(―Enter your
choice‖); scanf(―%d‖,&opt); switch(opt) {
case 1: strupr(str);
printf(―The string in uppercase is :%s ‖,str);
break;
66
case 2:
strrev(str);
printf(―The reverse of string is :
%s‖,str); break; case 3:
strcpy(str1,str);
printf(―New copied string is :
%s‖,str1); break; case 4:
len=strlen(str);
printf(―The length of the string is : %s‖,len);
break;
default: printf(―Ypu have entered a wrong choice.‖);
}
FUNCTIONS
67
A function is itself a block of code which can solve simple or complex task/calculations.
A function performs calculations on the data provided to it is called "parameter" or "argument".
A function always returns single value result.
Types of function:
1. Built in functions(Library functions)
a.) Inputting Functions.
b.) Outputting functions.
Parts of a function:
1. Function declaration/Prototype/Syntax.
2. Function Calling.
3. Function Definition.
1.)Function Declaration:
Syntax: <return type > <function name>(<type of argument>)
The declaration of function name, its argument and return type is called function declaration.
68
<statement-1> <statement-
2> return(<vlaue>)
}
Example: program based upon function:
WAP to compute cube of a no. using function.
#include<stdio.h>
#include<conio.h>
void main()
{ int c,n; int cube(int);
printf("Enter a no.");
scanf("%d",&n); c=cube(n);
printf("cube of a no.
is=%d",c);
} int cube(int
n)
{
c=n*n*n;
return(c);
}
69
{ f=f*i;
}
return(f)
;
}
Recursion
Firstly, what is nested function?
When a function invokes another function then it is called nested function.
But,
When a function invokes itself then it is called recursion.
NOTE: In recursion, we must include a terminating condition so that it won't execute to infinite
time.
70
parameters are the values that are passed to a function for processing.
71
# include<stdio.h>
# include<conio.h>
void main()
{ int a,b; a=10;
b=20; void
swap(int,int)
printf("The value of a before swapping=%d",a);
printf("The value of b before swapping=%d",b);
void swap(a,b);
printf("The value of a after swapping=%d",a);
printf("The value of b after swapping=%d",b); } void
swap(int x, int y)
{
int t;
t=x;
x=y;
y=t;
}
STORAGE CLASSES
Every Variable in a program has memory associated with it.
Memory Requirement of Variables is different for different types of variables. In
C, Memory is allocated & released at different places
Term Definition
72
Storage Manner in which memory is allocated by the Compiler for Variable
Class Different Storage Classes
D. Lifetime of variable
Lifetime of the = Time Of variable Declaration - Time of Variable Destruction
Suppose we have declared variable inside main function then variable will be destroyed only
when the control comes out of the main .i.e end of the program.
73
Auto Storage Class
Static Storage Class
Extern Storage Class
Register Storage Class
Example
void main()
{
auto mum = 20 ;
{
auto num = 60 ;
printf("nNum : %d",num);
}
printf("nNum : %d",num);
}
Output :
Num : 60
74
Num : 20
Note :
Two variables are declared in different blocks , so they are treated as different variables
External ( extern ) storage class in C Programming
Storage Memory
Example
int num = 75 ;
void display();
void main()
{
extern int num ;
printf("nNum : %d",num);
display();
}
75
void display()
{
extern int num ;
printf("nNum : %d",num);
}
Output :
Num : 75
Num : 75
Note :
Declaration within the function indicates that the function uses external variable
Functions belonging to same source code , does not require declaration (no need to write extern)
If variable is defined outside the source code , then declaration using extern keyword is required
main() {
while(count--) {
func(); }
return 0;
76
}
/* function definition */
void func( void ) {
int main()
{ int
num1,num2;
register int sum;
77
sum = num1 + num2;
return(0);
}
Explanation of program
Refer below animation which depicts the register storage classes –
In the above program we have declared two variables num1,num2. These two variables are
stored in RAM.
Another variable is declared which is stored in register variable.Register variables are stored in
the register of the microprocessor.Thus memory access will be faster than other variables. If we
try to declare more register variables then it can treat variables asAuto storage variables as
memory of microprocessor is fixed and limited.
Why we need Register Variable ?
Whenever we declare any variable inside C Program then memory will be randomly allocated at
particular memory location.
We have to keep track of that memory location. We need to access value at that memory location
using ampersand operator/Address Operator i.e (&).
If we store same variable in the register memory then we can access that memory location
directly without using the Address operator.
Register variable will be accessed faster than the normal variable thus increasing the operation
and program execution. Generally we use register variable as Counter.
78
Note : It is not applicable for arrays, structures or pointers.
Summary of register Storage class
Keyword register
Keyword register
Preprocessor directives
Before a C program is compiled in a compiler, source code is processed by a program called
preprocessor. This process is called preprocessing.
Commands used in preprocessor are called preprocessor directives and they begin with ―#‖
symbol.
Below is the list of preprocessor directives that C language offers.
S.no Preprocessor Syntax Description
1 Macro #define
79
The source code of
the file ―file_name‖
is included in the
main program at the
specified place
Conditional #if,
3 compilation #else, #ifndef
condition
#undef is used to
undefine a defined
macro variable.
#Pragma is used to
call a function before
and after main
function in a C
program
Other
4 directives #undef, #pragma
A program in C language involves into different processes. Below diagram will help you to
understand all the processes that a C program comes across.
80
#include <file_name> – The source code of the file ―file_name‖ is included in the main C
program where ―#include <file_name>‖ is mentioned.
#include <stdio.h>
void main()
{
printf("value of height : %d \n", height ); printf("value
of number : %f \n", number ); printf("value of letter : %c
\n", letter ); printf("value of letter_sequence : %s \n",
letter_sequence); printf("value of backslash_char : %c
\n", backslash_char);
}
OUTPUT:
value of height : 100 value of
number : 3.140000 value of
letter : A value of
letter_sequence : ABC value of
backslash_char : ?
#include <stdio.h>
#define RAJU 100
int main()
{
81
#ifdef RAJU
printf("RAJU is defined. So, this line will be added in " \
"this C file\n");
#else
printf("RAJU is not defined\n");
#endif
return 0; }
OUTPUT:
#include <stdio.h>
#define RAJU 100
int main()
{
#ifndef SELVA
{
printf("SELVA is not defined. So, now we are going to " \
"define here\n");
#define SELVA 300
}
#else printf("SELVA is already defined in the
program‖);
#endif
return 0;
}
OUTPUT:
82
Otherwise, else clause statement is included in source file for compilation and execution.
#include <stdio.h>
#define a 100 int
main()
{
#if (a==100)
printf("This line will be added in this C file since " \
"a \= 100\n");
#else printf("This line will be added in this C file
since " \
"a is not equal to 100\n");
#endif
return 0;
}
OUTPUT:
83
void function1( ); void
function2( );
int main( ) {
printf ( "\n Now we are in main function" ) ;
return 0;
}
void function1( )
{
printf("\nFunction1 is called before main function call");
}
void function2( )
{
printf ( "\nFunction2 is called just before end of " \
"main function" ) ;"
}
OUTPUT:
84
If function doesn‘t return a value,
then warnings are suppressed by
this directive while compiling.
3 #pragma warn – rvl
POINTERS
Pointer Overview
85
Here j is not ordinary variable , It is special variable and called pointer variable as it stores the
address of the another ordinary variable. We can summarize it like –
Variable Name Variable Value Variable Address
i 5 65524
j 65524 65522
int main()
{ int *ptr,
i;
i = 11;
return 0;
}
See Output and Download »
You will get value of i = 11 in the above program.
C. Pointer Declaration Tips :
1. Pointer is declared with preceding * :
int *ptr; //Here ptr is Integer Pointer Variable
int ptr; //Here ptr is Normal Integer Variable
2. Whitespace while Writing Pointer :
pointer variable name and asterisk can contain whitespace because whitespace is ignored
by compiler. int *ptr; int * ptr; int * ptr;
All the above syntax are legal and valid. We can insert any number of spaces or blanks
inside declaration. We can also split the declaration on multiple lines. D. Key points for
Pointer :
86
Unline ordinary variables pointer is special type of variable which stores the address of ordinary
variable.
Pointer can only store the whole or integer number because address of any type of variable is
considered as integer.
It is good to initialize the pointer immediately after declaration
& symbol is used to get address of variable
* symbol is used to get value from the address given by pointer.
E. Pointer Summary :
Pointer is Special Variable used to Reference and de-reference memory. (*Will be covered in
upcoming chapter)
When we declare integer pointer then we can only store address of integer variable into that
pointer.
Similarly if we declare character pointer then only the address of character variable is stored into
the pointer variable.
Pointer storing the address of following DT Pointer is called as
87
#include<stdio.h>
int
main() {
int a = 3;
int *ptr;
ptr = &a;
return(0);
}
Explanation of Example :
Point Variable 'a' Variable 'ptr'
88
We have following associated points –
Point Variable 'a' Variable 'ptr' Variable 'pptr'
89
{ int n = 10; printf("\nValue of n is
: %d",n); printf("\nValue of &n is :
%u",&n);
}
Output :
Value of n is : 10
Value of &n is : 1002
Consider the above example, where we have used to print the address of the variable using
ampersand operator.
In order to print the variable we simply use name of variable while to print the address of
the variable we use ampersand along with %u printf("\nValue of &n is : %u",&n);
Understanding address operator
Consider the following program –
#include<stdio.h
> int main() { int
i = 5;
int *ptr;
ptr = &i;
printf("\nAddress of i : %u",&i);
printf("\nValue of ptr is : %u",ptr);
return(0);
}
After declaration memory map will be like this
– int i = 5; int *ptr;
after Assigning the address of variable to pointer , i.e after the execution of this statement – ptr
= &i;
90
Invalid Use of pointer address operator
Address of literals
In C programming using address operator over literal will throw an error. We cannot use address
operator on the literal to get the address of the literal.
&75
Only variables have an address associated with them, constant entity does not have
corresponding address. Similarly we cannot use address operator over character literal –
&('a')
Character ‗a‘ is literal, so we cannot use address operator.
Address of expressions
(a+b) will evaluate addition of values present in variables and output of (a+b)is nothing but
Literal, so we cannot use Address operator
&(a+b)
Explanation :
91
Pointer Variable is nothing but a memory address which holds another address .
In the above program ―i‖ is name given for memory location for human understanding , but
compiler is unable to recognize ―i‖ . Compiler knows only address.
In the next chapter we will be learning , Memory requirement for storing pointer variable.
92
Above is the syntax for initializing pointer variable in C.
Initialization of Pointer can be done using following 4 Steps :
Declare a Pointer Variable and Note down the Data Type.
Declare another Variable with Same Data Type as that of Pointer Variable.
Initialize Ordinary Variable and assign some value to it.
Now Initialize pointer by assigning the address of ordinary variable to pointer variable.
int a; // Step 1
int *ptr; // Step 2 a
= 10; // Step 3
ptr = &a; // Step 4
return(0);
}
Explanation of Above Program :
Pointer should not be used before initialization.
―ptr‖ is pointer variable used to store the address of the variable.
Stores address of the variable „a‟ .
Now ―ptr‖ will contain the address of the variable ―a‖ .
Note :
[box]Pointers are always initialized before using it in the program[/box]
Example : Initializing Integer Pointer
#include<stdio.h
> int main() { int
a = 10;
int *ptr;
ptr = &a;
printf("\nValue of ptr : %u",ptr);
return(0);
}
93
Output :
Value of ptr : 4001
Pointer arithematic
Incrementing Pointer:
Incrementing Pointer is generally used in array because we have contiguous memory in array and
we know the contents of next memory location.
Incrementing Pointer Variable Depends Upon data type of the Pointer variable
Formula : ( After incrementing )
new value = current address + i * size_of(data type)
Three Rules should be used to increment pointer – Address
+ 1 = Address
Address++ = Address
++Address = Address
Pictorial Representation :
94
char 1000 1001
int main(){
ptr=ptr+1;
printf("New Value of ptr : %u",ptr);
return 0;
}
Output :
New Value of ptr : 1002
Live Example 2 : Increment Double Pointer
#include<stdio.h>
int main(){
ptr=ptr+1;
printf("New Value of ptr : %u",ptr);
return 0;
}
Output :
New Value of ptr : 1004
Live Example 3 : Array of Pointer
95
#include<stdio.h>
int main(){
float var[5]={1.1f,2.2f,3.3f};
float(*ptr)[5];
ptr=&var;
printf("Value inside ptr : %u",ptr);
ptr=ptr+1;
printf("Value inside ptr : %u",ptr);
return 0;
}
Output :
Value inside ptr : 1000
Value inside ptr : 1020
Explanation :
Address of ptr[0] = 1000
We are storing Address of float array to ptr[0]. –
Address of ptr[1]
= Address of ptr[0] + (Size of Data Type)*(Size of Array)
= 1000 + (4 bytes) * (5)
= 1020
Address of Var[0]…Var[4] :
Address of var[0] = 1000
Address of var[1] = 1004
96
Address of var[2] = 1008
Address of var[3] = 1012
Address of var[4] = 1016
Formula : ( After decrementing )
new_address = (current address) - i * size_of(data type)
[box]Decrementation of Pointer Variable Depends Upon : data type of the Pointer variable[/box]
Example :
Explanation:
Decrementing a pointer to an integer data will cause its value to be decremented by 2 This
differs from compiler to compiler as memory required to store integer vary compiler to
compiler
Pointer Program: Difference between two integer Pointers
#include<stdio.h>
int main(){
97
printf("\nDifference : %d",ptr2-ptr1);
return 0;
}
Output :
Difference : 250
Explanation :
Ptr1 and Ptr2 are two pointers which holds memory address of Float Variable.
Ptr2-Ptr1 will gives us number of floating point numbers that can be stored.
ptr2 - ptr1 = (2000 - 1000) / sizeof(float)
= 1000 / 4
= 250
Live Example 2:
#include<stdio.h>
struct var{
char cvar;
int ivar;
float fvar;
};
int main(){
printf("Difference= %d",ptr2-ptr1);
return 0;
}
Output : Difference = 142 Explanation :
ptr2-ptr1 = (2000 - 1000)/Sizeof(struct
var)
= 1000 / (1+2+4)
= 1000 / 7
= 142
98
Adding integer value with Pointer
In C Programming we can add any integer number to Pointer variable. It is perfectly legal in c
programming to add integer to pointer variable.
In order to compute the final value we need to use following formulae :
final value = (address) + (number * size of data
type) Consider the following example – int *ptr , n;
ptr = &n ; ptr = ptr + 3;
Live Example 1 : Increment Integer Pointer
#include<stdio.h>
int main(){
ptr=ptr+3;
printf("New Value of ptr : %u",ptr);
return 0;
}
Output :
New Value of ptr : 1006
Explanation of Program : In the above program – int *ptr=(int *)1000; this line will store
1000 in the pointer variable considering 1000 is memory location for any of the integer
variable.
Formula :
ptr = ptr + 3 * (sizeof(integer))
= 1000 + 3 * (2)
= 1000 + 6
= 1006
Similarly if we have written above statement like this
– float *ptr=(float *)1000; then result may be ptr = ptr
+ 3 * (sizeof(float))
= 1000 + 3 * (4)
= 1000 + 12
99
= 1012
Suppose we have subtracted ―n‖ from pointer of any data type having initial addess as
―init_address‖ then after subtraction we can write
– ptr = initial_address - n * (sizeof(data_type))
Subtracting integer value with Pointer int *ptr , n;
ptr = &n ; ptr = ptr - 3;
int main(){
return 0;
}
Output : New Value of
ptr : 994 Formula :
ptr = ptr - 3 * (sizeof(integer))
= 1000 - 3 * (2)
= 1000 - 6
= 994
Summary :
Pointer - Pointer = Integer
Pointer - Integer = Pointer
100
Subtraction indicates ―How apart the two Pointers are ?‖
C Program to Compute Difference Between Pointers :
#include<stdio.h>
int main()
{
int num , *ptr1 ,*ptr2 ;
ptr1 = &num ;
ptr2 = ptr1 + 2 ;
printf("%d",ptr2 - ptr1);
return(0);
}
Output :
2
ptr1 stores the address of Variable num
Value of ptr2 is incremented by 4 bytes
Differencing two Pointers
Important Observations :
Suppose the Address of Variable num = 1000.
Statement Value of Ptr1 Value of Ptr2
101
Step 1 : Compute Mathematical Difference (Numerical Difference)
ptr2 - ptr1 = Value of Ptr2 - Value of Ptr1
= 1004 - 1000
=4
Step 2 : Finding Actual Difference (Technical Difference)
Final Result = 4 / Size of Integer
=4/2
=2
Numerically Subtraction ( ptr2-ptr1 ) differs by 4
As both are Integers they are numerically Differed by 4 and Technically by 2 objects Suppose
Both pointers of float the they will be differed numerically by 8 and Technically by 2 objects
Consider the below statement and refer the following table
– int num = ptr2 - ptr1; and
If Two Pointers are of Following Data Numerical Technical
Type Difference Difference
Integer 2 1
Float 4 1
Character 1 1
int main()
{
102
int *ptr1,*ptr2;
return(0);
}
Pointer Comparison of Different Data Types :
#include<stdio.h>
int
main() {
int *ptr1;
float *ptr2;
return(0);
}
Explanation :
Two Pointers of different data types can be compared .
In the above program we have compared two pointers of different data types.
It is perfectly legal in C Programming.
[box]As we know Pointers can store Address of any data type, address of the data type is
―Integer‖ so we can compare address of any two pointers although they are of different data
types.[/box]
Following operations on pointers :
103
>= Greater Than And Equal To
== Equals
!= Not Equal
int main()
{
int *ptr1,*ptr2;
return(0);
} Output
:
104
Pointer to pointer
Pointer to Pointer in C Programming
Declaration : Double Pointer int
**ptr2ptr;
*ptr 45
**ptr2ptr 45
ptr &n
ptr2ptr &ptr
105
Notes :
Conceptually we can have Triple ….. n pointers
Example : *****n,****b can be another example
Live Example :
#include<stdio.h>
int main()
{
int num = 45 , *ptr , **ptr2ptr ;
ptr = #
ptr2ptr = &ptr;
printf("%d",**ptr2ptr);
return(0);
}
Output :
45 UNIT-IV
INTRODUCTION TO STRUCTURE
As we know that Array is collection of the elements of same type , but many time we have to
store the elements of the different data types.
Suppose Student record is to be stored, then for storing the record we have to group together all
the information such as Roll, name, Percent which may be of different data types.
Definition of Structure in C
Structure is composition of the different variables of different data types, grouped under same
name.
106
typedef struct {
char name[64];
char course[128];
int age;
int year;
} student;
char name[64];
char course[128];
year; are
some
examples
of
members.
Structure member may be of different data type including user defined data-type also typedef
struct {
char name[64];
char course[128];
year;
} student;
107
Declaring Structure Variable in C
In C we can group some of the user defined or primitive data types together and form another
compact way of storing complicated information is called as Structure. Let us see how to
declare structure in c programming language – Syntax of Structure in C Programming struct
tag {
data_type1 member1;
data_type2 member2;
data_type3 member3;
};
<structure_name>
structure_Element1;
structure_Element2;
structure_Element3;
...
...
};
Memory is created, very first time when the variable is created /Instance is created.
108
Different Ways of Declaring Structure
int date;
char month[20];
int year;
}today;
char month[20];
int year;
};
{ int
pages;
char name[20];
int year;
}book1,book2,book3;
C Structure Initialization
109
When we declare a structure, memory is not allocated for un-initialized variable.
Let us discuss very familiar example of structure student , we can initialize structure variable in
different ways –
student
{ char
name[20];
int roll;
float marks;
}std1 = { "Pritesh",67,78.3 };
In the above code snippet, we have seen that structure is declared and as soon as after declaration
we have initialized the structure variable.
std1 = { "Pritesh",67,78.3 }
{ char
name[20];
int roll;
float marks;
std1 = {"Pritesh",67,78.3};
std2 = {"Don",62,71.3};
In this example, we have declared two structure variables in above code. After declaration of
variable we have initialized two variable.
110
std1 = {"Pritesh",67,78.3};
std2 = {"Don",62,71.3};
student
{ int
mark1;
int mark2;
int mark3;
} sub1={67};
Though there are three members of structure,only one is initialized , Then remaining two
members are initialized with Zero. If there are variables of other data type then their initial
values will be –
integer 0
float 0.00
char NULL
student
{ int
mark1;
int mark2;
int mark3;
};
111
void main()
{ struct student s1 =
{89,54,65};
- - - - --
- - - - --
- - - - --
};
When we declare a structure then memory won‘t be allocated for the structure. i.e only
writing below declaration statement will never allocate memory struct student
{
int mark1;
int mark2;
int mark3;
};
struct
{ int
length;
char *name;
}*ptr;
length = 30;
112
*name = "programming";
++ptr->length
(++ptr)->length
113
*ptr->name Fetch Content of name
Array elements are accessed using the Subscript variable, Similarly Structure members are
accessed using dot [.] operator.
Live Example :
#include<stdio.h>
struct Vehicle
int wheels;
char vname[20];
char color[10];
}v1 = {4,"Nano","Red"};
114
int main()
return(0);
Output :
Vehicle No of Wheels : 4
Note :
Dot operator has Highest Priority than unary, arithmetic, relational, logical Operators
{ char
bname[20];
int pages;
char author[20];
float price;
}b1[3] = {
115
{"Let us C",700,"YPK",300.00},
};
Explanation :
As soon as after declaration of structure we initialize structure with the pre-defined values. For
each structure variable we specify set of values in curly braces. Suppose we have 3 Array
Elements then we have to initialize each array element individually and all individual sets are
combined to form single set.
{"Let us C",700,"YPK",300.00}
Above set of values are used to initialize first element of the array. Similarly –
char bname[20];
int pages;
char author[20];
float price;
};
void main()
{"Let us C",700,"YPK",300.00},
116
};
#include<stdio.h>
struct Book {
char bname[20];
int pages;
char author[20];
float price;
}b1[3] = {
{"Book1",700,"YPK"},
{"Book2",500,"AAK",350.00},
{"Book3",120,"HST",450.00}
};
void main()
Output :
117
Book Name : Book1
Explanation :
In this example , While initializing first element of the array we have not specified the price of
book 1.It is not mandatory to provide initialization for all the values. Suppose we have 5
structure elements and we provide initial values for first two element then we cannot provide
initial values to remaining elements.
{"Book1",700,,90.00}
{ char
bname[20];
int pages;
char author[20];
float price;
}b1[3] = {
{},
{"Book2",500,"AAK",350.00},
{"Book3",120,"HST",450.00}
};
Output :
Book Name :
Book Pages : 0
Book Author :
118
It is clear from above output , Default values for different data types.
Data Type Default Initialization Value
Integer 0
Float 0.0000
Character Blank
Live Example :
#include<stdio.h>
#include<conio.h>
//-------------------------------------
struct
Example { int
num1; int
num2;
}s[3];
//-------------------------------------
int i;
119
for(i=0;i<n;i++)
scanf("%d",&sptr[i].num1);
scanf("%d",&sptr[i].num2);
//-------------------------------------
int i;
for(i=0;i<n;i++)
{
printf("\nNum1 : %d",sptr[i].num1);
printf("\nNum2 : %d",sptr[i].num2);
//-------------------------------------
void main()
int i;
clrscr();
accept(s,3);
120
print(s,3);
getch();
Output :
Enter num1 : 10
Enter num2 : 20
Enter num1 : 30
Enter num2 : 40
Enter num1 : 50
Enter num2 : 60
Num1 : 10
Num2 : 20
Num1 : 30
Num2 : 40
Num1 : 50
Num2 : 60
Explanation :
When reference (i.e ampersand) is not specified in main , so this passing is simple pass by value.
121
Example :
struct Sample
members”.
s1.ptr = #
s1.name = "Pritesh"
Here num is any variable but it‘s address is stored in the Structure member ptr (Pointer to
Integer)
Similarly Starting address of the String ―Pritesh‖ is stored in structure variable name(Pointer to
Character array)
Whenever we need to print the content of variable num , we are dereferancing the pointer
variable num.
printf("Content of Num : %d ",*s1.ptr);
printf("Name : %s",s1.name);
#include<stdio.h>
of Character String
}s1;
int main()
122
int roll = 20; s1.ptr
= &roll; s1.name =
"Pritesh";
return(0);
Output :
: %d",*s1.ptr);
We have stored the address of variable ‗roll‘ in a pointer member of structure thus we can access
value of pointer member directly using de-reference operator.
Similarly we have stored the base address of string to pointer variable ‗name‘. In order to
dereference a string we never use de-reference operator.
Array of Structure :
Structure is used to store the information of One particular object but if we need to store such
100 objects then Array of Structure is used.
Example :
struct Bookinfo
{ char[20]
bname;
123
int pages;
int price;
}Book[100];
Explanation :
In case if we need to store the Information of 100 books then Array of Structure is used.
b1[0] stores the Information of 1st Book , b1[1] stores the information of 2nd Book and So on
We can store the information of 100 books.
Book[1].pages
Live Example :
#include <stdio.h>
struct Bookinfo
{ char[20]
bname;
int pages;
int price;
}book[3];
124
{
int i;
for(i=0;i<3;i++)
scanf("%d",book[i].pages);
scanf("%f",book[i].price);
for(i=0;i<3;i++)
return 0;
125
Enter the Name of Book : EFG
Union in C Programming :
126
union stud struct stud
{ {
}s1; }s1;
If we look at the two examples then we can say that both structure and union are same except
Keyword.
int roll;
char name[4];
int marks;
We have collected three variables of different data type under same name together.
For the union maximum memory allocated will be equal to the data member with maximum size.
In the example character array ‗name‘ have maximum size thus maximum memory of the union
will be 4 Bytes.
Data Member
127
Suppose we are accessing one of the data member of union then we cannot access other data
member since we can access single data member of union because each data member shares
same memory. By Using Union we can Save Lot of Valuable Space
Simple Example:
union u
{ char
a;
int b;
Union is similar to that of Structure. Syntax of both are same but major difference between
structure and union is ‗memory storage‗.
In structures, each member has its own storage location, whereas all the members of union use
the same location. Union contains many members of different types,
Syntax :
union tag
union_member1;
union_member2;
union_member3;
..
..
..
union_memberN;
}instance;
128
Note :
Unions are Declared in the same way as a Structure.Only ―struct Keyword‖ is replaced
with union
union stud
int roll;
char name[4];
int marks;
}s1;<
129
So From the Above fig. We can Conclude –
Union Members that compose a union, all share the same storage area within the computers
memory
Each member within a structure is assigned its own unique storage area
Unions are useful for application involving multiple members, where values need not be
assigned to all the members at any one time.
While accessing union, we can have access to single data member at a time. we can access single
union member using following two Operators –
In order to access the member of the union we are using the dot operator. DOT operator is used
inside printf and scanf statement to get/set value from/of union member location.
Syntax :
variable_name.member
consider the below union, when we declare a variable of union type then we will be accessing
union members using dot operator.
union emp
{ int
id;
char name[20];
130
e1.id Access id field of union
Instead of maintain the union variable suppose we store union at particular address then we can
access the members of the union using pointer to the union and arrow operator.
union emp
{ int
id;
char name[20];
}*e1;
id can be Accessed by – union_variable->member
Syntax Explanation
C Programs
#include <stdio.h>
union emp
int id;
131
{ e1.id = 10; printf("\nID :
%d",e1.id);
strcpy(e1.name,"Pritesh");
printf("\nName : %s",e1.name);
return 0;
Output :
ID : 10
Name : Pritesh
union emp
int id;
char name[20];
*argv[])
{ e1.id = 10;
strcpy(e1.name,"Pritesh");
printf("\nID : %d",e1.id);
printf("\nName : %s",e1.name);
return 0;
Output :
ID : 1953067600
132
Name : Pritesh
As we already discussed in the previous article of union basics, we have seen how memory
is shared by all union fields. In the above example – Total memory for union =
max(sizeof(id),sizeof(name))
= sizeof(name)
= 20 bytes
Firstly we have utilized first two bytes out of 20 bytes for storing integer value. After execution
of statement again same memory is overridden by character array so while printing the ID value,
garbage value gets printed
union emp
int id;
char name[20];
*argv[])
%d",e1->id); strcpy(e1-
>name,"Pritesh");
printf("\nName : %s",e1->name);
return 0;
Output :
ID : 10
Name : Pritesh
Bit fiels:
133
Suppose your C program contains a number of TRUE/FALSE variables grouped in a
structure called status, as follows − struct { unsigned int widthValidated; unsigned int
heightValidated;
} status;
This structure requires 8 bytes of memory space but in actual, we are going to store either 0 or 1
in each of the variables. The C programming language offers a better way to utilize the memory
space in such situations.
If you are using such variables inside a structure then you can define the width of a variable
which tells the C compiler that you are going to use only those number of bytes. For
example, the above structure can be re-written as follows − struct { unsigned int
widthValidated : 1; unsigned int heightValidated : 1;
} status;
The above structure requires 4 bytes of memory space for status variable, but only 2 bits will be
used to store the values.
If you will use up to 32 variables each one with a width of 1 bit, then also the status structure will
use 4 bytes. However as soon as you have 33 variables, it will allocate the next slot of the
memory and it will start using 8 bytes. Let us check the following example to understand the
concept − #include <stdio.h>
#include <string.h>
heightValidated;
} status1;
134
widthValidated : 1; unsigned int
heightValidated : 1;
: %d\n", sizeof(status2));
return 0;
When the above code is compiled and executed, it produces the following result −
struct {
};
width The number of bits in the bit-field. The width must be less than or equal
to the bit width of the specified type.
135
The variables defined with a predefined width are called bit fields. A bit field can hold more
than a single bit; for example, if you need a variable to store a value from 0 to 7, then you can
define a bit field with a width of 3 bits as follows −
struct { unsigned
int age : 3;
} Age;
The above structure definition instructs the C compiler that the age variable is going to use only
3 bits to store the value. If you try to use more than 3 bits, then it will not allow you to do so. Let
us try the following example −
#include <stdio.h>
#include <string.h>
struct { unsigned
int age : 3;
} Age;
Age.age );
return 0;
When the above code is compiled it will compile with a warning and when executed, it produces
the following result −
Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0
136
Typedef:
The C programming language provides a keyword called typedef, which you can use to give a
type, a new name. Following is an example to define a termBYTE for one-byte numbers −
typedef unsigned char BYTE;
After this type definition, the identifier BYTE can be used as an abbreviation for the
type unsigned char, for example..
By convention, uppercase letters are used for these definitions to remind the user that the
type name is really a symbolic abbreviation, but you can use lowercase, as follows − typedef
unsigned char byte;
You can use typedef to give a name to your user defined data types as well. For example, you
can use typedef with structure to define a new data type and then use that data type to define
structure variables directly as follows −
#include <stdio.h>
#include <string.h>
char title[50];
char author[50];
char subject[100];
int book_id; }
Book;
137
printf( "Book subject : %s\n", book.subject);
return 0;
When the above code is compiled and executed, it produces the following result −
typedef vs #define
#define is a C-directive which is also used to define the aliases for various data types similar
to typedef but with the following differences −
typedef is limited to giving symbolic names to types only where as#define can be used to define
alias for values as well, q., you can define 1 as ONE etc.
#include <stdio.h>
FALSE 0
int main( ) {
return 0;
When the above code is compiled and executed, it produces the following result −
138
Value of TRUE : 1
Value of FALSE : 0
An enumeration is a user-defined data type consists of integral constants and each integral
constant is give a name. Keyword enum is used to defined enumerated data type.
Here, type_name is the name of enumerated data type or tag. And value1,value2,....,valueN are
values of type type_name.
By default, value1 will be equal to 0, value2 will be 1 and so on but, the programmer can change
the default value.
enum suit{
club=0;
diamonds=10;
hearts=20;
spades=3;
};
Above code defines the type of the data but, no any variable is created. Variable of
type enum can be created as:
enum boolean{
false;
true; };
139
Example of enumerated type #include <stdio.h> enum week{ sunday, monday,
return 0;
Output
4 day
You can write any program in C language without the help of enumerations but, enumerations
helps in writing clear codes and simplify programming.
The exact size of array is unknown untill the compile time,i.e., time when a compier compiles
code written in a programming language into a executable form. The size of array you have
declared initially can be sometimes insufficient and sometimes more than required. Dynamic
memory allocation allows a program to obtain more memory space, while running or to release
space when no space is required.
Although, C language inherently does not has any technique to allocated memory dynamically,
there are 4 library functions under "stdlib.h" for dynamic memory allocation.
malloc() Allocates requested size of bytes and returns a pointer first byte of allocated space
calloc() Allocates space for an array elements, initializes to zero and then returns a pointer to
memory
140
realloc() Change the size of previously allocated space
malloc()
The name malloc stands for "memory allocation". The function malloc()reserves a block of
memory of specified size and return a pointer of type voidwhich can be casted into pointer of
any form. Syntax of malloc() ptr=(cast-type*)malloc(byte-size)
Here, ptr is pointer of cast-type. The malloc() function returns a pointer to an area of memory
with size of byte size. If the space is insufficient, allocation fails and returns NULL pointer.
ptr=(int*)malloc(100*sizeof(int));
This statement will allocate either 200 or 400 according to size of int 2 or 4 bytes respectively
and the pointer points to the address of first byte of memory.
calloc()
The name calloc stands for "contiguous allocation". The only difference between malloc()
and calloc() is that, malloc() allocates single block of memory whereas calloc() allocates
multiple blocks of memory each of same size and sets all bytes to zero. Syntax of calloc()
ptr=(cast-type*)calloc(n,element-size);
This statement will allocate contiguous space in memory for an array of nelements. For example:
ptr=(float*)calloc(25,sizeof(float));
This statement allocates contiguous space in memory for an array of 25 elements each of size of
float, i.e, 4 bytes.
free()
Dynamically allocated memory with either calloc() or malloc() does not get return on its
own. The programmer must use free() explicitly to release space. syntax of free() free(ptr);
Write a C program to find sum of n elements entered by user. To perform this program, allocate
memory dynamically using malloc() function.
141
scanf("%d",&n); ptr=(int*)malloc(n*sizeof(int)); //memory
if(ptr==NULL)
exit(0);
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
printf("Sum=%d",sum);
free(ptr);
return 0;
Write a C program to find sum of n elements entered by user. To perform this program, allocate
memory dynamically using calloc() function.
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int));
if(ptr==NULL)
142
printf("Error! memory not allocated.");
exit(0);
for(i=0;i<n;++i)
scanf("%d",ptr+i);
sum+=*(ptr+i);
printf("Sum=%d",sum);
free(ptr);
return 0;
realloc()
If the previously allocated memory is insufficient or more than sufficient. Then, you can
change memory size previously allocated using realloc(). Syntax of realloc()
ptr=realloc(ptr,newsize);
#include <stdio.h>
main(){
int *ptr,i,n1,n2;
scanf("%d",&n1);
ptr=(int*)malloc(n1*sizeof(int)); printf("Address of
143
printf("%u\t",ptr+i); printf("\nEnter new size of
ptr=realloc(ptr,n2);
for(i=0;i<n2;++i)
printf("%u\t",ptr+i); return 0;
144
UNIT-IV FILES
Consider example –
We have written C Program to accept person detail from user and we are going to print these
details back to the screen.
Now consider another scenario, suppose we want to print same data that we have entered
previously.
We cannot save data which was entered on the console before.
Now we are storing data entered (during first run) into text file and when we need this data back
(during 2nd run), we are going to read file.
145
Introduction to file handling in C
New way of dealing with data is file handling.
Data is stored onto the disk and can be retrieve whenever require.
Output of the program may be stored onto the disk
In C we have many functions that deals with file handling
A file is a collection of bytes stored on a secondary storage device(generally a disk)
Collection of byte may be interpreted as –
Single character
Single Word
Single Line
Complete Structure.
146
stdin Standard Input
147
Example Keyboard Screen/Monitor
Data Flow Data (Often Text) going into a data (Often Text) going out from a
program program
148
Text File Formats
Text File have .txt Extension.
Text File Format have Little contains very little formatting .
The precise definition of the .txt format is not specified, but typicallymatches the format
accepted by the system terminal or simple text editor.
Files with the .txt extension can easily be read or opened by any program that reads text and, for
that reason, are considered universal (or platform independent).
Text Format Contain Mostly English Characters
What are Binary Files
Binary Files Contain Information Coded Mostly in Binary Format.
Binary Files are difficult to read for human.
Binary Files can be processed by certain applications or processors.
Only Binary File Processors can understood Complex FormattingInformation Stored in
Binary Format.
Humans can read binary files only after processing.
All Executable Files are Binary Files.
Explanation :
149
As shown in fig. Binary file is stored in Binary Format (in 0/1). This Binary file is difficult to
read for humans. So generally Binary file is given as input to the Binary file Processor. Processor
will convert binary file into equivalent readable file.
Some Examples of the Binary files :
Executable Files
Database files
Before opening the file we must understand the basic concept of file in C Programming , Types
of File. If we want to display some message on the console from the file then we must open it in
read mode.
Opening and Defining FILE in C Programming
Before storing data onto the secondary storage , firstly we must specify following things –
File name
Data Structure
Perpose / Mode
Very first task in File handling is to open file
File name : Specifies Name of the File
150
Mode of FILE opening
In C Programming we can open file in different modes such as reading mode,writing mode and
appending mode depending on purpose of handling file.
Following are the different Opening modes of File :
int main()
{
FILE *fp;
char ch;
151
return(0);
}
If we want to open file in different mode then following syntax will be used –
Reading Mode fp = fopen("hello.txt","r");
void
main() {
FILE *fp;
char ch;
fp = fopen("INPUT.txt","r"); // Open file in Read mode
while(1)
{
ch = fgetc(fp); // Read a Character
if(ch == EOF ) // Check for End of File
break ;
printf("%c",ch);
}
fclose(fp); // Close File after Reading
}
File Opening Mode Chart
Mode Meaning fopen Returns if FILE-
r Reading – NULL
152
w Writing Over write on Existing Create New
File
Appending File
Explanation :
File can be opened in basic 3 modes : Reading Mode, Writing Mode, Appending Mode If
File is not present on the path specified then New File can be created using Write and
Append Mode.
Generally we used to open following types of file in C –
File Type Extension
C Source File .c
153
Writing on the file will overwrite previous content
EOF and feof function >> stdio.h >> File Handling in C
What it does?
Macro tests if end-of-file has been reached on a stream.
feof is a macro that tests the given stream for an end-of-file indicator.
Once the indicator is set, read operations on the file return the indicatoruntil rewind is called, or
the file is closed.
The end-of-file indicator is reset with each input operation.
Ways of Detecting End of File A
] In Text File :
Special Character EOF denotes the end of File
As soon as Character is read,End of the File can be detected
EOF is defined in stdio.h
Equivalent value of EOF is -1
Printing Value of EOF :
void main()
{ printf("%d",
EOF);
}
B ] In Binary File : feof function is used to
detect the end of file It can be used in text
file
feof Returns TRUE if end of file is reached
Syntax :
int feof(FILE *fp);
Ways of Writing feof Function :
Way 1 : In if statement :
154
if( feof(fptr) == 1 ) // as if(1) is
TRUE printf("End of File"); Way 2 :
In While Loop while(!feof(fptr))
{
--- - --
--- - --
}
In real time application, it will happen to pass arguments to the main program itself. These
arguments are passed to the main () function while executing binary file from command line.
For example, when we compile a program (test.c), we get executable file in the name ―test‖.
Now, we run the executable ―test‖ along with 4 arguments in command line like below.
argc = 5 argv[0]
= ―test‖ argv[1] =
―this‖ argv[2] = ―is‖
argv[3] = ―a‖ argv[4]
= ―program‖ argv[5]
= NULL
{ if(argc!=5)
155
printf("Arguments passed through command line " \
return 1;
return 0;
OUTPUT:
156