Programming for Problem Solving-pages
Programming for Problem Solving-pages
3 ‐/‐/‐ 3
UNIT ‐ I
UNIT‐II
Statements‐Selection statements (Decision Making)- if and switch statements with examples, Repetition
statements (loops)- while, for, do‐while statements with examples, Unconditional statements- break,
continue, goto statements with examples.
UNIT – III
UNIT‐IV
Arrays- Declaration and Initialization, One dimensional Arrays, Two dimensional Arrays.
Strings- Declaration and Initialization, String Input / Output functions, String manipulation functions.
UNIT-V
Pointers- Introduction, Definition and Declaration of pointers, address operator, Pointer variables, Pointers
with Arrays.
TEXT BOOKS:
1. Computer Programming with C, Special Edition‐MRCET, Mc Graw Hill Publishers 2017.
2. Computer Science: A Structured Programming Approach Using C, B.A.Forouzan and R.F. Gilberg,
REFERENCE BOOKS:
Course Outcomes:
Computer
System
Hardware Software
Computer Hardware
The hardware component of the computer system consists of five parts: input devices, central
processing unit (CPU) ,primary storage, output devices, and auxiliary storage devices.
The input device is usually a keyboard where programs and data are entered into the
computers. Examples of other input devices include a mouse, a pen or stylus, a touch screen, or
an audio input unit.
The central processing unit (CPU) is responsible for executing instructions such as arithmetic
calculations,comparisons among data, and movement of data inside the system. Today’s
computers may have one ,two, or more CPUs .Primary storage ,also known as main memory, is
a place where the programs and data are stored temporarily during processing. The data in
primary storage are erased when we turn off a personal computer or when we log off from a
time-sharing system.
The output device is usually a monitor or a printer to show output. If the output is shown on
the monitor, we say we have a soft copy. If it is printed on the printer, we say we have a hard
copy.
Auxiliary storage, also known as secondary storage, is used for both input and output. It is the
place where the programs and data are stored permanently. When we turn off the computer,
or programs and data remain in the secondary storage, ready for the next time we need them.
Computer Software
Computer software is divided in to two broad categories: system software and application
software .System software manages the computer resources .It provides the interface between
the hardware and the users. Application software, on the other hand is directly responsible for
helping users solve their problems.
Software
System Application
software software
System software consists of programs that manage the hardware resources of a computer and
perform required information processing tasks. These programs are divided into three classes:
the operating system, system support, and system development.
The operating system provides services such as a user interface, file and database access, and
interfaces to communication systems such as Internet protocols. The primary purpose of this
software is to keep the system operating in an efficient manner while allowing the users access
to the system.
System support software provides system utilities and other operating services. Examples of
system utilities are sort programs and disk format programs. Operating services consists of
programs that provide performance statistics for the operational staff and security monitors to
protect the system and data.
The last system software category ,system development software, includes the language
translators that convert programs into machine language for execution ,debugging tools to
ensure that the programs are error free and computer –assisted software engineering(CASE)
systems.
Application software
Application –specific software can be used only for its intended purpose.
A general ledger system used by accountants and a material requirements planning system
used by a manufacturing organization are examples of application-specific software. They can
be used only for the task for which they were designed they cannot be used for other
generalized tasks.
The relation ship between system and application software is shown in fig-2.In this figure, each
circle represents an interface point .The inner core is hard ware. The user is represented by the
out layer. To work with the system,the typical user uses some form of application software. The
application software in turn interacts with the operating system ,which is apart of the system
software layer. The system software provides the direct interaction with the hard ware. The
opening at the bottom of the figure is the path followed by the user who interacts directly with
the operating system when necessary.
Computer Languages:
To write a program for a computer, we must use a computer language. Over the years
computer languages have evolved from machine languages to natural languages.
Machine Languages
In the earliest days of computers, the only programming languages available were machine
languages. Each computer has its own machine language, which is made of streams of 0’s and
1’s.
Instructions in machine language must be in streams of 0’s and 1’s because the internal circuits
of a computer are made of switches transistors and other electronic devices that can be in one
of two states: off or on. The off state is represented by 0 , the on state is represented by 1.
Symbolic Languages:
In early 1950’s Admiral Grace Hopper, A mathematician and naval officer developed the
concept of a special computer program that would convert programs into machine language.
The early programming languages simply mirror to the machine languages using symbols of
mnemonics to represent the various machine language instructions because they used symbols,
these languages were known as symbolic languages.
Computer does not understand symbolic language it must be translated to the machine
language. A special program called assembler translates symbolic code into machine language.
Because symbolic languages had to be assembled into machine language they soon became
known as assembly languages.
Symbolic language uses symbols or mnemonics to represent the various ,machine language
instructions.
Symbolic languages greatly improved programming effificiency; they still required programmers
to concentrate on the hardware that they were using. Working with symbolic languages was
also very tedious because each machine instruction has to be individually coded. The desire to
improve programmer efficiency and to change the focus from the computer to the problem
being solved led to the development of high-level language.
High level languages are portable to many different computers, allowing the programmer to
concentrate on the application problem at hand rather than the intricacies of the computer.
High-level languages are designed to relieve the programmer from the details of the assembly
language. High level languages share one thing with symbolic languages, They must be
converted into machine language. The process of converting them is known as compilation.
The first widely used high-level languages, FORTRAN (FORmula TRANslation)was created by
John Backus and an IBM team in 1957;it is still widely used today in scientific and engineering
applications. After FORTRAN was COBOL(Common Business-Oriented Language). Admiral
Hopper was played a key role in the development of the COBOL Business language.
C is a high-level language used for system software and new application code.
ALGORITHM:
Step 1: Start
Step 2:Read the two numbers in to a,b
Step 3: c=a+b
Step 4: write/print c
Step 5: Stop.
FLOW CHART :
A Flow chart is a Graphical representation of an Algorithm or a portion of an Algorithm.
Flow charts are drawn using certain special purpose symbols such as Rectangles, Diamonds,
Ovals and small circles. These symbols are connected by arrows called flow lines.
(or)
The diagrammatic representation of way to solve the given problem is called flow chart.
The following are the most common symbols used in Drawing flowcharts:
For processing(input) or
recording of the process
information(output).
type of operations.
C is the programming language most frequently associated with UNIX. Since the 1970s, the bulk
of the UNIX operating system and its applications have been written in C. Because the C
language does not directly rely on any specific hardware architecture, UNIX was one of the first
portable operating systems. In other words, the majority of the code that makes up UNIX does
not know and does not care which computer it is actually running on. Machine-specific features
are isolated in a few modules within the UNIX kernel, which makes it easy for you to modify
them when you are porting to a different hardware architecture.
C was first designed by Dennis Ritchie for use with UNIX on DEC PDP-11 computers. The
language evolved from Martin Richard's BCPL, and one of its earlier forms was the B language,
which was written by Ken Thompson for the DEC PDP-7. The first book on C was The C
Programming Language by Brian Kernighan and Dennis Ritchie, published in 1978.
It appears that there will be yet another ANSI C standard officially dated 1999 or in the early
2000 years; it is currently known as "C9X."
1. Documentation section
2. Linking section
3. Definition section
Declaration section
Executable section
2. LINKING SECTION : This section tells the compiler to link the certain occurrences of keywords
or functions in your program to the header files specified in this section.
3. DEFINITION SECTION : It is used to declare some constants and assign them some value.
Here #define is a compiler directive which tells the compiler whenever MAX is found in
the program replace it with 25.
4. GLOBAL DECLARATION SECTION : Here the variables which are used through out the
program (including main and other functions) are declared so as to make them global(i.e
accessible to all parts of program)
5. MAIN FUNCTION SECTION : It tells the compiler where to start the execution from
main()
1. declaration section : In this the variables and their data types are declared.
2. Executable section : This has the part of program which actually performs the task we
need.
6. SUB PROGRAM OR FUNCTION SECTION : This has all the sub programs or the functions
which our program needs.
SIMPLE ‘C’ PROGRAM:
/* simple program in c */
#include<stdio.h>
main()
printf(“welcome to c programming”);
} /* End of main */
C-TOKENS :
Tokens are individual words and punctuations marks in English language sentence. The
smallest individual units are known as C tokens.
OPERATORS
E.g. +, -, *
E.g. [ ], { }
SPECIAL SYMBOLS
E.g. “asifia”
STRINGS
C TOKENS
CONSTANTS
E.g. -15.4, ‘a’, 200
IDENTIFIERS
E.g. rate,no_of_hours
KEYWORDS :
There are certain words, called keywords (reserved words) that have a
predefined meaning in ‘C’ language. These keywords are only to be used for their intended
purpose and not as identifiers.
Volatile While
IDENTIFIERS :
Names of the variables and other program elements such as functions, array,etc,are
known as identifiers.
There are few rules that govern the way variable are named(identifiers).
1. Identifiers can be named from the combination of A-Z, a-z, 0-9, _(Underscore).
Eg: name,ptr,sum
where data type could be float, int, char or any of the data types.
id1, id2, id3 are the names of variable we use. In case of single variable no commas are
required.
eg float a, b, c;
char present_or_absent;
ASSIGNING VALUES :
When we name and declare variables we need to assign value to the variable. In some
cases we assign value to the variable directly like
a=10;
in our program.
In some cases we need to assign values to variable after the user has given input for
that.
#include<stdio.h>
main()
int a;
float b;
b=190.5;
scanf("%d",&a);
CONSTANTS :
A quantity that does not vary during the execution of a program is known as a constant
supports two types of constants namely Numeric constants and character constants.
NUMERIC CONSTANTS:
2. Long constant is written with a terminal ‘l’or ‘L’,for example 1234567899L is a Long
constant.
3. Unsigned constants are written with a terminal ‘u’ or ‘U’,and the suffix ‘ul’ and ‘UL’
CHARACTER CONSTANTS:
A character constant is written as one character with in single quotes such as ‘a’. The
value of a character constant is the numerical value of the character in the machines character
set. certain character constants can be represented by escape sequences like ‘\n’. These
sequences look like two characters but represent only one.
\a Alert
\b Backspace
\f Form feed
\n New Line
\r Carriage return
\t Horizontal Tab
\v Vertical Tab
To distinguish between a character constant and a string that contains a single character
ex: ‘a’ is not same as “a”. ‘a’ is an integer used to produce the numeric value of letter a in the
machine character set, while “a” is an array of characters containing one character and a ‘\0’ as
a string in C is an array of characters terminated by NULL.
There is one another kind of constant i.e Enumeration constant , it is a list of constant
integer values.
The first name in the enum has the value 0 and the next 1 and so on unless explicit
values are specified.
If not all values specified , unspecified values continue the progression from the last
specified value. For example
VARIABLES :
A quantity that can vary during the execution of a program is known as a variable. To
identify a quantity we name the variable for example if we are calculating a sum of two
numbers we will name the variable that will hold the value of sum of two numbers as 'sum'.
DATA TYPES :
To represent different types of data in C program we need different data types. A data type
is essential to identify the storage representation and the type of operations that can be
performed on that data. C supports four different classes of data types namely
All arithmetic operations such as Addition , subtraction etc are possible on basic data
types.
Char c;
The following table shows the Storage size and Range of basic data types:
Derived datatypes are used in ‘C’ to store a set of data values. Arrays and Structures are
examples for derived data types.
Char name[20];
C Provides a facility called typedef for creating new data type names defined by the
user. For Example ,the declaration ,
makes the name Integer a synonym of int.Now the type Integer can be used in declarations
,casts,etc,like,
Integer num1,num2;
Which will be treated by the C compiler as the declaration of num1,num2as int variables.
varname=getchar();
The simplest of output operator is putchar to output a single character on the output
device.
putchar(varname)
The getchar() is used only for one input and is not formatted. Formatted input refers to an input
data that has been arranged in a particular format, for that we have scanf.
arg1, arg2... argn specifies address of location or variable where data is stored.
eg scanf("%d%d",&a,&b);
%f floats
%l long
%c character
#include<stdio.h>
main()
int a,b;
float c;
a=getchar();
putchar(a);
scanf("%d%d%f",&a,&b,&c);
printf("%d%d%f",a,b,c);
OPERATORS :
1. Arithmetic operators
2. Relational operators
3. Logical operators
4. Assignment operators
6. Conditional operator
7. Bit wise operators
8. Special operators
operator meaning
+ add
- subtract
* multiplication
/ division
% modulo division(remainder)
An arithmetic operation involving only real operands(or integer operands) is called real
arithmetic(or integer arithmetic). If a combination of arithmetic and real is called mixed mode
arithmetic.
operator meaning
== is equal to
!= is not equal to
It is the form of
3. LOGICAL OPERATORS : An expression of this kind which combines two or more relational
expressions is termed as a logical expressions or a compound relational expression. The
operators and truth values are
non-zero non-zero 1 1
non-zero 0 0 1
0 non-zero 0 1
0 0 0 0
op-1 !op-1
non-zero zero
zero non-zero
5. ASSIGNMENT OPERATORS : They are used to assign the result of an expression to a variable.
The assignment operator is '='.
v op=exp
v is variable
op binary operator
exp expression
a=a+1 a+=1
a=a-1 a-=1
a=a%b a%=b
++ and == are called increment and decrement operators used to add or subtract.
++m or m++
--m or m--
It work as
8. BIT WISE OPERATORS : C supports special operators known as bit wise operators for
manipulation of data at bit level. They are not applied to float or double.
operator meaning
^ Bitwise exclusive OR
~ one's complement
9. SPECIAL OPERATORS : These operators which do not fit in any of the above classification are
,(comma), sizeof, Pointer operators(& and *) and member selection operators (. and ->). The
comma operator is used to link related expressions together.
#include<stdio.h>
main()
int i,j;
float l, m;
scanf("%d%d",&i,&j);
scanf("%f%f",&l,&m);
sum=i+j;
mul=i*j;
modu=i%j;
sub=l-m;
divi=l/m;
#include<stdio.h>
main()
int i, j, k;
if((i<j)&&(j<k))
printf("k is largest");
printf("j is largest");
else
#include<stdio.h>
main()
int i;
printf("Enter a number");
scanf("%d", &i);
i++;
i--;
#include<stdio.h>
main()
int i,j,large;
scanf("%d%d",&i,&j);
large=(i>j)?i:j;
}
UNIT - II
The if statement is a two way decision statement and is used in conjunction with an
expression. It takes the following form
If(test expression)
If the test expression is true then the statement block after if is executed otherwise it is not
executed
if (test expression)
statement block;
statement–x ;
/* program for if */
#include<stdio.h>
main()
int a,b;
if a>b
printf(“ a is greater”);
if b>a
printf(“b is greater”);
If your have another set of statement to be executed if condition is false then if-else is
used
if (test expression)
statement block1;
else
statement block2;
statement –x ;
#include<stdio.h>
main()
int a,b;
printf(“Enter two numbers”);
scanf(“%d%d”,&a,&b):
if a>b
printf(“ a is greater”)
else
printf(“b is greater”);
if(text cond1)
if (test expression2
statement block1;
else
statement block 2;
else
statement block2;
}
statement-x ;
if else ladder
if(condition1)
statement1;
else if(condition2)
statement 2;
else if(condition3)
statement n;
else
default statement.
statement-x;
The nesting of if-else depends upon the conditions with which we have to deal.
If for suppose we have more than one valid choices to choose from then we can use
switch statement in place of if statements.
switch(expression)
{.
case value-1
block-1
break;
case value-2
block-2
break;
--------
--------
default:
default block;
break;
statement–x
In case of
if(cond1)
statement-1
if (cond2)
statement 2
}
/* program to implement switch */
#include<stdio.h>
main()
int marks,index;
char grade[10];
scanf(“%d”,&marks);
index=marks/10;
switch(index)
case 10 :
case 9:
case 8:
case 7:
case 6: grade=”first”;
break;
case 5 : grade=”second”;
break;
case 4 : grade=”third”;
break;
break;
}
printf(“%s”,grade);
LOOPING :
condition is met.
We have two types of looping structures. One in which condition is tested before
entering the statement block called entry control.
The other in which condition is checked at exit called exit controlled loop.
WHILE STATEMENT :
While(test condition)
It is an entry controlled loop. The condition is evaluated and if it is true then body of
loop is executed. After execution of body the condition is once again evaluated and if is true
body is executed once again. This goes on until test condition becomes false.
#include<stdio.h>
main()
int count,n;
float x,y;
y=1.0;
count=1;
while(count<=n)
y=y*x;
count++;
}
DO WHILE STATEMENT :
The while loop does not allow body to be executed if test condition is false. The do while
is an exit controlled loop and its body is executed at least once.
do
body
}while(test condition);
#include<stdio.h>
#define COL 10
#define ROW 12
main()
{
int row,col,y;
row=1;
do
col=1;
do
y=row*col;
printf(“%d”,y);
col=col+1;
}while(col<=COL);
printf(“\n”);
row=row+1;
}while(row<=ROW);
body of loop
}
/* program of for loop */
#include<stdio.h>
main()
long int p;
int n;
double q;
p=1;
for(n=0;n<21;++n)
if(n==0)
p=1;
else
p=p*2;
q=1.0/(double)p;
printf(“%101d%10d”,p,n);
UNCONDITIONAL STATEMENTS:
BREAK STATEMENT:
This is a simple statement. It only makes sense if it occurs in the body of a switch, do,
while or for statement. When it is executed the control of flow jumps to the statement
immediately following the body of the statement containing the break. Its use is widespread in
switch statements, where it is more or less essential to get the control .
The use of the break within loops is of dubious legitimacy. It has its moments, but is really
only justifiable when exceptional circumstances have happened and the loop has to be
abandoned. It would be nice if more than one loop could be abandoned with a single break but
that isn't how it works. Here is an example.
#include <stdio.h>
#include <stdlib.h>
main(){
int i;
It reads a single character from the program's input before printing the next in a sequence of
numbers. If an „s‟ is typed, the break causes an exit from the loop.
If you want to exit from more than one level of loop, the break is the wrong thing to use.
CONTINUE STATEMENT:
This statement has only a limited number of uses. The rules for its use are the same as for
break, with the exception that it doesn't apply to switch statements. Executing a continue
starts the next iteration of the smallest enclosing do, while or for statement immediately. The
use of continue is largely restricted to the top of loops, where a decision has to be made
whether or not to execute the rest of the body of the loop. In this example it ensures that division
by zero (which gives undefined behaviour) doesn't happen.
#include <stdio.h>
#include <stdlib.h>
main(){
int i;
The continue can be used in other parts of a loop, too, where it may occasionally help to
simplify the logic of the code and improve readability. continue has no special meaning to a
switch statement, where break does have. Inside a switch, continue is only valid if there is a
loop that encloses the switch, in which case the next iteration of the loop will be started.
There is an important difference between loops written with while and for. In a while, a
continue will go immediately to the test of the controlling expression. The same thing in a for
will do two things: first the update expression is evaluated, then the controlling expression is
evaluated.
goto L1;
/* whatever you like here */
L1: /* anything else */
A label is an identifier followed by a colon. Labels have their own „name space‟ so they
can't clash with the names of variables or functions. The name space only exists for the function
containing the label, so label names can be re-used in different functions. The label can be used
before it is declared, too, simply by mentioning it in a goto statement.
Labels must be part of a full statement, even if it's an empty one. This usually only matters
when you're trying to put a label at the end of a compound statement—like this.
The goto works in an obvious way, jumping to the labelled statements. Because the name of
the label is only visible inside its own function, you can't jump from one function to another one.
It's hard to give rigid rules about the use of gotos but, as with the do, continue and the
break (except in switch statements), over-use should be avoided. More than one goto every 3–5
functions is a symptom that should be viewed with deep suspicion.
UNIT – III
The principles of top-down design and structured programming dictate that a program
should be divided into a main module and its related modules. Each module is in turn divided
into sub-modules until the resulting modules are intrinsic; that is, until they are implicitly
understood without further division.
Top-down design is usually done using a visual representation of the modules known as
a structure chart. The structure chart shows the relation between each module and its sub-
modules. The structure chart is read top-down, left-right. First we read Main Module. Main
Module represents our entire set of code to solve the problem.
Structure Chart
Moving down and left, we then read Module 1. On the same level with Module 1 are
Module 2 and Module 3. The Main Module consists of three sub-modules. At this level,
however we are dealing only with Module 1. Module 1 is further subdivided into three
modules, Module 1a, Module 1b, and Module 1c. To write the code for Module 1, we need to
write code for its three sub-modules.
The Main Module is known as a calling module because it has sub-modules. Each of the
sub-modules is known as a called module. But because Modules 1, 2, and 3 also have sub-
modules, they are also calling modules; they are both called and calling modules.
It first sends data to Module 1, which in turn sends it to the Main Module, which passes
it to Module 3, and then on to Module 3b.
The technique used to pass data to a function is known as parameter passing. The
parameters are contained in a list that is a definition of the data passed to the function by the
caller. The list serves as a formal declaration of the data types and names.
FUNCTIONS :
A function is a self contained program segment that carries out some specific well
defined tasks.
Advantages of functions:
1. Write your code as collections of small functions to make your program modular
2.Structured programming
4.Easier modification
declarations;
statements;
FUNCTION HEADER :
FUNCTION PROTOTYPES
If a function is not defined before it is used, it must be declared by specifying the return
type and the types of the parameters.
double sqrt(double);
Tells the compiler that the function sqrt() takes an argument of type double and returns
a double. This means, incidentally, that variables will be cast to the correct type; so sqrt(4) will
return the correct value even though 4 is int not double. These function prototypes are placed
at the top of the program, or in a separate header file, file.h, included as
#include "file.h"
void f (char c, int i); /*equivalent but makes code more readable */
If all functions are defined before they are used, no prototypes are needed. In this case, main()
is the last function of the program.
Variables defined within a function (including main) are local to this function and no
other function has direct access to them. The only way to pass variables to function is as
parameters. The only way to pass (a single) variable back to the calling
Ex:
printf(“%d\n”,b);
return n;
int a = 2, b = 1, c;
c = func(a);
return 0;
FUNCTION CALLS :
When a function is called, expressions in the parameter list are evaluated (in no
particular order!) and results are transformed to the required type. Parameters are copied to
local variables for the function and function body is executed when return is encountered, the
function is terminated and the result (specified in the return statement) is passed to the calling
function (for example main).
Ex:
int i, product = 1;
product *= i;
return product;
int i = 12;
printf(“%d”,fact(i));
return 0;
}
TYPES OF FUNCTIONS:
USER DEFINED FUNCTIONS:
Every program must have a main function to indicate where the program has to begin
its execution. While it is possible to code any program utilizing only main function, it leads to a
number of problems. The program may become too large and complex and as a result task of
debugging, testing and maintaining becomes difficult. If a program is divided into functional
parts, then each part may be independently coded and later combined into a single unit, these
subprograms called “functions” are much easier to understand debug and test.
There are times when some types of operation for calculation is repeated many times at
many points through out a program. For instance, we might use the factorial of a number at
several points in the program. In such situations, we may repeat the program statements
whenever they are needed. Another approach is to design a function that can be called and
used whenever required.
argument declaration;
executable statement 1;
executabie statement 2;
----------
----------
----------
return (expression) ;
The return statement is the mechanism for returning a value to the calling function. All
functions by default returns int type data. we can force a function to return a particular type of
data by using a type specifier in the header.
A function can be called by simply using the function name in the statement.
The C language is accompanied by a number of library functions that perform various tasks.The
ANSI committee has standardized header files which contain these functions.
MATH.H
The math library contains functions for performing common mathematical operations.
Some of the functions are :
ceil : The ceiling function rounds a number with a decimal part up to the next highest
integer (written mathematically as ⌈x⌉)
floor : The floor function rounds a number with a decimal part down to the next lowest
STRING.H
There are many functions for manipulating strings. Some of the more useful are:
STDIO.H
STDLIB.H
This library contains several functions for getting the current date and time.
Contains the assert macro, used to assist with detecting logical errors and other
<assert.h>
types of bug in debugging versions of a program.
<complex.h> A set of functions for manipulating complex numbers. (New with C99)
<inttypes.h> For precise conversion between integer types. (New with C99)
<iso646.h> For programming in ISO 646 variant character sets. (New with NA1)
<setjmp.h> Declares the macros setjmp and longjmp, which are used for non-local exits
Provides the core input and output capabilities of the C language. This file
<stdio.h>
includes the venerable printf function.
For manipulating wide streams and several kinds of strings using wide characters
<wchar.h>
- key to supporting a range of languages. (New with NA1)
CATEGORIES OF FUNCTIONS :
A function depending on whether arguments are present or not and whether a value is
returned or not may belong to.
When a function has no arguments, it does not receive any data from calling function.
In effect, there is no data transfer between calling function and called function.
#include<stdio.h>
main()
{
printline();
value();
printline();
printline()
int i;
for(i=1;i<=35;i++0)
printf(“%c”,”-“);
printf(“\n”);
value()
float inrate,sum,principal;
scanf(“%f%f%f”,&principal,&inrate,&period);
sum=principal;
year=1;
while(year<=period)
sum=sum*(1+inrate);
year=year+1;
}
printf(“%f%f%d%f”,principal,inrate,period,sum);
The actual (sent through main) and formal(declared in header section) should match in number,
type and order.
In case actual arguments are more than formal arguments, extra actual arguments are
discarded. On other hand unmatched formal arguments are initialized to some garbage values.
#include<stdio.h>
main()
float prin,inrate;
int period;
scanf(“%f%f%d”,&principal,&inrate,&period);
printline(‘z’);
printline(‘c’);
printline(ch)
char ch;
int i;
for(i=1;i<=52;i++)
printf(“%c”,ch);
printf(“\n”);
The process of passing the actual value of variables is known as Call by Value.
The process of calling a function using pointers to pass the addresses of variables is
known as Call by Reference. The function which is called by reference can change the value
of the variable used in the call.
STORAGE CLASSES :
1. Automatic Variables
2. External Variables
3. Static Variables
4. Register Variables
SCOPE :
The Scope of variable determines over what parts of the program a variable is actually
available for use.
LONGEVITY :
Longevity refers to period during which a variable retains a given value during execution
of a program (alive). So Longevity has a direct effect on utility of a given variable.
The variables may also be broadly categorized depending on place of their declaration as
internal(local) or external(global). Internal variables are those which are declared within a
particular function, while external variables are declared outside of any function.
AUTOMATIC VARIABLES :
They are declared inside a function in which they are to be utilized. They are created
when function is called and destroyed automatically when the function is exited, hence the
name automatic. Automatic Variables are therefore private (or local) to the function in which
they are declared. Because of this property, automatic variables are also referred to as local or
internal variables.
#include<stdio.h>
main()
int m=1000;
func2();
printf(“%d\n”,m);
func1()
int m=10;
printf(“%d\n”,m);
}
func2()
int m=100;
func1();
printf(“%d”,m);
First, any variable local to main will normally live throughout the whole program, although it is
active only in main.
Secondly, during recursion, nested variables are unique auto variables, a situation similar to
function nested auto variables with identical names.
EXTERNAL VARIABLES :
Variables that are both alive and active throughout entire program are known as
external variables. They are also known as Global Variables. In case a local and global have
same name local variable will have precedence over global one in function where it is declared.
#include<stdio.h>
int x;
main()
x=10;
printf(“%d”,x);
printf(“x=%d”,fun1());
printf(“x=%d”,fun2());
printf(“x=%d”,fun3());
fun1()
x=x+10;
return(x);
fun2()
int x;
x=1;
return(x);
fun3()
x=x+10;
return(x);
An extern within a function provides the type information to just that one function.
STATIC VARIABLES :
The value of Static Variable persists until the end of program. A variable can be
declared Static using Keyword Static like Internal & External Static Variables are differentiated
depending whether they are declared inside or outside of auto variables, except that they
remain alive throughout the remainder of program.
#include<stdio.h>
main()
int I;
for (I=1;I<=3;I++)
stat();
stat()
x=x+1;
printf(“x=%d\n”,x);
REGISTER VARIABLES :
We can tell the Compiler that a variable should be kept in one of the machines registers,
instead of keeping in the memory. Since a register access is much faster than a memory
access, keeping frequently accessed variables in register will lead to faster execution
Syntax:
int fibonacci(int n)
if (n <= 1)
return n;
else
With recursion 1.4 x 10 9 function calls needed to find the 43rd Fibonacci number(which
has the value 433494437) .If possible, it is better to write iterative functions.
product *= n;
return product;
}
UNIT – IV
ARRAYS :
An array is a group of related data items that share a common name.
Ex:- Students
The complete set of students are represented using an array name students. A
particular value is indicated by writing a number called index number or subscript in brackets
after array name. The complete set of value is referred to as an array, the individual values are
called elements.
A list of items can be given one variable index is called single subscripted variable or a
one-dimensional array.
The subscript value starts from 0. If we want 5 elements the declaration will be
int number[5];
This array is of type float. Its name is avg. and it can contains 50 elements only. The
range starting from 0 – 49 elements.
Initialization of Arrays :
Initialization of elements of arrays can be done in same way as ordinary variables are
done when they are declared.
If the number of values in the list is less than number of elements then only that elements will
be initialized. The remaining elements will be set to zero automatically.
The size may be omitted. In such cases, Compiler allocates enough space for all initialized
elements.
#include<stdio.h>
main()
int i;
float x[10],value,total;
for(i=0;i<10;i++)
scanf(“%f”,&value);
x[i]=value;
total=0;
for(i=0;i<10;i++)
total=total+x[i]
for(i=0;i<10;i++)
printf(“x*%2d+=%5.2f\n”,I+1,x*I+);
printf(“total=%0.2f”,total);
To store tables we need two dimensional arrays. Each table consists of rows and
columns. Two dimensional arrays are declare as
#include<stdio.h>
#include<math.h>
#define ROWS 5
#define COLS 5
main()
int row,cols,prod[ROWS][COLS];
int i,j;
printf(“Multiplication table”);
for(j=1;j< =COLS;j++)
printf(“%d”,j);
for(i=0;i<ROWS;i++)
row = i+1;
printf(“%2d|”,row);
COLS=j;
printf(“%4d”,prod*i+*j+);
}
}
They can be initialized by following their declaration with a list of initial values enclosed
in braces.
Initializes the elements of first row to zero and second row to one. The initialization is done by
row by row. The above statement can be written as
When all elements are to be initialized to zero, following short-cut method may be used.
STRINGS(CHARACTER ARRAYS) :
A String is an array of characters. Any group of characters (except double quote sign
)defined between double quotes is a constant string.
A string variable is any valid C variable name and is always declared as an array.
char string name [size];
size determines number of characters in the string name. When the compiler assigns a
character string to a character array, it automatically supplies a null character (‘\0’) at end of
String. Therefore, size should be equal to maximum number of character in String plus one.
char address[15];
scanf(“%s”,address);
The problem with scanf function is that it terminates its input on first white space it finds. So
scanf works fine as long as there are no spaces in between the text.
If we are required to read a line of text we use getchar(). which reads a single
characters. Repeatedly to read successive single characters from input and place in character
array.
#include<stdio.h>
main()
{
char line[80],ano_line[80],character;
int c;
c=0;
scanf(“%s”, line);
do
character = getchar();
ano_line[c] = character;
c++;
- while(character !=’\n’);
c=c-1;
ano_line*c+=’\0’;
The ..scanf functions provide a means to input formatted information from a stream
These functions take input in a manner that is specified by the format argument and store each
input field into the following arguments in a left to right fashion.
Each input field is specified in the format string with a conversion specifier which specifies how
the input is to be stored in the appropriate variable. Other characters in the format string
specify characters that must be matched from the input, but are not stored in any of the
following arguments. If the input does not match then the function stops scanning and returns.
A whitespace character may match with any whitespace character (space, tab, carriage return,
new line, vertical tab, or formfeed) or the next incompatible character.
Declarations:
These functions take the format string specified by the format argument and apply each
following argument to the format specifiers in the string in a left to right fashion. Each
character in the format string is copied to the stream except for conversion characters which
specify a format specifier.
String Input/Output
In addition to the Formatted string functions,C has two sets of string functions that read and
write strings without reformatting any data.These functions convert text file lines to strings and
strings to text file lines.
gets():
Declaration:
Reads a line from stdin and stores it into the string pointed to by str. It stops when either the
newline character is read or when the end-of-file is reached, whichever comes first. The
newline character is not copied to the string. A null character is appended to the end of the
string.
On success a pointer to the string is returned. On error a null pointer is returned. If the end-of-file
occurs before any characters have been read, the string remains unchanged.
puts:
Declaration:
Writes a string to stdout up to but not including the null character. A newline character is
appended to the output.
strcat() function:
strcat(string1,string2);
string1 = VERY
string2 = FOOLISH
strcat(string1,string2);
string1=VERY FOOLISH
string2 = FOOLISH
strcmp() function :
This function compares two strings identified by arguments and has a value 0 if they are
equal. If they are not, it has the numeric difference between the first non-matching characters
in the Strings.
strcmp(string1,string2);
Ex:- strcmp(name1,name2);
strcmp(name1,”John”);
strcmp(“ROM”,”Ram”);
strcpy() function :
strcpy(string1,string2);
strlen() function :
Counts and returns the number of characters in a string.
n= strlen(string);
/* Illustration of string-handling */
#include<stdio.h>
#include<string.h>
main()
char s1[20],s2[20],s3[20];
int X,L1,L2,L3;
scanf(“%s %s”,s1,s2);
X=strcmp(s1,s2);
if (X!=0)
strcat(s1,s2);
}
else
strcpy(s3,s1);
L1=strlen(s1);
L2=strlen(s2);
L3=strlen(s3);
}
UNIT – V
POINTERS:
One of the powerful features of C is ability to access the memory variables by their
memory address. This can be done by using Pointers. The real power of C lies in the proper use
of Pointers.
A pointer is a variable that can store an address of a variable (i.e., 112300).We say that a
pointer points to a variable that is stored at that address. A pointer itself usually occupies 4
bytes of memory (then it can address cells from 0 to 232-1).
Advantages of Pointers:
1. A pointer enables us to access a variable that is defined out side the function.
2. Pointers are more efficient in handling the data tables.
3. Pointers reduce the length and complexity of a program.
4. They increase the execution speed.
Definition :
A variable that holds a physical memory address is called a pointer variable or Pointer.
Declaration :
Datatype * Variable-name;
The operator & returns the memory address of variable on which it is operated, this is
called Referencing.
The * operator is called an indirection operator or dereferencing operator which is used to
display the contents of the Pointer Variable.
int *p,x;
x =5;
p= &x;
Assume that x is stored at the memory address 2000. Then the output for the following
printf statements is :
Output
Printf(“The Value of x is %d”,x); 5
Printf(“The Address of x is %u”,&x); 2000
Printf(“The Address of x is %u”,p); 2000
Printf(“The Value of x is %d”,*p); 5
Printf(“The Value of x is %d”,*(&x)); 5
When an array is declared, elements of array are stored in contiguous locations. The
address of the first element of an array is called its base address.
Now both a and a[0] points to location 2000. If we declare p as an integer pointer, then we can
make the pointer P to point to the array a by following assignment
P = a;
We can access every value of array a by moving P from one element to another.
i.e., P points to 0th element
P+1 points to 1st element
P+2 points to 2nd element
P+3 points to 3rd element
P +4 points to 4th element
main()
{
int *a,i;
printf(“Enter five elements:”);
for (i=0;i<5;i++)
scanf(“%d”,a+i);
printf(“The array elements are:”);
for (i=0;i<5;i++)
printf(“%d”, *(a+i));
}
STRUCTURES :
A Structure is a collection of elements of dissimilar data types. Structures provide the
ability to create user defined data types and also to represent real world data.
Suppose if we want to store the information about a book, we need to store its name
(String), its price (float) and number of pages in it(int). We have to store the above three items
as a group then we can use a structure variable which collectively store the information as a
book.
Structures can be used to store the real world data like employee, student, person etc.
Declaration :
The declaration of the Structure starts with a Key Word called Struct and ends with ; .
The Structure elements can be any built in types.
Initialization :
Structure elements are stored in contiguous memory locations as shown below. The
above Structure occupies totally 26 bytes.
main()
{
struct emp
{
int empno;
char ename[20];
float sal;
};
struct emp e;
printf (“ Enter Employee number: \n”);
scanf(“%d”,&e.empno);
printf (“ Enter Employee Name: \n”);
scanf(“%s”,&e.empname);
printf (“ Enter the Salary: \n”);
scanf(“%f”,&e.sal);
printf (“ Employee No = %d”, e.empno);
printf (“\n Emp Name = %s”, e.empname);
printf (“\n Salary = %f”, e.sal);
}
/* Program to read Student Details and Calculate total and average using structures */
#include<stdio.h>
main()
{
struct stud
{
int rno;
char sname[20];
int m1,m2,m3;
};
struct stud s;
int tot;
float avg;
#include<stdio.h>
main()
{
struct item
{
int itemno;
char itemname[20];
float rate;
int qty;
};
struct item i;
float tot_amt;
ARRAY OF STRUCTURES :
To store more number of Structures, we can use array of Structures. In array of
Structures all elements of the array are stored in adjacent memory location.
main()
{
struct book
{
char name[20];
float price;
int pages;
};
struct book b[10];
int i;
for (i=0;i<10;i++)
{
print(“\n Enter Name, Price and Pages”);
scanf(“%s%f%d”, b[i].name,&b[i].price,&b[i].pages);
}
for (i i=0;i<10;i++)
printf(“ \n%s%f%d”, b[i].name,b[i].price,b[i].pages);
}
UNIONS :
Union, similar to Structures, are collection of elements of different data types. However,
the members within a union all share the same storage area within the computer‟s memory,
whereas each member within a Structure is assigned its own unique Storage area.
Structure enables us to treat a member of different variables stored at different places in
memory, a union enables us to treat the same space in memory as a number of different
variables. That is, a union offers a way for a section of memory to be treated as a variable of one
type on one occasion and as a different variable of a different type on another occasion.
Unions are used to conserve memory. Unions are useful for applications involving
multiple members, where values need not be assigned to all of the members at any given time.
An attempt to access the wrong type of information will produce meaningless results.
The union elements are accessed exactly the same way in which the structure elements
are accessed using dot(.) operator.
The difference between the structure and union in the memory representation is as
follows.
struct cx
int i;
char ch[2];
};
struct cx s1;
union ex
int i;
char ch[2];
union ex u;
--------u.i ---------------
u.ch[0] u.ch[0]
main()
{
union example
int i;
char ch[2];
};
union exaple u;
u.i = 412;
Output :
u.i = 512
u.ch[0] = 0
u.ch[1] =2
u.i = 562
u.ch[0] = 50
u.ch[1] =2
A union may be a member of a structure, and a structure may be a member of a union. And
also structures and unions may be freely mixed with arrays.
/* Program to illustrate union with in a Structure */
main()
{
union id
char color;
int size;
};
struct {
char supplier[20];
float cost;
union id desc;
}pant, shirt;
shirt.desc.color = ‘w’;
shirt.desc.size = 12;
}
VARDHAMAN COLLEGE OF ENGINEERING
(AUTONOMOUS)
Shamshabad – 501 218, Hyderabad
C
PROGRAMMING
C PROGRAMMING Page 1
UNIT I
Computer systems:
A Computer is an electronic device which performs operations such as accepts data
As an input, store the data, manipulate or process the data and produce the results an output.
Main task performed by a computer
• Accept the data
• Process or manipulate the data
• Display or store the result in the form of human understanding
• Store the data, instructions and results.
Computer hardware is the collection of physical elements that comprise a computer system.
Computer software is a collection of computer programs and related data that provides the
instructions for a computer what to do and how to do it. Software refers to one or more computer
programs and data held in the storage of the computer for some purpose
C PROGRAMMING Page 2
Basically computer software is of three main types
Computing Environment:
C PROGRAMMING Page 3
Client Server Environment
Time sharing Environment
Distributed Environment
Time-Sharing Environment:
In the time-sharing environment, all computing must be done by the central computer. The
central computer the shared resources, it manage the shared data and printing. Employees in
large companies often work in what is known as time sharing environment. In the time sharing
environment, many users are connected to one or more computers. These computers may be mini
computers and central mainframes. In this environment the output devices, auxiliary storage
devices are shared by all the users.
C PROGRAMMING Page 4
Client/Server Environment
Client/Server computing environment splits the computing function between a
central computer and user‟s computers. The users are given personal computers or
work stations so that some of the computation responsibility can be moved from
the central computer and assigned to the workstations. In the client/server
environment the users micro computers or work stations are called the client. The
central computer which may be a powerful micro computer, minicomputer or
central mainframe system is known as server.
C PROGRAMMING Page 5
COMPUTER LANGUAGES
In order to communicate with the computer user also needs to have a language that should be
understood by the computer. For this purpose, different languages are developed for performing
different types of work on the computer. Basically, languages are divided into two categories
according to their interpretation.
C PROGRAMMING Page 6
presence of an electric pulse . Since a computer is Capable of recognizing electric signals,
therefore, it understand machine Language.
C PROGRAMMING Page 7
Advantages of Assembly Language
i) It is easier to understand and use as compared to machine language.
ii)It is easy to locate and correct errors.
iii) It is modified easily
Disadvantages of Assembly Language
i) Like machine language it is also machine dependent.
ii) Since it is machine dependent therefore programmer Should have the knowledge of the
hardware also.
High Level Languages
High level computer languages give formats close to English language and the purpose of
developing high level languages is to enable people to write programs easily and in their own
native language environment (English). High-level languages are basically symbolic languages
that use English words and/or mathematical symbols rather than mnemonic codes. Each
instruction in the high level language is translated into many machine language instructions thus
showing one-to-many translation
Types of High Level Languages
Many languages have been developed for achieving different variety of tasks, some are fairly
specialized others are quite general purpose.
These are categorized according to their use as
a) Algebraic Formula-Type Processing. These languages are oriented towards the
computational procedures for solving mathematical and statistical problem
Examples are
BASIC (Beginners All Purpose Symbolic Instruction Code).
FORTRAN (Formula Translation).
PL/I (Programming Language, Version 1).
ALGOL (Algorithmic Language).
C PROGRAMMING Page 8
APL (A Programming Language).
b) Business Data Processing:
These languages emphasize their capabilities for maintaining data processing procedures
and files handling problems. Examples are:
COBOL (Common Business Oriented Language).
RPG (Report Program Generator
b) String and List Processing: These are used for string manipulation including search for
patterns, inserting and deleting characters. Examples are:
LISP (List Processing).
Prolog (Program in Logic).
Object Oriented Programming Language
In OOP, the computer program is divided into objects. Examples are:
C++
Java
e) Visual programming language: these are designed for building Windows-based applications
Examples are:
Visual Basic
Visual Java
Visual C
C PROGRAMMING Page 9
Following are the advantages of a high level language:
User-friendly
Similar to English with vocabulary of words and symbols
Therefore it is easier to learn.
They are easier to maintain.
Disadvantages of High Level Language
A high-level language has to be translated into the machine language by a translator and
thus a price in computer time is paid.
The object code generated by a translator might be inefficient Compared to an equivalent
assembly language program
1. Writing and editing the program using Text editor (source code).
2. Compile the program using any C compiler.(.bak file)
3. Linking the program with the required library modules(object file)
4. Executing the program. (.Exe file)
C PROGRAMMING Page 10
does loading.
Executing program: Execution is the last step. In this step program starts
execution. Its instructions start working and output of the program display on the
screen.
Algorithm:
An algorithm is a description of a procedure which terminates with a result. Algorithm is a
step-by-step method of solving a problem.
Properties of an Algorithm:
1) Finiteness: - An algorithm terminates after a finite numbers of steps.
2) Definiteness: - Each step in algorithm is unambiguous. This means that the action
specified by the step cannot be interpreted (explain the meaning of) in multiple ways & can
be performed without any confusion.
3) Input: - An algorithm accepts zero or more inputs
4) Output:- An algorithm should produce at least one output.
C PROGRAMMING Page 11
5) Effectiveness: - It consists of basic instructions that are realizable. This means that the
instructions can be performed by using the given inputs in a finite amount of time.
Writing an algorithm
An algorithm can be written in English, like sentences and using mathematical
formulas. Sometimes algorithm written in English like language is Pseudo code.
Examples
1) Finding the average of three numbers
1. Let a,b,c are three integers
2. Let d is float
3. Display the message “Enter any three integers:”
4. Read three integers and stores in a,b,c
5. Compute the d = (a+b+c)/3.0
6. Display “The avg is:” , d
7. End.
Example 1: Write an algorithm to determine a student‟s final grade and indicate whether
it is passing or failing. The final grade is calculated as the average of four marks.
Pseudocode::
Input a set of 4 marks
Calculate their average by summing and dividing by 4
if average is below 50
Print “FAIL”
else
Print “PASS”
Detailed Algorithm :
Step 1: Input M1,M2,M3,M4
Step 2: GRADE (M1+M2+M3+M4)/4
Step 3: if (GRADE < 50) then
Print “FAIL”
else
Print “PASS”
endif
Flowcharts :
The pictorial representation of algorithm is called flowchart.
2 : as different symbols are used to specify the type of operation performed, it is easier to
understand the complex programs with the help of flowcharts.
C PROGRAMMING Page 12
Flowchart Symbols
C PROGRAMMING Page 13
print num is odd
Step4: End Step4: STOP
(Algorithm in natural language) (Algorithm by using pseudo code)
FLOWCHART : start
read num
If
num%2=0
stop
System Development:
C PROGRAMMING Page 14
Or
Systems Requirements
Analysis
Design
Coding
System Test
Maintenance
1. Statement of Problem
a) Working with existing system and using proper questionnaire, the problem should be
explained
clearly.
b) What inputs are available, what outputs are required and what is needed for creating workable
solution, should be understood clearly.
C PROGRAMMING Page 15
2. Analysis
a) The method of solutions to solve the problem can be identified.
b) We also judge that which method gives best results among different methods of solution.
3. Design
a) Algorithms and flow charts will be prepared.
b) Focus on data, architecture, user interfaces and program components.
4. System Test
The algorithms and flow charts developed in the previous steps are converted into actual
programs in the high level languages like C.
a. Compilation
The process of translating the program into machine code is called as Compilation. Syntactic
errors are found quickly at the time of compiling the program. These errors occur due to the
usage of wrong syntaxes for the statements.
Eg: x=a*y+b
There is a syntax error in this statement, since, each and every statement in C language ends with
a semicolon (;).
b. Execution
The next step is Program execution. In this phase, we may encounter two types of errors.
Runtime Errors: these errors occur during the execution of the program and terminate the
program abnormally.
Logical Errors: these errors occur due to incorrect usage of the instructions in the program. These
errors are neither detected during compilation or execution nor cause any stoppage to the
program execution but produces incorrect output.
5. Maintenance
We are maintenance the software by updating the information, providing the security and license
for the software.
What is C?
C is a programming language developed at AT & T‟s Bell Laboratories of USA in 1972. It
was designed and written by Dennis Ritche. Dennis Ritchie is known as the founder of c
language.
It was developed to overcome the problems of previous languages such as B, BCPL etc.
Features of C
1. Portability or machine independent
C PROGRAMMING Page 16
2. Sound and versatile language
3. Fast program execution.
4. An extendible language.
5. Tends to be a structured language.
Historical developments of C(Background)
Year Language Developed by Remarks
/* Documentation section */
/* Link section */
/* Definition section */
/* Global declaration section */
main()
{
Declaration part
Executable part (statements)
}
/* Sub-program section */
The documentation section is used for displaying any information about the
program like the purpose of the program, name of the author, date and time written
etc, and this section should be enclosed within comment lines. The statements in
the documentation section are ignored by the compiler.
The link section consists of the inclusion of header files.
C PROGRAMMING Page 17
The definition section consists of macro definitions, defining constants etc,.
Anything declared in the global declaration section is accessible throughout
the program, i.e. accessible to all the functions in the program.
main() function is mandatory for any program and it includes two parts, the
declaration part and the executable part.
The last section, i.e. sub-program section is optional and used when we require
including user defined functions in the program.
First C Program
Before starting the abcd of C language, you need to learn how to write, compile and run the first
c program.
To write the first c program, open the C console and write the following code:
1. #include <stdio.h>
2. #include <conio.h>
3. void main(){
4. printf("Hello C Language");
5. getch();
6. }
#include <stdio.h> includes the standard input output library functions. The printf() function
is defined in stdio.h .
#include <conio.h> includes the console input output library functions. The getch() function is
defined in conio.h file.
void main() The main() function is the entry point of every program in c language. The void
keyword specifies that it returns no value.
getch() The getch() function asks for a single character. Until you press any key, it blocks the
screen.
C TOKENS: The smallest individual units are known as tokens. C has six types of tokens.
1: Identifiers
C PROGRAMMING Page 18
2: Keywords
3: Constants
4: Strings
5: Special Symbols
6: Operators
Identifiers:
Identifiers refer to the names of variables, constants, functions and arrays. These are user-defined
names is called Identifiers. These identifier are defined against a set of rules.
Rules for an Identifier
1. An Identifier can only have alphanumeric characters( a-z , A-Z , 0-9 ) and underscore( _
).
2. The first character of an identifier can only contain alphabet( a-z , A-Z ) or underscore ( _
).
3. Identifiers are also case sensitive in C. For example name and Name are two different
identifier in C.
Ex : Valid Invalid
STDNAME Return
SUB $stay
TOT_MARKS 1RECORD
Y2K
C PROGRAMMING Page 19
Keywords: A keyword is a reserved word. All keywords have fixed meaning that means we
cannot change. Keywords serve as basic building blocks for program statements. All keywords
must be written in lowercase. A list of 32 keywords in c language is given below:
Data Types/Types:
To store data the program must reserve space which is done using datatype. A datatype is a
keyword/predefined instruction used for allocating memory for data. A data type specifies
the type of data that a variable can store such as integer, floating, character etc . It used for
declaring/defining variables or functions of different types before to use in a program.
C PROGRAMMING Page 20
Types Data Types
The basic data types are integer-based and floating-point based. C language supports both signed
and unsigned literals. The memory size of basic data types may change according to 32 or 64 bit
operating system. Let‟s see the basic data types. Its size is given according to 32 bit
architecture.
C PROGRAMMING Page 21
int or signed int 2 -32768 to 32767 %d or %i
Variables
A variable is a name of memory location. It is used to store data. Variables are changeable,
we can change value of a variable during execution of a program. . It can be reused many
times.
C PROGRAMMING Page 22
Declaration of Variables : A variable can be used to store a value of any data type. The
declaration of variables must be done before they are used in the program. The general format
for declaring a variable.
Ex : int x,y,z;
float a,b;
char m,n;
Assigning values to variables : values can be assigned to variables using the assignment
operator (=). The general format statement is :
Ex : x=100;
a= 12.25;
m=‟f‟;
we can also assign a value to a variable at the time of the variable is declared. The general format
of declaring and assigning value to a variable is :
Ex ; int x=100;
float a=12.25;
char m=‟f‟;
Types of Variables in C
1. local variable
2. global variable
3. static variable
Constants
Constants refer to fixed values that do not change during the execution of a program.
C PROGRAMMING Page 23
C supports several kinds of constants.
CONSTANTS
TYPES OF C CONSTANT:
1. Integer constants
2. Real or Floating point constants
3. Character constants
4. String constants
5. Backslash character constants
Integer constants:
An integer constant is a numeric constant (associated with number) without any fractional or
exponential part. There are three types of integer constants in C programming:
For example:
In C programming, octal constant starts with a 0 and hexadecimal constant starts with a
0x.
C PROGRAMMING Page 24
1: Decimal Integer : the rules for represent decimal integer.
a) Decimal Integer value which consist of digits from 0-9.
b) Decimal Integer value with base 10.
c) Decimal Integer should not prefix with 0.
d) It allows only sign (+,-).
e) No special character allowed in this integer.
Ex : valid invalid
7 $77
77 077
+77 7,777
-77
2 : Octal : An integer constants with base 8 is called octal. These rules are :
a) it consist of digits from 0 to 7.
b) It should prefix with 0.
c) It allows sign (+,-).
d) No special character is allowed.
EX : VALID INVALID
0123 123 -> it because no prefix with 0
+0123 0128 -> because digits from 0 to 7.
-0123
Ex : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
b) it should prefix with 0X or 0x.
c) it allows sign (+,-).
d) No special character is allowed.
EX : OX1a, ox2f
C PROGRAMMING Page 25
-2.0
0.0000234
-0.22E-5
Real Notation : The real notation is represented by an integer followed by a decimal point and
the fractional(decimal) part. It is possible to omit digits before or after the decimal point.
Ex : 15.25
.75
30
-9.52
-92
+.94
mantisha e exponent
The mantisha is either a real/floating point number expressed in decimal notation or an integer
and the exponent is an integer number with an optional sign. The character e separating the
mantisha and the exponent can be written in either lowercase or uppercase.
Ex : 1.5E-2
100e+3
-2.05e2
Character Constant:
Single Character Constant : A character constant is either a single alphabet, a single digit, a
single special symbol enclosed within single inverted commas.
C PROGRAMMING Page 26
„A‟ „ab‟
String constant : A string constant is a sequence of characters enclosed in double quote, the
characters may be letters, numbers, special characters and blank space etc
a) \n newline
b) \r carriage return
c) \t tab
d) \v vertical tab
e) \b backspace
f) \f form feed (page feed)
g) \a alert (beep)
h) \‟ single quote(„)
i) \” double quote(“)
j) \? Question mark (?)
k) \\ backslash (\)
C PROGRAMMING Page 27
7. getch();
8. }
Output:
The value of PI is: 3.140000
2) C #define preprocessor
The #define preprocessor is also used to define constant.
C#define
The #define preprocessor directive is used to define constant or micro substitution. It can use any
basic data type.
Syntax:
#define token value
Let's see an example of #define to define a constant.
#include <stdio.h>
1. #define PI 3.14
2. main() {
3. printf("%f",PI);
4. }
Output:
3.140000
Input / Output (I/O) Functions : In „C‟ language, two types of Input/Output functions are
available, and all input and output operations are carried out through function calls. Several
functions are available for input / output operations in „C‟. These functions are collectively
known as the standard i/o library.
Input: In any programming language input means to feed some data into program. This can be
given in the form of file or from command line.
Output: In any programming language output means to display some data on screen, printer or
in any file.
The Standard Files
C programming treats all the devices as files. So devices such as the display are addressed in the
same way as files and the following three files are automatically opened when a program
executes to provide access to the keyboard and screen.
C PROGRAMMING Page 28
Standard output stdout Screen
I / O Functions
gets() puts()
getch()
getche()
. Formated I/O Functions : formatted I/O functions operates on various types of data.
1 : printf() : output data or result of an operation can be displayed from the computer to a
standard output device using the library function printf(). This function is used to print any
combination of data.
Formating string : it prints all the character given in doublequotes (“ “) except formatting
specifier.
C PROGRAMMING Page 29
Ex : printf(“ hello “);-> hello
printf(“a”); -> a
printf(“%d”, a); -> a value
printf(“%d”); -> no display
scanf() : input data can be entered into the computer using the standard input „C‟ library
function called scanf(). This function is used to enter any combination of input.
The scanf() function is used to read information from the standard input device (keyboard).
Each variable name (argument) must be preceeded by an ampersand (&). The (&) symbol gives
the meaning “address of “ the variable.
a) character I/O:
a) String I/O:
1. gets(): Used for accepting any string from the standard input(stdin)
eg:gets()
C PROGRAMMING Page 30
OPERATORS AND EXPRESSIONS:
Operators : An operator is a Symbol that performs an operation. An operators acts some
variables are called operands to get the desired result.
Ex : a+b;
Where a,b are operands and + is the operator.
Types of Operator :
1) Arithmetic Operators.
2) Relational Operators.
3) Logical Operators.
4) Assignment Operators.
5). Unary Operators.
6) Conditional Operators.
7) Special Operators.
8) Bitwise Operators.
9) Shift Operators.
Arithmetic Operators
An arithmetic operator performs mathematical operations such as addition, subtraction and
multiplication on numerical values (constants and variables).
C Program to demonstrate the working of arithmetic operators
#include <stdio.h>
void main()
{
int a = 9,b = 4, c;
c = a+b;
printf("a+b = %d \n",c);
c = a-b;
printf("a-b = %d \n",c);
c = a*b;
printf("a*b = %d \n",c);
c=a/b;
printf("a/b = %d \n",c);
c=a%b;
printf("Remainder when a divided by b = %d \n",c);
C PROGRAMMING Page 31
Output
a+b = 13
a-b = 5
a*b = 36
a/b = 2
Remainder when a divided by b=1
Relational Operators. A relational operator checks the relationship between two operands.
If the relation is true, it returns 1; if the relation is false, it returns value 0.
Operands may be variables, constants or expressions.
#include <stdio.h>
int main()
int a = 5, b = 5, c = 10;
C PROGRAMMING Page 32
printf("%d < %d = %d \n", a, b, a < b); //false
return 0;
Output
5 == 5 = 1
5 == 10 = 0
5>5=0
5 > 10 = 0
5<5=0
5 < 10 = 1
5 != 5 = 0
5 != 10 = 1
5 >= 5 = 1
5 >= 10 = 0
C PROGRAMMING Page 33
5 <= 5 = 1
5 <= 10 = 1
Logical Operators.
These operators are used to combine the results of two or more conditions. An expression
containing logical operator returns either 0 or 1 depending upon whether expression results true
or false. Logical operators are commonly used in decision making in C programming.
Truth Table
Op1 Op2 Op1 && Op2
true true true
true false false
false true false
false false false
Logical OR : If any one condition true the complete condition becomes true.
Truth Table
Op1 Op2 Op1 // Op2
true true true
true false true
false true true
false false false
Logical Not : This operator reverses the value of the expression it operates on i.e, it makes a
true expression false and false expression true.
Op1 Op1 !
true false
false true
#include <stdio.h>
C PROGRAMMING Page 34
int main()
return 0;
Output
(a = b) || (c < b) equals to 1
C PROGRAMMING Page 35
(a != b) || (c < b) equals to 0
!(a != b) equals to 1
!(a == b) equals to 0
Assignment Operators. Assignment operators are used to assign a value (or) an expression
(or) a value of a variable to another variable.
Ex : x=10;
y=a+b;
z=p;
„C‟ provides compound assignment operators to assign a value to variable in order to assign a
new value to a variable after performing a specified operation.
#include <stdio.h>
int main()
int a = 5, c;
c = a;
C PROGRAMMING Page 36
printf("c = %d \n", c);
c += a; // c = c+a
c -= a; // c = c-a
c *= a; // c = c*a
c /= a; // c = c/a
c %= a; // c = c%a
return 0;
Output
c=5
c = 10
c=5
c = 25
c=5
c=0
C PROGRAMMING Page 37
Unary operators are having higher priority than the other operators. Unary operators, meaning
they only operate on a single operand.
1. Increment operator is used to increment the current value of variable by adding integer 1.
We have two types of increment operator i.e Pre-Increment and Post-Increment Operator.
Pre-Increment
Pre-increment operator is used to increment the value of variable before using in the expression. In
the Pre-Increment value is first incremented and then used inside the expression.
b = ++y;
In this example suppose the value of variable „y‟ is 5 then value of variable „b‟ will be 6 because
the value of „y‟ gets modified before using it in a expression.
Post-Increment
Post-increment operator is used to increment the value of variable as soon as after executing
expression completely in which post increment is used. In the Post-Increment value is first used
in a expression and then incremented.
b = x++;
In this example suppose the value of variable „x‟ is 5 then value of variable „b‟ will be 5 because
old value of „x‟ is used.
Note :
We cannot use increment operator on the constant values because increment operator operates on
only variables. It increments the value of the variable by 1 and stores the incremented value back
to the variable
C PROGRAMMING Page 38
b = ++5;
or
b = 5++;
Operator Meaning
++x Pre increment
- -x Pre decrement
x++ Post increment
x-- Post decrement
Where
1 : ++x : Pre increment, first increment and then do the operation.
2 : - -x : Pre decrement, first decrements and then do the operation.
3 : x++ : Post increment, first do the operation and then increment.
4 : x- - : Post decrement, first do the operation and then decrement.
Output
++a = 11
--b = 99
++c = 11.500000
++d = 99.500000
C PROGRAMMING Page 39
Multiple increment operators inside printf
#include<stdio.h>
void main() {
int i = 1;
printf("%d %d %d", i, ++i, i++);
}
Output : 3 3 1
Pictorial representation
Explanation of program
I am sure you will get confused after viewing the above image and output of program.
1. Whenever more than one format specifiers (i.e %d) are directly or indirectly related with
same variable (i,i++,++i) then we need to evaluate each individual expression from right
to left.
2. As shown in the above image evaluation sequence of expressions written inside printf
will be – i++,++i,i
3. After execution we need to replace the output of expression at appropriate place
No Step Explanation
Evaluate
1 At the time of execution we will be using older value of i = 1
i++
Evaluate At the time of execution we will be increment value already modified after
2
++i step 1 i.e i = 3
C PROGRAMMING Page 40
Postfix and Prefix Expression in Same Statement
#include<stdio.h>
#include<conio.h>
void main() {
int i = 0, j = 0;
j = i++ + ++i;
printf("%d\n", i);
printf("%d\n", j);
}
Output :
2
2
Explanation of Program
C PROGRAMMING Page 41
Syntax : condition ? exp1 : exp2;
#include <stdio.h>
int main(){
char February;
int days;
printf("If this year is leap year, enter 1. If not enter any integer: ");
scanf("%c",&February);
// If test condition (February == 'l') is true, days equal to 29.
// If test condition (February =='l') is false, days equal to 28.
days = (February == '1') ? 29 : 28;
printf("Number of days in February = %d",days);
return 0;
}
Output
If this year is leap year, enter 1. If not enter any integer: 1
Number of days in February = 29
Bitwise Operators:
Bitwise operators are used to manipulate the data at bit level. It operates on integers only. It
may not be applied to float.In arithmetic-logic unit (which is within the CPU), mathematical
operations like: addition, subtraction, multiplication and division are done in bit-level which
makes processing faster and saves power. To perform bit-level operations in C programming,
bitwise operators are used.
Operator Meaning
& Bitwise AND
| Bitwise OR
^ Bitwise XOR
<< Shift left
>> Shift right
~ One‟s complement.
Bitwise OR operator |
The output of bitwise OR is 1 if at least one corresponding bit of two operands is 1. In C
Programming, bitwise OR operator is denoted by |.
12 = 00001100 (In Binary)
25 = 00011001 (In Binary)
Bitwise OR Operation of 12 and 25
00001100
| 00011001
________
00011101 = 29 (In decimal)
C PROGRAMMING Page 43
}
Output
Output =29
Output
Output = 21
C PROGRAMMING Page 44
~ 00100011
________
11011100 = 220 (In decimal)
Twist in bitwise complement operator in C Programming
For any integer n, bitwise complement of n will be -(n+1). To understand this, you should have
the knowledge of 2's complement.
2's Complement
Two's complement is an operation on binary numbers. The 2's complement of a number is equal
to the complement of that number plus 1. For example:
The bitwise complement of 35 is 220 (in decimal). The 2's complement of 220 is -36. Hence, the
output is -36 instead of 220.
#include <stdio.h>
C PROGRAMMING Page 45
int main()
printf("complement = %d\n",~35);
printf("complement = %d\n",~-12);
return 0;
Output
Complement = -36
Complement = 11
Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted
by >>.
Left shift operator shifts all bits towards left by certain number of specified bits. It is denoted by
<<.
Special Operators
1 ) Comma Operator :The comma operator is used to separate the statement elements such as
variables, constants or expressions, and this operator is used to link the related expressions
together, such expressions can be evaluated from left to right and the value of right most
expressions is the value of combined expressions
C PROGRAMMING Page 46
2 ) Sizeof Operator : The sizeof() is a unary operator, that returns the length in bytes o the
specified variable, and it is very useful to find the bytes occupied by the specified variable in the
memory.
Syntax : sizeof(variable-name);
int a;
Ex : sizeof(a); //OUTPUT-----2bytes
Expressions
C PROGRAMMING Page 47
Ex : complex expression is 6+8*7.
Operator Precedence : Arithmetic Operators are evaluvated left to right using the
precedence of operator when the expression is written without the paranthesis.They are two
levels of arithmetic operators in C.
1 : High Priority * / %
2 : Low Priority + -.
Arithmetic Expression evaluation is carried out using the two phases from left to right.
1 : First phase : The highest priority operator are evaluated in the 1st phase.
2 : Second Phase : The lowest priority operator are evaluated in the 2nd phase.
Ex : a=x-y/3+z*2+p/4.
x=7, y=9, z=11, p=8.
a= 7-9/3+11*2+8/4.
1st phase :
1 : a = 7-3+11*2+8/4
2 : a = 7-3+22+8/4
3 : a = 7-3+22+2
2nd phase :
1 : a = 4+22+2
2 : a = 26+2
3 : a = 28
Whenever parentheses are used, the expressions within parantheses highest priority. If two or
more sets of paranthesis appear one after another. The expression contained in the left-most set is
evaluated first and the right-most in the last.
1st phase :
1 : 9-12/6*(2-1)
2 : 9-12/6*1
nd
2 phase :
1 : 9-2*1
2 : 9-2.
3rd phase :
C PROGRAMMING Page 48
1 : 7.
Associativity specifies the order in which the operators are evaluated with the same
precedence in a complex expression. Associativity is of two ways, i.e left to ringht and right to
left. Left to right associativity evaluates an expression starting from left and moving towards
right. Right to left associativity proceds from right to left.
C PROGRAMMING Page 49
< <= > >= Relational Operator 6 L-R (left to right)
== Equality 7 L-R (left to right)
!= Inequality
& Bitwise AND 8 L-R (left to right)
^ Bitwise XOR 9 L-R (left to right)
| Bitwise OR 10 L-R (left to right)
&& Logical AND 11 L-R (left to right)
|| Logical OR 12 L-R (left to right)
?: Conditional 13 R-L (right to left)
= *= /= %= += Assignment operator 14 R-L (right to left)
-= &= ^= <<=
>>=
, Comma operator 15 L-R (left to right)
Syntax:
(type_name) expression;
1. int f= 9/4;
2. printf("f : %d\n", f );//Output: 2
Example:
#include <stdio.h>
int main()
C PROGRAMMING Page 50
{
getchar();
or
Type Casting - C Programming
Type casting refers to changing an variable of one data type into another. The compiler will
automatically change one type of data into another if it makes sense. For instance, if you assign
an integer value to a floating-point variable, the compiler will convert the int to a float. Casting
allows you to make this type conversion explicit, or to force it when it wouldn‟t normally
happen.
When the type conversion is performed automatically by the compiler without programmers
intervention, such type of conversion is known as implicit type conversion or type promotion.
int x;
The type conversion performed by the programmer by posing the data type of the expression of
specific type is known as explicit type conversion. The explicit type conversion is also known as
type casting.
C PROGRAMMING Page 51
Type casting in c is done in the following form:
(data_type)expression;
where, data_type is any valid c data type, and expression may be constant, variable or
expression.
For example,
int x;
The following rules have to be followed while converting the expression from one type to
another to avoid the loss of information:
Example
float z;
If we want to get the exact value of 7/5 then we need explicit casting from int to float:
C PROGRAMMING Page 52
int x=7, y=5;
float z;
Integer Promotion
Integer promotion is the process by which values of integer type "smaller" than int or unsigned
int are converted either to int or unsigned int. Consider an example of adding a character with an
integer −
#include <stdio.h>
main()
int i = 17;
int sum;
sum = i + c;
When the above code is compiled and executed, it produces the following result −
Here, the value of sum is 116 because the compiler is doing integer promotion and
converting the value of 'c' to ASCII before performing the actual addition operation.
C PROGRAMMING Page 53
The usual arithmetic conversions are implicitly performed to cast their values to a common
type. The compiler first performs integer promotion; if the operands still have different types,
then they are converted to the type that appears highest in the following hierarchy –
UNIT II
STATEMENTS
A statement causes the computer to carry out some definite action. There are three different
classes of statements in C:
C PROGRAMMING Page 54
Null statement
A null statement consisting of only a semicolon and performs no operations. It can appear
wherever a statement is expected. Nothing happens when a null statement is executed.
Syntax: - ;
Statements such as do, for, if, and while require that an executable statement appear as the
statement body. The null statement satisfies the syntax requirement in cases that do not need a
substantive statement body.
The Null statement is nothing but, there is no body within loop or any other statements in
C.
or
for (i=0;i<10;i++)
C PROGRAMMING Page 55
//empty body
Expression
i = 0;
i = i + 1;
are all expression statements. In C, however, the semicolon is a statement terminator. Expression
statements do all of the real work in a C program. Whenever you need to compute new values for
variables, you'll typically use expression statements (and they'll typically contain assignment
operators). Whenever you want your program to do something visible, in the real world, you'll
typically call a function (as part of an expression statement). We've already seen the most basic
example: calling the function printf to print text to the screen.
Note -If no expression is present, the statement is often called the null statement.
Return
The return statement terminates execution of a function and returns control to the calling
function, with or without a return value. A function may contain any number
of return statements. The return statement has
If present, the expression is evaluated and its value is returned to the calling function. If
necessary, its value is converted to the declared type of the containing function's return value.
A return statement with an expression cannot appear in a function whose return type is void . If
there is no expression and the function is not defined as void , the return value is undefined. For
example, the following main function returns an unpredictable value to the operating
system:
main ( )
C PROGRAMMING Page 56
return;
Compound statements
A compound statement (also called a "block") typically appears as the body of another statement,
such as the if statement, for statement, while statement, etc
pi=3.14;
area=pi*radius*radius;
Example:
C PROGRAMMING Page 57
Selection Statement/Conditional Statements/Decision Making Statements
A selection statement selects among a set of statements depending on the value of a controlling
expression. Or
Moving execution control from one place/line to another line based on condition
Or
Conditional statements control the sequence of statement execution, depending on the value of a
integer expression
1: if
2: switch.
1: simple if statement.
2: if –else statement
4: else if ladder.
if statement.
The if statement controls conditional branching. The body of an if statement is executed if the
value of the expression is nonzero. Or if statement is used to execute the code if condition
is true. If the expression/condition is evaluated to false (0), statements inside the body of if is
skipped from execution.
Syntax : if(condition/expression)
true statement;
C PROGRAMMING Page 58
}
statement-x;
If the condition/expression is true, then the true statement will be executed otherwise the true
statement block will be skipped and the execution will jump to the statement-x. The „true
statement‟ may be a single statement or group of statement.
If there is only one statement in the if block, then the braces are optional. But
if there is more than one statement the braces are compulsory
Flowchart
Example:
#include<stdio.h>
main()
int a=15,b=20;
C PROGRAMMING Page 59
if(b>a)
printf("b is greater");
Output
b is greater
#include <stdio.h>
int main()
{
int number;
return 0;
}
Output 1
Enter an integer: -2
You entered -2.
The if statement is easy.
Output 2
Enter an integer: 5
The if statement in C programming is easy.
If-else statement : The if-else statement is an extension of the simple if statement. The
general form is. The if...else statement executes some code if the test expression is true (nonzero)
and some other code if the test expression is false (0).
C PROGRAMMING Page 60
Syntax : if (condition)
{
true statement;
}
else
{
false statement;
}
statement-x;
If the condition is true , then the true statement and statement-x will be executed and if the
condition is false, then the false statement and statement-x is executed.
Or
If test expression is true, codes inside the body of if statement is executed and, codes inside the
body of else statement is skipped.
If test expression is false, codes inside the body of else statement is executed and, codes inside
the body of if statement is skipped.
Flowchart
Example:
// Program to check whether an integer entered by the user is odd or even
#include <stdio.h>
int main()
{
C PROGRAMMING Page 61
int number;
printf("Enter an integer: ");
scanf("%d",&number);
// True if remainder is 0
if( number%2 == 0 )
printf("%d is an even integer.",number);
else
printf("%d is an odd integer.",number);
return 0;
}
Output
Enter an integer: 7
7 is an odd integer.
Syntax : if(condition-1)
{ {
if (condition-2)
{
statement-1;
}
else
{
statement-2;
}
}
else
{
statement-3;
C PROGRAMMING Page 62
}
statement-x;
If the condition-1 is false, the statement-3 and statement-x will be executed. Otherwise it
continues to perform the second test. If the condition-2 is true, the true statement-1 will be
executed otherwise the statement-2 will be executed and then the control is transferred to the
statement-x
Flowchart
Example
#include<stdio.h>
int var1, var2;
printf("Input the value of var1:");
scanf("%d", &var1);
printf("Input the value of var2:");
scanf("%d",&var2);
if (var1 !=var2)
{
printf("var1 is not equal to var2");
//Below – if-else is nested inside another if block
if (var1 >var2)
{
printf("var1 is greater than var2");
}
else
{
printf("var2 is greater than var1");
}
}
else
C PROGRAMMING Page 63
{
printf("var1 is equal to var2");
}
…
Else if ladder.
The if else-if statement is used to execute one code from multiple conditions.
Syntax : if( condition-1)
{
statement-1;
}
else if(condition-2)
{
statement-2;
}
else if(condition-3)
{
statement-3;
}
else if(condition-n)
{
statement-n;
}
else
{
default-statement;
}
statement-x;
Flowchart
C PROGRAMMING Page 64
Example
#include<stdio.h>
#include<conio.h>
void main(){
int number=0;
clrscr();
printf("enter a number:");
scanf("%d",&number);
if(number==10){
printf("number is equals to 10");
}
else if(number==50){
printf("number is equal to 50");
}
else if(number==100){
printf("number is equal to 100");
}
else{
printf("number is not equal to 10, 50 or 100");
}
getch();
}
C PROGRAMMING Page 65
Points to Remember
1. In if statement, a single statement can be included without enclosing it into curly braces { }
2. int a = 5;
3. if(a > 4)
4. printf("success");
No curly braces are required in the above case, but if we have more than one statement
5. == must be used for comparison in the expression of if condition, if you use = the expression will
8. printf("hello");
Switch statement : when there are several options and we have to choose only one option
from the available ones, we can use switch statement. Depending on the selected option, a
particular task can be performed. A task represents one or more statements.
Syntax:
switch(expression)
{
case value-1:
statement/block-1;
break;
case value-2:
statement/block t-2;
break;
case value-3:
statement/block -3;
break;
case value-4:
statement/block -4;
break;
default:
default- statement/block t;
break;
C PROGRAMMING Page 66
}
The expression following the keyword switch in any „C‟ expression that must yield an integer
value. It must be ab integer constants like 1,2,3 .
The keyword case is followed by an integer or a character constant, each constant in each
must be different from all the other.
First the integer expression following the keyword switch is evaluated. The value it gives
is searched against the constant values that follw the case statements. When a match is found, the
program executes the statements following the case. If no match is found with any of the case
statements, then the statements follwing the default are executed.
Example
#include<stdio.h>
main()
{
int a;
printf("Please enter a no between 1 and 5: ");
scanf("%d",&a);
switch(a)
{
case 1:
printf("You chose One");
break;
case 2:
C PROGRAMMING Page 67
printf("You chose Two");
break;
case 3:
printf("You chose Three");
break;
case 4:
printf("You chose Four");
break;
case 5: printf("You chose Five.");
break;
default :
printf("Invalid Choice. Enter a no between 1 and 5"); break;
}
}
Flowchart
C PROGRAMMING Page 68
Points to Remember
It isn't necessary to use break after each block, but if you do not use it, all the consecutive block
1. int i = 1;
2. switch(i)
3. {
4. case 1:
5. printf("A"); // No break
6. case 2:
7. printf("B"); // No break
8. case 3:
9. printf("C");
10. break;
11. }
Output : A B C
The output was supposed to be only A because only the first case matches, but as there is no
break statement after the block, the next blocks are executed, until the cursor encounters a
break.
default case can be placed anywhere in the switch case. Even if we don't include the default case
How it Works
C PROGRAMMING Page 69
A sequence of statements are executed until a specified condition is true. This sequence of
statements to be executed is kept inside the curly braces { } known as the Loop body. After
every execution of loop body, condition is verified, and if it is found to be true the loop body is
executed again. When the condition check returns false, the loop body is not executed.
The loops in C language are used to execute a block of code or a part of the program several
times. In other words, it iterates/repeat a code or group of code many times.
Or Looping means a group of statements are executed repeatedly, until some logical condition
is satisfied.
Suppose that you have to print table of 2, then you need to write 10 lines of code.By using the
loop statement, you can do it by 2 or 3 lines of code only.
C PROGRAMMING Page 70
C language provides three iterative/repetitive loops.
1 : while loop
2 : do-while loop
3 : for loop
variable initialization ;
while (condition)
statements ;
The while loop is an entry controlled loop statement, i.e means the condition is evaluated
first and it is true, then the body of the loop is executed. After executing the body of the loop,
the condition is once again evaluated and if it is true, the body is executed once again, the
process of repeated execution of the loop continues until the condition finally becomes false and
the control is transferred out of the loop.
#include<conio.h>
void main( )
C PROGRAMMING Page 71
int x;
x=1;
while(x<=10)
printf("%d\t", x);
x++;
getch();
Output
1 2 3 4 5 6 7 8 9 10
#include<stdio.h>
#include<conio.h>
main()
clrscr();
scanf("%d", &n);
C PROGRAMMING Page 72
while(n!=0)
rem=n%10;
reverse=reverse*10+rem;
n/=10;
getch();
Flowchart
C PROGRAMMING Page 73
do-while loop
Syntax : variable initialization ;
do{
statements ;
}while (condition);
The do-while loop is an exit controlled loop statement The body of the loop are executed first
and then the condition is evaluated. If it is true, then the body of the loop is executed once again.
The process of execution of body of the loop is continued until the condition finally becomes
false and the control is transferred to the statement immediately after the loop. The statements
are always executed at least once.
Flowchart
C PROGRAMMING Page 74
Example : Program to print first ten multiple of 5
#include<stdio.h>
#include<conio.h>
void main()
int a,i;
a=5;
i=1;
do
printf("%d\t",a*i);
i++;
getch();
C PROGRAMMING Page 75
Output
5 10 15 20 25 30 35 40 45 50
Example
main()
int i=0
do
printf("while vs do-while\n");
}while(i= =1);
printf("Out of loop");
Output:
while vs do-while
Out of loop
For Loop:
This is an entry controlled looping statement.
One of the most important features of this loop is that the three actions can be taken at a
time like variable initialization, condition checking and increment/decrement.
The for loop can be more concise and flexible than that of while and do-while loops.
Statements;
C PROGRAMMING Page 76
Example:
#include<stdio.h>
#include<conio.h>
void main( )
int x;
printf("%d\t",x);
getch();
Output
1 2 3 4 5 6 7 8 9 10
1) Here instead of num++, I‟m using num=num+1 which is nothing but same as num++.
2) Initialization part can be skipped from loop as shown below, the counter variable is declared
before the loop itself.
int num=10;
for (;num<20;num++)
Must Note: Although we can skip init part but semicolon (;) before condition is must, without
which you will get compilation error.
C PROGRAMMING Page 77
3) Like initialization, you can also skip the increment part as we did below. In this case
semicolon (;) is must, after condition logic. The increment part is being done in for loop body
itself.
//Code
num++;
4) Below case is also possible, increment in body and init during declaration of counter variable.
int num=10;
for (;num<20;)
//Statements
num++;
5) Counter can be decremented also, In the below example the variable gets decremented each
time the loop runs until the condition num>10 becomes false.
#include <stdio.h>
int main()
scanf("%d", &num);
C PROGRAMMING Page 78
for(count = 1; count <= num; ++count)
sum += count;
return 0;
Output
Sum = 55
#include<stdio.h>
#include<conio.h>
void main(){
int i,fact=1,number;
clrscr();
scanf("%d",&number);
for(i=1;i<=number;i++){
fact=fact*i;
getch();
C PROGRAMMING Page 79
Output:
Enter a number: 5
C PROGRAMMING Page 80
Infinitive for loop in C
If you don't initialize any variable, check condition and increment or decrement variable in for
loop, it is known as infinitive for loop. In other words, if you place 2 semicolons in for loop, it is
known as infinitive for loop.
for(; ;){
C PROGRAMMING Page 81
printf("infinitive for loop example by javatpoint");
In case if the
Where to
test condition In case if the test
Use for Loop, while Loop
fails at the condition fails at the
and do while Loop
beginning, and beginning, and you
you may not may want to execute
want to execute the body of the loop
the body of the atleast once even in
loop even once the failed condition,
if it fails, then then the do while
the while loop loop should be
should be preferred.
preferred.
C PROGRAMMING Page 82
the update-expression expression
is executed which should be
updates the value of updated inside
counter variable. the body of the
while. However,
the counter
variable is
initialized
outside the body
of the loop.
update-expression
for (
initialization-
exp.(s);
while(test- do {
test-expression(s); expression)
body-of-the-
update- { loop;
expression(s)
body-of-the- update-
Syntax of Loops
) loop; expression(s);
{ update- }
expression(s);
body-of-the-loop while (test-
; } expression);
C PROGRAMMING Page 83
do while loop is an
exit controlled loop,
Which one is Entry
Both loops i.e. for loop and while loop are means means that
Controlled Loop
entry controlled loop, means condition is condition is placed
and
checked first and if the condition is true after the body of the
Which one is Exit
then the body of the loop will executes. loop and is evaluated
Controlled Loop ?
before exiting from
the loop.
int i = 1; int i = 1;
: :
:
: :
Conversion of one Loop :
to another Loop do
while (i<=10)
or for (int i=1; i<=10;
Example : Print numbers i++) { {
from 1 to 10 using all the
{ Printf(“%d”,i);
three loops.
Printf(“%d”,i); ++i;
Printf(“%d”,i); }
++i }
} while (i<=10)
Syntax:
C PROGRAMMING Page 84
{
statement ;
Example:
main()
#include<stdio.h>
#include<conio.h>
void main( )
int i,j;
for(i=1;i<5;i++)
printf("\n");
C PROGRAMMING Page 85
for(j=i;j>0;j--)
printf("%d",j);
getch();
Output
21
321
4321
54321
Jump Statements
Jumping statements are used to transfer the program‟s control from one location to another, these
are set of keywords which are responsible to transfer program‟s control within the same block or
from one function to another.
return statement
break statement
continue statement
goto statement : goto statement doesnot require any condition. This statement passes control
anywhere in the program i.e, control is transferred to another part of the program without testing
any condition.
C PROGRAMMING Page 86
Syntax : goto label;
.....
.....
label:
statements;
Or
The goto statement requires a label to identify the place to move the execution. A label is a valid
variable/identifier name and must be ended with colon ( : )
Flowchart
C PROGRAMMING Page 87
Example
int main()
int age;
Vote:
NoVote:
scanf("%d", &age);
if(age>=18)
goto Vote;
else
goto NoVote;
return 0;
C PROGRAMMING Page 88
}
Output
Break Statement
Break is a keyword. The break statement terminates the loop (for, while and do...while loop)
immediately when it is encountered. The break statement is used/ associated with decision
making statement such as if ,if-else.
break;
Flowchart
C PROGRAMMING Page 89
How break statement works?
C PROGRAMMING Page 90
Example
#include <stdio.h>
#include <conio.h>
void main(){
clrscr();
for(i=1;i<=10;i++){
C PROGRAMMING Page 91
printf("%d \n",i);
break;
getch();
Output
12345
Continue Statement
Continue is keyword exactly opposite to break. The continue statement is used for continuing
next iteration of loop statements. When it occurs in the loop it does not terminate, but it skips
some statements inside the loop / the statements after this statement. . The continue statement is
used/ associated with decision making statement such as if ,if-else.
continue;
C PROGRAMMING Page 92
How continue statement works?
Example
C PROGRAMMING Page 93
1. #include <stdio.h>
2. #include <conio.h>
3. void main(){
4. int i=1;//initializing a local variable
5. clrscr();
6. //starting a loop from 1 to 10
7. for(i=1;i<=10;i++){
8. if(i==5){//if value of i is equal to 5, it will continue the loop
9. continue;
10. }
11. printf("%d \n",i);
12. }//end of for loop
13. getch();
14. }
Output
1234678910
Break Continue
1 : break statement takes the control to the 1 :continue statement takes the control to
ouside of the loop the beginning of the loop..
ARRAYS
Using Arrays in C
C PROGRAMMING Page 94
C supports a derived data type known as array that can be used to handle large amounts of data
(multiple values) at a time.
Definition:
Or
An array is a collection of data that holds fixed number of values of same type.
Or
Or
An array is a data structured that can store a fixed size sequential collection of elements of same
data type.
Suppose you have to store marks of 50 students, one way to do this is allotting 50
variables. So it will be typical and hard to manage. For example we can not access the
value of these variables with only 1 or 2 lines of code.
Another way to do this is array. By using array, we can access the elements easily. Only
few lines of code is required to access the elements of array.
Advantage of C Array
2) Easy to traverse data: By using the for loop, we can retrieve the elements of an array easily.
C PROGRAMMING Page 95
3) Easy to sort data: To sort the elements of array, we need a few lines of code only.
4) Random Access: We can access any element randomly using the array.
Disadvantage of Array
Fixed Size: Whatever size, we define at the time of declaration of array, we can't exceed the
limit. So, it doesn't grow the size dynamically like LinkedList
Declaration of an Array
data-type variable-name[size/length of array];
For example:
int arr[10];
Here int is the data type, arr is the name of the array and 10 is the size of array. It means
array arr can only contain 10 elements of int type. Index of an array starts from 0 to size-1 i.e
first element of arr array will be stored at arr[0] address and last element will occupy arr[9].
Initialization of an Array
C PROGRAMMING Page 96
After an array is declared it must be initialized. Otherwise, it will contain garbage value(any
random value). An array can be initialized at either compile time or at runtime.
Example
int age[5]={22,25,30,32,35};
4 : String initialization.
1 : Initilizing all specified memory locations : If the number of values to be initialized is equal
to size of array. Arrays can be initialized at the time of declaration. Array elements can be
initialized with data items of type int,float,char, etc.
int a[5]={10,20,30,40,50};
C PROGRAMMING Page 97
During compilation, 5 contiguous memory locations are reserved by the compiler for the
variable a and all these locations are initialized.
10 20 30 40 50
If the size of integer is 2 bytes, 10 bytes will be allocated for the variable a.
C O M P U T E R
//error : number of initial values are more than the size of array.
C PROGRAMMING Page 98
//error : Number of initial values are more than the size of array.
int a[5]={10,15};
10 15 0 0 0
In general array_name[n-1] can be used to access nth element of an array. where n is any integer
number.
Example
float mark[5];
Suppose you declared an array mark as above. The first element is mark[0], second element
is mark[1] and so on.
C PROGRAMMING Page 99
Few key notes:
As you can see, in above example that I have used „for loop‟ and „scanf statement‟ to enter data
into array. You can use any loop for data input.
Code:
scanf("%d", &num[x]);
For example you want to read and display array elements, you can do it just by using any
loop. Suppose array is mydata[20].
printf("%d\n", mydata[x]);
#include<stdio.h>
#include<conio.h>
void main()
int i;
printf("%d\t",arr[i]);
getch();
Output
2 3 4
Exmaple
1. include <stdio.h>
2. #include <conio.h>
3. void main(){
4. int i=0;
5. int marks[5]={20,30,40,50,60};//declaration and initialization of array
6. clrscr();
7.
8. //traversal of array
9. for(i=0;i<5;i++){
10. printf("%d \n",marks[i]);
11. }
12.
13. getch();
14. }
An array can also be initialized at runtime using scanf() function. This approach is usually
used for initializing large array, or to initialize array with user specified values.
Example
#include<stdio.h>
#include<conio.h>
void main()
int arr[4];
int i, j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
printf("%d\n",arr[j]);
getch();
Two‐Dimensional Arrays
The two dimensional array in C language is represented in the form of rows and columns,
also known as matrix. It is also known as array of arrays or list of arrays.
The two dimensional, three dimensional or other dimensional arrays are also known
as multidimensional arrays.
data_type array_name[size1][size2];
Example
int twodimen[4][3];
Example :
int a[3][4];
Initialization of 2D Array
int arr[4][3]={{1,2,3},{2,3,4},{3,4,5},{4,5,6}};
An element in a two-dimensional array is accessed by using the subscripts, i.e., row index
and column index of the array.
Example
1. #include <stdio.h>
2. #include <conio.h>
3. void main(){
4. int i=0,j=0;
5. int arr[4][3]={{1,2,3},{2,3,4},{3,4,5},{4,5,6}};
6. clrscr();
7. //traversing 2D array
8. for(i=0;i<4;i++){
9. for(j=0;j<3;j++){
10. printf("arr[%d] [%d] = %d \n",i,j,arr[i][j]);
11. }//end of j
12. }//end of i
13. getch();
14. }
Output
arr[0][0] = 1
arr[0][1] = 2
arr[0][2] = 3
arr[1][0] = 2
arr[1][1] = 3
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
#include<stdio.h>
#include<conio.h>
int a[25][25],b[25][25],c[25][25],i,j,m,n;
clrscr();
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("\t%d",&a[i][j]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("\t%d",&b[i][j]);
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
printf("\t%d",a[i][j]);
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
c[i][j]=a[i][j]+b[i][j];
printf("\t%d",c[i][j]);
getch();
#include<stdio.h>
#include<conio.h>
void main()
int a[25][25],b[25][25],c[25][25],i,j,m,n,k,r,s;
clrscr();
scanf("%d%d",&m,&n);
scanf("%d%d",&r,&s);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("\t%d",&a[i][j]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("\t%d",&b[i][j]);
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
printf("\t%d",a[i][j]);
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
printf("\t%d",b[i][j]);
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
c[i][j]=0;
for(k=0;k<m;k++)
for(i=0;i<m;i++)
printf("\n");
for(j=0;j<n;j++)
printf("\t%d",c[i][j]);
getch();
Multidimensional Arrays
How to initialize a multidimensional array?
You can initialize a three dimensional array in a similar way like a two dimensional array. Here's
an example
int test[2][3][4] = {
};
Example
int main()
int i, j, k, test[2][3][2];
scanf("%d", &test[i][j][k]);
printf("\nDisplaying values:\n");
return 0;
Output
123456789101112
Displaying Values:
test[0][0][0] = 1
test[0][0][1] = 2
test[0][1][0] = 3
test[0][1][1] = 4
test[0][2][0] = 5
test[0][2][1] = 6
test[1][0][0] = 7
test[1][0][1] = 8
test[1][1][0] = 9
test[1][1][1] = 10
test[1][2][0] = 11
test[1][2][1] = 12
STRINGS:
String Concepts
Or
C Strings
Declaration of String: C does not support string as a data type. However, it allows us to
represent strings as character arrays. In C, a string variable is any valid C variable name and it is
always declared as an array of characters.
Note: In declaration of string size must be required to mention otherwise it gives an error.
Using this declaration the compiler allocates 9 memory locations for the variable a
ranging from 0 to 8.
0 1 2 3 4 5 6 7 8
Here, the string variable a can hold maximum of 9 characters including NULL(\0)
character.
Note: In Initialization of the string if the specific number of character is not initialized it then
rest of all character will be initialized with NULL.
str[0]; ---> 5
str[1]; ---> +
str[2]; ---> A
Note: In initialization of the string we can not initialized more than size of string elements.
Ex:
Char b[9]={„C‟,‟O‟,‟M‟,‟P‟,‟U‟,‟T‟,‟E‟,‟R‟};
The compiler allocates 9 memory locations ranging from 0 to 8 and these locations are
initialized with the characters in the order specified. The remaining locations are automatically
initialized to null characters.
C O M P U T E R \0
0 1 2 3 4 5 6 7 8
2 : Partial Array Initilization : If the characters to be initialized is less than the size of the
array, then the characters are stored sequentially from left to right.The remaining locations will
be initialized to NULL characters automatically.
C PROGRAMMING Page 113
Ex : Consider the partial initilization
int a[10]={„R‟,‟A‟,‟M‟,‟A‟ };
The compiler allocates 10 bytes for the variable a ranging from 0 to 9 and
initializes first four locations with the ASCII characters of „R‟, „A‟, „M‟, „A‟.The remaining
locations are automatically filled with NULL characters (i.e,\0).
R A M A \0 \0 \0 \0 \0 \0
0 1 2 3 4 5 6 7 8 9
3 : Initilization without size : consider the declaration along with the initialization
char b[]={„C‟,‟O‟,‟M‟,‟P‟,‟U‟,‟T‟,‟E‟,‟R‟};
In this declaration, The compiler will set the array size to the total number of
initial values i.e 8. The character will be stored in these memory locations in the order specified.
C O M P U T E R
4) Array Initilization with a String : consider the declaration with string initialization.
char b[ ] = “COMPUTER”;
Here, the string length is 8 bytes. But , string size is 9 bytes. So the compiler reserves
8+1 memory locations and these locations are initialized with the characters in the order
specified. The string is terminated by \0 by the compiler.
C O M P U T E R \0
0 1 2 3 4 5 6 7 8
The string “COMPUTER” contin 8 charactes, because it is a string. It always ends with
null character. So, the array is 9 bytes (i.e string length+1 byte for null character).
scanf(“%s”,name);
printf(“%s”,name);
Example:
1. #include <stdio.h>
2. void main ()
3. {
4. char ch[13]={'c', 'p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', i', „n‟, „g‟, „\0‟};
5. char ch2[13]="cprogramming";
6.
9. }
Output
Example:
#include <stdio.h>
int main()
char name[20];
scanf("%s", name);
return 0;
Output
The strings can be read from the keyboard and can be displayed onto the monitor
using various functions.
The various input and output functions that are associated with can be classified
as
I / O Functions
scanf() print()
getc() putc()
fscanf() fprintf()
getchar() putchar()
gets() puts()
getch()
getche()
1 : getchar() function : A single character can be given to the computer using „C‟ input library
function getchar().
The getchar() function is written in standared I/O library. It reads a single character from a
standared input device. This function do not require any arguments, through a pair of
parantheses, must follow the statements getchar().
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
void main()
char ch;
clrscr();
ch=getchar();
if(isalpha(ch)>0)
printf("it is a alphabet:%c\n",ch);
else if(isdigit(ch)>0)
printf("it is a digit:%c\n",ch);
else
printf("it is a alphanumeric:%c\n",ch);
getch();
it is a alphabet:a
2 : putchar() function :The putchar() function is used to display one character at a time on the
standared output device. This function does the reverse operation of the single character input
function.
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
void main()
char ch;
ch=getchar();
if(islower(ch))
putchar(toupper(ch));
else
putchar(tolower(ch));
getch();
Ex :#include<stdio.h>
#include<conio.h>
void main()
char str[40];
clrscr();
gets(str);
getch();
4 : puts() :The puts() function is used to display the string to the standared output device
(Monitor).
#include<stdio.h>
#include<conio.h>
void main()
char str[40];
gets(str);
puts(str);
getch();
subbareddy
subbareddy
getch() function :The getch function reads a single character directly from the keyboard,
without echoing to the screen.
Ex : #include<stdio.h>
void main()
char c;
c=getch();
getche() function :The getche() function reads a single character from the keyboard and echoes
it to the current text window.
Ex : #include<stdio.h>
void main()
c=getche();
getc() function : This function is used to accept a single character from the standared input to a
character variable.
putc() function :This function is used to display a single character in a character variable to
standared output device.
Array of Strings
1 : strlen(string) – String Length : This function is used to count and return the number of
characters present in a string.
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char name[]="JBREC";
int len1,len2;
clrscr();
len1=strlen(name);
len2=strlen("JBRECECE");
getch();
OUTPUT :
#include<stdio.h>
#include<conio.h>
void main()
int index;
scanf("%s",str);
for(index=0;str[index]!=0;index++);
getch();
OUTPUT :
2 : strcpy(string1,string2) – String Copy : This function is used to copy the contents of one string
to another string.
Syntax : strcpy(string1,string2);
Where
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str2[10];
strcpy(str2,str1);
strcpy(str2,str1+1);
OUTPUT :
#include<stdio.h>
#include<conio.h>
void main()
char str1[10],str2[20];
int index;
scanf(“%s”,str1);
for(index=0;str1[index]!='\0';index++)
str2[index]='\0';
printf("String1 is :%s\n",str1);
printf("String2 is :%s\n",str2);
getch();
OUTPUT :
String1 is : cprogramming
String2 is : cprogramming
3 : strlwr(string) – String LowerCase : This function is used to converts upper case letters of the
string in to lower case letters.
Syntax : strlwr(string);
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str[]="JBREC";
clrscr();
strlwr(str);
getch();
#include<stdio.h>
#include<conio.h>
void main()
char str[10];
int index;
scanf("%s",str);
for(index=0;str[index]!='\0';index++)
str[index]=str[index]+32;
getch();
4 : strupr(string) – String UpperCase : This function is used to converts lower case letters of the
string in to upper case letters.
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str[]="jbrec";
strupr(str);
printf("UpperCase is :%s\n",str);
getch();
#include<stdio.h>
#include<conio.h>
void main()
char str[10];
int index;
scanf("%s",str);
for(index=0;str[index]!='\0';index++)
str[index]=str[index]-32;
getch();
Syntax : strcmp(string1,string2);
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str1[]="reddy";
char str2[]="reddy";
int i,j,k;
i=strcmp(str1,str2);
j=strcmp(str1,"subba");
k=strcmp(str2,"Subba");
printf("%5d%5d%5d\n",i,j,k);
OUTPUT : 0 -1 32
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str1[10],str2[20];
int index,l1,l2,flag=1;
scanf("%s",str1);
scanf("%s",str2);
l1=strlen(str1);
l2=strlen(str2);
printf("Length of string1:%d\n",l1);
printf("Length of string2:%d\n",l2);
if(l1==l2)
for(index=0;str1[index]!='\0';index++)
if(str1[index]!=str2[index])
flag=0;
else
flag=0;
if(flag==1)
else
Length of string1 :5
Length of string2 :5
Syntax : strcat(sting1,string2);
Where
when the above function is executed, string2 is combined with string1 and it
removes the null character (\0) of string1 and places string2 from there.
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
char str1[10]="jbrec";
char str2[]="ece";
strcat(str1,str2);
printf("%s\n",str1);
printf("%s\n",str2);
getch();
OUTPUT : jbrecece
ece
7 : strrev(string) - String Reverse :This function is used to reverse a string. This function takes
only one argument and return one argument.
Syntax : strrev(string);
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
scanf("%s",str);
getch();
UNIT – III
FUNCTIONS:
User‐Defined Functions
To perform any task, we can create function. A function can be called many times. It
provides modularity and code reusability.
1) Code Reusability
By creating functions in C, you can call it many times. So we don't need to write the same code
again and again.
2) Code optimization
Example: Suppose, you have to check 3 numbers (781, 883 and 531) whether it is prime number or
not. Without using function, you need to write the prime number logic 3 times. So, there is repetition of
code.
But if you use functions, you need to write the logic only once and you can reuse it several times.
Types of Functions
1. Library Functions: are the functions which are declared in the C header files such as
scanf(), printf(), gets(), puts(), ceil(), floor() etc. You just need to include appropriate
header files to use these functions. These are already declared and defined in C
libraries. oints to be Remembered
System defined functions are implemented in .dll files. (DLL stands for Dynamic Link
Library).
To use system defined functions the respective header file must be included.
2. User-defined functions: are the functions which are created by the C programmer, so
that he/she can use it many times. It reduces complexity of a big program and optimizes
the code. Depending upon the complexity and requirement of the program, you can create
as many user-defined functions as you want.
In order to write an efficient user defined function, the programmer must familiar with the
following three elements.
2 : Function Call.
3 : Function Definition
A function declaration is the process of tells the compiler about a function name.
Syntax
return_type function_name(parameter/argument);
return_type function-name();
int add();
When we call any function control goes to function body and execute entire code.
Syntax : function-name();
function-name(parameter/argument);
Defining a function.
Defining of function is nothing but give body of function that means write logic inside function
body.
Syntax
declaration of variables;
{ {
int z; ( or ) return ( x + y );
z = x + y; }
When the compiler encounters functionName(); inside the main function, control of the program
jumps to
void functionName()
And, the compiler starts executing the codes inside the user-defined function.
The control of the program jumps to statement next to functionName(); once all the codes inside
the function definition are executed.
Example:
#include<stdio.h>
clrsct();
int a=10,b=20, c;
c=a+b;
void main()
Output
Sum:30
Example:
#include <stdio.h>
int main()
int n1,n2,sum;
scanf("%d %d",&n1,&n2);
return 0;
int result;
result = a+b;
Return Statement
or
For example,
return a;
return (a+b);
The return statement terminates the execution of a function and returns a value to the calling
function. The program control is transferred to the calling function after return statement.
In the above example, the value of variable result is returned to the variable sum in
the main() function.
PARAMETERS :
parameters provides the data communication between the calling function and called function.
2 : Formal parameters.
1 : Actual Parameters : These are the parameters transferred from the calling function (main
program) to the called function (function).
2 : Formal Parameters :These are the parameters transferred into the calling function (main
program) from the called function(function).
Ex : main()
..... .
Where
1 : Actual parameters are used in calling 1 : Formal parameters are used in the
function when a function is invoked. function header of a called function.
Here a,b are actual parameters. Here m,n are called formal parameters.
3 : Actual parameters sends values to the 3 : Formal parametes receive values from
formal parameters. the actual parametes.
PASSING PARAMETERS TO FUNCTIONS :There are two ways to pass value or data to
function in C language: call by value and call by reference. Original value is not modified in
The called function receives the information from the calling function through the parameters.
The variables used while invoking the calling function are called actual parameters and the
variables used in the function header of the called function are called formal parameters.
In call by value, value being passed to the function is locally stored by the function parameter in
stack memory location. If you change the value of function parameter, it is changed for the
current function only. It will not change the value of variable inside the caller method such as
main().
Or
Ex :
#include<stdio.h>
#include<conio.h>
void main()
int i,j;
scanf("%d%d",&i,&j);
printf("Before swapping:%d%d\n",i,j);
swap(i,j);
printf("After swapping:%d%d\n",i,j);
getch();
int temp;
temp=a;
a=b;
b=temp;
Output
Before swapping: 10 20
After swapping: 10 20
2 : Pass by reference (OR) Call by Reference : In pass by reference, a function is called with
addresses of actual parameters. In the function header, the formal parameters receive the
addresses of actual parameters. Now the formal parameters do not contain values, instead they
contain addresses. Any variable if it contains an address, it is called a pointer variable. Using
pointer variables, the values of the actual parameters can be changed. This way of passing
parameters is called call by reference or pass by reference.
Ex : #include<stdio.h>
#include<conio.h>
void main()
int i,j;
scanf("%d%d",&i,&j);
printf("Before swapping:%d%d\n",i,j);
swap(&i ,&j);
printf("After swapping:%d%d\n",i,j);
int temp;
temp=*a;
*a=*b;
*b=temp;
Output
Before swapping:10 20
After swapping: 20 10
1 : When a function is called the values of 1 : When a function is called the address of
variables are passed variables are passed.
2 : Change of formal parameters in the 2 : The actual parameters are changed since
function will not affect the actual the formal parameters indirectly manipulate
parameters in the calling function. the actual parametes.
3 : Execution is slower since all the values 3 : Execution is faster since only address
have to be copied into formal parameters. are copied.
1 : In this category, there is no data transfer between the calling function and called function.
2 : But there is flow of control from calling function to the called function.
3 : When no parameters are there , the function cannot receive any value from the calling
function.
4: When the function does not return a value, the calling function cannot receive any value from
the called function.
Ex #include<stdio.h>
void sum();
void main()
sum();
getch();
void sum()
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("sum=%d",c);
2 : But there is data transfer from called function to the calling function.
3 : When no parameters are there , the function cannot receive any values from the calling
function.
4: When the function returns a value, the calling function receives one value from the called
function.
Ex : #include<stdio.h>
#include<conio.h>
int sum();
int c;
clrscr();
c=sum();
printf("sum=%d",c);
getch();
int sum()
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
return c;
1 : In this category, there is data transfer from the calling function to the called function using
parameters.
2 : But there is no data transfer from called function to the calling function.
3 : When parameters are there , the function can receive any values from the calling function.
4: When the function does not return a value, the calling function cannot receive any value from
the called function.
Ex : #include<stdio.h>
#include<conio.h>
void main()
int m,n;
clrscr();
scanf("%d%d",&m,&n);
sum(m,n);
getch();
int c;
c=a+b;
printf("sum=%d",c);
1 : In this category, there is data transfer from the calling function to the called function using
parameters.
2 : But there is no data transfer from called function to the calling function.
3 : When parameters are there , the function can receive any values from the calling function.
4: When the function returns a value, the calling function receive a value from the called
function.
Ex : #include<stdio.h>
#include<conio.h>
int m,n,c;
clrscr();
scanf("%d%d",&m,&n);
c=sum(m,n);
printf("sum=%d",c);
getch();
int c;
c=a+b;
return c;
Inter‐Function Communication
When a function gets executed in the program, the execution control is transferred from calling
function to called function and executes function definition, and finally comes back to the calling
function. In this process, both calling and called functions have to communicate each other to
exchange information. The process of exchanging information between calling and called
functions is called as inter function communication.
Downward Communication
Upward Communication
Downward Communication
In this type of inter function communication, the data is transferred from calling function to
called function but not from called function to calling function. The functions with parameters
and without return value are considered under downward communication. In the case of
downward communication, the execution control jumps from calling function to called function
along with parameters and executes the function definition,and finally comes back to the calling
function without any return value. For example consider the following program...
Example:
#include <stdio.h>
#include<conio.h>
void main(){
clrscr() ;
num1 = 10 ;
num2 = 20 ;
getch() ;
Output
SUM=30
Upward Communication
In this type of inter function communication, the data is transferred from called function to
calling function but not from calling function to called function. The functions without
parameters and with return value are considered under upward communication. In the case of
upward communication, the execution control jumps from calling function to called function
without parameters and executes the function definition, and finally comes back to the calling
function along with a return value. For example consider the following program...
Exmaple:
#include <stdio.h>
#include<conio.h>
void main(){
int result ;
clrscr() ;
getch() ;
num1 = 10;
num2 = 20;
return (num1+num2) ;
Output
SUM=30
Bi - Directional Communication
In this type of inter function communication, the data is transferred from calling function to
called function and also from called function to calling function. The functions with parameters
and with return value are considered under bi-directional communication. In the case of bi-
drectional communication, the execution control jumps from calling function to called function
along with parameters and executes the function definition, and finally comes back to the calling
function along with a return value. For example consider the following program...
Example:
#include <stdio.h>
#include<conio.h>
void main(){
clrscr() ;
num1 = 10 ;
num2 = 20 ;
return (a+b) ;
Output
SUM=30
Standard Functions
The standard functions are built-in functions. In C programming language, the standard functions
are declared in header files and defined in .dll files. In simple words, the standard functions can
be defined as "the ready made functions defined by the system to make coding more easy". The
standard functions are also called as library functions or pre-defined functions.
In C when we use standard functions, we must include the respective header file
using #include statement. For example, the function printf() is defined in header
file stdio.h (Standard Input Output header file). When we use printf() in our program, we must
include stdio.h header file using #include<stdio.h> statement.
C Programming Language provides the following header files with standard functions.
Header
Purpose Example Functions
File
setjump(),
setjmp.h Provides functions that are used in function calls
longjump()
1 : stdio.h
2 : stdlib.h
4 : math.h
5 : ctype.h
6 : time.h
scanf() int Enter data items from the standard input device.
getchar() int Enter a single character from the standard input device.
fread(s,il,i2,f) int Enter i2 data items, each of size i1 bytes, from file f.
exit(u) void Close all files and buffers, and terminate the program.
floor(d) double Return a value rounded down to the next lower integer.
time(p) long int Return the number of seconds elapsed beyond a designated
base time.
Storage: Any variable declared in a program can be stored either in memory or registers.
Registers are small amount of storage in CPU. The data stored in registers has fast access
compared to data stored in memory.
Storage class of a variable gives information about the location of the variable
in which it is stored, initial value of the variable, if storage class is not specified; scope of the
variable; life of the variable.
1: Automatic Storage class : To define a variable as automatic storage class, the keyword „auto‟
is used. By defining a variable as automatic storage class, it is stored in the memory. The default
value of the variable will be garbage value. Scope of the variable is within the block where it is
defined and the life of the variable is until the control remains within the block.
Example:
void main()
int detail;
or
Note: A variable declared inside a function without any storage class specification, is by default
an automatic variable. Automatic variables can also be called local variables because they
are local to a function.
Ex : void function1();
void main() 10
{ 0
function2();
printf(“%d”,x);
void function1()
int x=10;
printf(“%d”,x);
void function2()
int x=0;
function1();
printf(“%d”,x);
2: Register Storage class : To define a variable as register storage class, the keyword
„register‟ is used. If CPU cannot store the variables in CPU registers, then the variables are
Register variable has faster access than normal variable. Frequently used variables are kept in
register. Only few variables can be placed inside register.
void main() 20
{ 20
demo(); 20
demo();
demo();
void demo()
printf(“%d\n”,i);
i++;
3 : Static Storage class : When a variable is declared as static, it is stored in the memory. The
default value of the variable will be zero. Scope of the variable is within the block where it is
defined and the life of the variable persists between different function calls. To define a variable
as static storage class, the keyword „static‟ is used. A static variable can be initialized only
once, it cannot be reinitialized.
void main() 20
{ 21
demo(); 22
demo();
demo();
void demo()
printf(“%d”,i);
i++;
4 : External Storage class : When a variable is declared as extern, it is stored in the memory.
The default value is initialized to zero. The scope of the variable is global and the life of the
variable is until the program execution comes to an end. To define a variable as external storage
class, the keyword „extern‟ is used. An extern variable is also called as a global variable.
Global variables remain available throughout the entire program. One important thing to
remember about global variable is that their values can be changed by any function in the
program.
extern int i;
Ex:
void main()
number=10;
fun1()
number=20;
fun2()
number=30;
Ex : void fun1();
void fun2();
int e=20;
void main()
fun1();
fun2();
void fun1()
extern int e;
void fun2()
extern keyword
The extern keyword is used before a variable to inform the compiler that this variable is declared
somewhere else. The extern declaration does not allocate storage for variables.
main()
printf("%d",a);
main()
x = 10;
printf("%d",x);
extern RAM Zero Global Till the end of main program, May be
declared anywhere in the program
static RAM Zero Local Till the end of main program, Retains
value between multiple functions call
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.
Features :
Advantages :
It is easy to use.
Disadvantages :
It is slower than that of looping statements because each time function is called.
Note: while using recursion, programmers need to be careful to define an exit condition from the
function, otherwise it will go into an infinite loop. Recursive functions are very useful to solve
many mathematical problems, such as calculating the factorial of a number, generating Fibonacci
series, etc.
Example of recursion.
recursionfunction(){
#include<stdio.h>
#include<conio.h>
if ( n < 0)
if (n == 0)
void main(){
clrscr();
fact=factorial(5);
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.
The C Preprocessor is not a part of the compiler, but is a separate step in the compilation
process. In simple terms, a C Preprocessor is just a text substitution tool and it instructs the
o #include
o #define
o #undef
o #ifdef
o #ifndef
o #if
o #else
o #elif
o #endif
o #error
o #pragma
C Macros
A macro is a segment of code which is replaced by the value of macro. Macro is defined by
#define directive. There are two types of macros:
1. Object-like Macros
2. Function-like Macros
Object-like Macros
The object-like macro is an identifier that is replaced by value. It is widely used to represent
numeric constants. For example:
#define PI 3.14
Here, PI is the macro name which will be replaced by the value 3.14.
Function-like Macros
Predefined Macros
There are some predefined macros which are readily for use in C programming.
#include <stdio.h>
main() {
Output
File :test.c
Time :03:36:24
ANSI :1
C #include
The #include preprocessor directive is used to paste code of given file into current file. It is used
include system-defined and user-defined header files. If included file is not found, compiler
renders error.
By the use of #include directive, we provide information to the preprocessor where to look for
the header files. There are two variants to use #include directive.
1. #include <filename>
2. #include "filename"
The #include <filename> tells the compiler to look for the directory where system header files
are held. In UNIX, it is \usr\include directory.
The #include "filename" tells the compiler to look in the current directory from where program
is running.
Let's see a simple example of #include directive. In this program, we are including stdio.h file
because printf() function is defined in this file.
1. #include <stdio.h>
2. main() {
3. printf("Hello C");
4. }
Output:
Hello C
#include notes:
Note 1: In #include directive, comments are not recognized. So in case of #include <a//b>, a//b is
treated as filename.
Note 2: In #include directive, backslash is considered as normal text not escape sequence. So in
case of #include <a\nb>, a\nb is treated as filename.
C #define
The #define preprocessor directive is used to define constant or micro substitution. It can use any
basic data type.
Syntax:
#include <stdio.h>
#define PI 3.14
main() {
printf("%f",PI);
Output:
3.140000
#include <stdio.h>
void main() {
Output:
C #undef
The #undef preprocessor directive is used to undefine the constant or macro defined by #define.
#undef token
#include <stdio.h>
#define PI 3.14
#undef PI
main() {
printf("%f",PI);
Output:
The #undef directive is used to define the preprocessor constant to a limited scope so that you
can declare constant again.
Let's see an example where we are defining and undefining number variable. But before being
undefined, it was used by square variable.
#include <stdio.h>
#define number 15
int square=number*number;
#undef number
main() {
printf("%d",square);
Output:
225
Syntax:
#ifdef MACRO
//code
#endif
#ifdef MACRO
//successful code
#else
//else code
#endif
C #ifdef example
#include <stdio.h>
#include <conio.h>
#define NOINPUT
void main() {
int a=0;
#ifdef NOINPUT
a=2;
#else
printf("Enter a:");
scanf("%d", &a);
#endif
getch();
Output:
Value of a: 2
#include <stdio.h>
#include <conio.h>
void main() {
int a=0;
#ifdef NOINPUT
a=2;
#else
printf("Enter a:");
scanf("%d", &a);
#endif
getch();
Output:
Enter a:5
Value of a: 5
The #ifndef preprocessor directive checks if macro is not defined by #define. If yes, it executes
the code otherwise #else code is executed, if present.
Syntax:
#ifndef MACRO
//code
#endif
#ifndef MACRO
//successful code
#else
//else code
#endif
C #ifndef example
#include <stdio.h>
#include <conio.h>
#define INPUT
void main() {
int a=0;
#ifndef INPUT
a=2;
#else
printf("Enter a:");
scanf("%d", &a);
getch();
Output:
Enter a:5
Value of a: 5
#include <stdio.h>
#include <conio.h>
void main() {
int a=0;
#ifndef INPUT
a=2;
#else
printf("Enter a:");
scanf("%d", &a);
#endif
getch();
Output:
Value of a: 2
The #if preprocessor directive evaluates the expression or condition. If condition is true, it
executes the code otherwise #elseif or #else or #endif code is executed.
Syntax:
#if expression
//code
#endif
#if expression
//if code
#else
//else code
#endif
#if expression
//if code
#elif expression
//elif code
#else
//else code
#endif
C #if example
#include <stdio.h>
#include <conio.h>
#define NUMBER 0
#if (NUMBER==0)
#endif
getch();
Output:
#include <stdio.h>
#include <conio.h>
#define NUMBER 1
void main() {
clrscr();
#if (NUMBER==0)
#endif
#if (NUMBER==1)
#endif
getch();
Output:
The #else preprocessor directive evaluates the expression or condition if condition of #if is false.
It can be used with #if, #elif, #ifdef and #ifndef directives.
Syntax:
#if expression
//if code
#else
//else code
#endif
#if expression
//if code
#elif expression
//elif code
#else
//else code
#endif
C #else example
#include <stdio.h>
#include <conio.h>
#define NUMBER 1
void main() {
#if NUMBER==0
#else
#endif
getch();
Output:
C #error
The #error preprocessor directive indicates error. The compiler gives fatal error if #error
directive is found and skips further compilation process.
C #error example
#include<stdio.h>
#ifndef __MATH_H
#else
void main(){
float a;
a=sqrt(7);
printf("%f",a);
#endif
Output:
#include<stdio.h>
#include<math.h>
#else
void main(){
float a;
a=sqrt(7);
printf("%f",a);
#endif
Output:
2.645751
C #pragma
The #pragma preprocessor directive is used to provide additional information to the compiler.
The #pragma directive is used by the compiler to offer machine or operating-system feature.
Syntax:
#pragma token
#pragma argsused
#pragma exit
#pragma hdrfile
#pragma hdrstop
#pragma inline
#pragma option
#pragma saveregs
#pragma warn
#include<stdio.h>
#include<conio.h>
void func() ;
void main(){
printf("\nI am in main");
getch();
void func(){
printf("\nI am in func");
getch();
Output:
I am in func
I am in main
I am in func
1. Source program is converted into executable code through different processes like
precompilation, compilation, assembling and linking.
Syntax: #define
This macro defines constant value and can be any
Macro of the basic data types.
Stack Heap
Compilers Interpreters
The following section lists down all the important preprocessor directives −
Directive Description
1 : macro substitution.
2 : file inclusion.
Ex : #define PI 3.142
#define MIN_MARKS 35
Ex :
#include <stdio.h>
void main()
OUTPUT:
value of letter : A
#include<stdio.h>
#define PI 3.142
void main()
int r;
float area;
scanf(“%d”,&r);
area=PI*r*r;
#define A (20*10)
#define B (200-100)
void main()
int div;
div=A/B;
void main()
int a=100,b=50;
IFCONDITION
PRINT;
Where identifier is the name of macro function with the list of macro formal parameters
var1,var2,var3,…varn like the formal parameters in a function definition.
void main()
int a,mul;
scanf(“%d”,&a);
mul=PROD(a);
#include add.c
void main()
void add()
int a,b,c;
scanf(%d%d”,&a,&b);
c=a+b;
These are used to select a particular segment of code for compilation depending on the
condition.
“#ifdef” directive checks whether particular macro is defined or not. If it is defined, “If”
clause statements are included in source file.
Otherwise, “else” clause statements are included in source file for compilation and
execution.
Ex:
#include <stdio.h>
int main()
#ifdef RAJU
"this C file\n");
#else
#endif
return 0;
OUTPUT:
#ifndef exactly acts as reverse as #ifdef directive. If particular macro is not defined, “If”
clause statements are included in source file.
Otherwise, else clause statements are included in source file for compilation and
execution.
#endif
return 0;
}
OUTPUT:
Otherwise, else clause statement is included in source file for compilation and execution.
Ex:
#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:
This line will be added in this C file since a = 100
Ex:
#include <stdio.h>
void main()
OUTPUT:
Pragma is used to call a function before and after main function in a C program.
Ex:
#include <stdio.h>
void function1( );
void function2( );
return 0;
void function1( )
void function2( )
OUTPUT:
Ex : #define TEST 1
void main()
#ifdef TEST
printf(“This is compiled”);
#else
#endif
char ch;
void main()
#if FLAG
ch=‟t‟;
printf(“This is compiled”);
#else
ch=‟f‟;
#endif
Definition:
Pointer is a variable that stores/hold address of another variable of same data type/ t is
also known as locator or indicator that points to an address of a value. A pointer is a
derived data type in C
Declaration of Pointer
data_type* pointer_variable_name;
int* p;
Note: void type pointer works with all data types, but isn't used often.
int a = 10 ;
or,
float a;
int *ptr;
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.
& is called reference operator. It gives you the address of a variable. There is another operator
that gets you the value from the address, it is called a dereference operator (*).
Once a pointer has been assigned the address of a variable. To access the value of variable,
pointer is dereferenced, using the indirection operator *.
int a,*p;
a = 10;
p = &a;
Normal variable stores the value whereas pointer variable stores the address of the
variable.
* symbol is used to get the value of the variable that the pointer is pointing to.
Two pointers can be subtracted to know how many elements are available between these
two pointers.
#include <stdio.h>
#include <conio.h>
void main(){
int number=50;
int *p;
clrscr();
getch();
Output
Value of p variable is 50
Example:
#include <stdio.h>
int main()
int *ptr, q;
q = 50;
ptr = &q;
printf("%d", *ptr);
return 0;
Output
50
Example:
#include <stdio.h>
int main()
int *p;
p= &var;
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.
Or
It is always a good practice to assign a NULL value to a pointer variable in case you do not have
an exact address to be assigned. This is done at the time of variable declaration. A pointer that is
assigned NULL is called a null pointer.int *p=NULL;
Note: The NULL pointer is a constant with a value of zero defined in several standard libraries/
in most the libraries, the value of pointer is 0 (zero)
Example:
Pointers to Pointers
Pointers can point to other pointers /pointer refers to the address of another pointer.
pointer can point to the address of another pointer which points to the address of a value.
int **p2;
Let's see an example where one pointer points to the address of another pointer.
Example:
#include <stdio.h>
#include <conio.h>
void main(){
int number=50;
clrscr();
p2=&p;
getch();
Output
Value of *p variable is 50
int arr[5]={ 1, 2, 3, 4, 5 };
Assuming that the base address of arr is 1000 and each integer requires two byte, the five
element will be stored as follows
int arr[5]={ 1, 2, 3, 4, 5 };
int *p;
p = arr;
Now we can access every element of array arr using p++ to move from one element to another.
NOTE : You cannot decrement a pointer once incremented. p-- won't work.
Pointer to Array
we can use a pointer to point to an Array, and then we can use that pointer to access the array.
Lets have an example,
int i;
printf("%d", *p);
p++;
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.
Since, the addresses of both are the same, the values of arr and &arr[0] are also the same.
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");
scanf("%d",(classes + i));
return 0;
Output
Sum = 21
o Increment(++)
o Decrement(--)
o Addition(+)
o Subtraction(-)
Increment pointer:
Address + 1 = Address
Address++ = Address
Pictorial Representation :
Note :
32 bit
64 bit
Example:
#include <stdio.h>
void main(){
int number=50;
p=p+1;
Output
Decrement(--)
Example:
#include <stdio.h>
void main(){
int number=50;
p=p-1;
Output
Addition(+)
Note:
32 bit
64 bit
Example:
#include <stdio.h>
void main(){
int number=50;
Output
Subtraction (-)
Like pointer addition, we can subtract a value from the pointer variable. The formula
of subtracting value from pointer variable.
Example:
#include <stdio.h>
void main(){
int number=50;
Output
If you want to pass a single-dimension array as an argument in a function, you would have to
declare a formal parameter in one of following three ways and all three declaration methods
produce similar results because each tells the compiler that an integer pointer is going to be
received. Similarly, you can pass multi-dimensional arrays as formal parameters.
}
Example1: pass an entire array to a function argument
#include <stdio.h>
/* function declaration */
double getAverage(int arr[], int size);
int main () {
/* an int array with 5 elements */
int balance[5] = {1000, 2, 3, 17, 50};
int i;
double avg;
double sum = 0;
return avg;
}
Output
Average value is: 214.400000
return 0;
}
Output:
abcdefghij
#include <stdio.h>
int main()
disp (&arr[i]);
return 0;
Output:
1234567890
An array of pointers would be an array that holds memory locations. An array of pointers is an
indexed set of variables in which the variables are pointers (a reference to a location in memory).
Syntax:
Example
int *ptr[MAX];
alpha[0] *a
alpha[1] *(a+1)
alpha[2] *(a+2)
alpha[3] *(a+3)
alpha[n] *(a+n)
Example1:
#include <stdio.h>
int main () {
int i, *ptr[MAX];
return 0;
Output
Value of var[0] = 10
Example2:
#include <stdio.h>
#include <conio.h>
main() {
clrscr();
int *array[3];
int x = 10, y = 20, z = 30;
int i;
array[0] = &x;
array[1] = &y;
array[2] = &z;
for (i=0; i< 3; i++) {
printf("The value of %d= %d ,address is %u\t \n", i, *(array[i]),
array[i]);
}
getch();
Output
Example3:
#include <stdio.h>
int main () {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali"
};
int i = 0;
return 0;
Example4:
#include <stdio.h>
int main()
char *fruit[] = {
"watermelon",
"banana",
"pear",
"apple",
"coconut",
"grape",
"blueberry"
};
int x;
for(x=0;x<7;x++)
puts(fruit[x]);
Pointers to Void
Note:
1. Suppose we have to declare integer pointer, character pointer and float pointer then we
need to declare 3 pointer variables.
2. Instead of declaring different types of pointer variable it is feasible to declare single
pointer variable which can act as integer pointer,character pointer.
A pointer variable declared using a particular data type can not hold the location address of
variables of other data types. It is invalid and will result in a compilation error.
int var1;
Here comes the importance of a “void pointer”. A void pointer is nothing but a pointer
variable declared using the reserved word in C „void‟.
void * pointer_name;
char cnum;
int inum;
float fnum;
1) malloc() and calloc() return void * type and this allows these functions to be used to allocate
memory of any data type (just because of void *)
int main(void)
Note:
1) void pointers cannot be dereferenced. For example the following program doesn‟t compile.
#include<stdio.h>
int main()
int a = 10;
printf("%d", *ptr);
return 0;
}
Output:
Compiler Error: 'void*' is not a pointer-to-object type
The following program compiles and runs fine.
#include<stdio.h>
int main()
{
int a = 10;
void *ptr = &a;
printf("%d", *(int *)ptr);
return 0;
}
Scenario Behavior
Example:
#include<stdio.h>
int sum (int num1, int num2)
{
return sum1+sum2;
}
int main()
{
int (*f2p) (int, int);
f2p = sum;
int op1 = f2p (10, 13);
int op2 = sum (10, 13);
printf("Output 1 – for function call via Pointer: %d",op1);
printf("Output2 – for direct function call: %d", op2);
return 0;
}
Output:
Output 1 – for function call via Pointer: 23
Output2 – for direct function call: 23
You would have noticed that the output of both the statements is same –
f2p(10, 13) == sum(10, 13)
which means in generic sense you can write it out as:
pointer_name(argument list) == function(same argument list)
Note: Dynamic memory allocation related function can be applied for any data type that's why
dynamic memory allocation related functions return void*.
Memory Allocation Process
Global variables, static variables and program instructions get their memory
in permanent storage area whereas local variables are stored in area called Stack. The memory
space between these two region is known as Heap area. This region is used for dynamic memory
allocation during execution of the program. The size of heap keep changing.
malloc()
malloc stands for "memory allocation".
The malloc() function allocates single block of requested memory at runtime. This function
reserves a block of memory of given size and returns a pointer of type void. This means that we
can assign it to any type of pointer using typecasting. It doesn't initialize memory at execution
time, so it has garbage value initially. If it fails to locate enough space (memory) it returns a
NULL pointer.
syntax
ptr=(cast-type*)malloc(byte-size)
Example
int *x;
x = (int*)malloc(100 * sizeof(int)); //memory space allocated to variable x
free(x); //releases the memory allocated to variable x
Example
struct employee
{
char *name;
int salary;
};
typedef struct employee emp;
emp *e1;
e1 = (emp*)calloc(30,sizeof(emp));
calloc() malloc()
calloc() initializes the allocated memory with malloc() initializes the allocated memory with garbage
0 value. values.
Syntax : Syntax :
(cast_type *)calloc(blocks , size_of_block); (cast_type *)malloc(Size_in_bytes);
syntax
ptr=realloc(ptr, new-size)
Example
int *x;
x=(int*)malloc(50 * sizeof(int));
x=(int*)realloc(x,100); //allocated a new memory to variable x
Example
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num, i, *ptr, sum = 0;
Command‐Line Arguments:
It is possible to pass some values from the command line to your C programs when they are
executed. These values are called command line arguments and many times they are important
for your program especially when you want to control your program from outside instead of hard
coding those values inside the code.
The arguments passed from command line are called command line arguments. These arguments
are handled by main() function.
To support command line argument, you need to change the structure of main() function
Syntax:
int main(int argc, char *argv[] )
Here, argc counts the number of arguments. It counts the file name as the first argument.
The argv[] contains the total number of arguments. The first argument is the file name always.
Example1
#include <stdio.h>
int main( int argc, char *argv[] ) {
if( argc == 2 ) {
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 ) {
printf("Too many arguments supplied.\n");
}
else {
printf("One argument expected.\n");
}
Example2
#include <stdio.h>
void main(int argc, char *argv[] ) {
printf("Program name is: %s\n", argv[0]);
if(argc < 2){
printf("No argument passed through command line.\n");
}
else{
printf("First argument is: %s\n", argv[1]);
}
}
Output
program.exe hello
Program name is: program
First argument is: hello
Note
But if you pass many arguments within double quote, all arguments will be treated as a single
argument only.
Example
./program "hello c how r u"
Program name is: program
First argument is: hello c how r u
You can write your program to print all the arguments. In this program, we are printing
only argv[1], that is why it is printing only one argument.
Output
C:/TC/BIN>TCC mycmd.c
C:/TC/BIN>mycmd 10 20
Number of Arguments: 3
0 arguments c:/tc/bin/mycmd.exe
1 arguments: 10
2 arguments: 20
Note: In above output we passed two arguments but is show "Number of Arguments: 3"
because argc take Number of arguments in the command line including program name. So here
two arguments and one program name (mycmd.exe) total 3 arguments.
UNIT IV
STRUCTURES, UNIONS, ENUMERATIONS AND TYPEDEF
Structure Definition
Structure is a user defined data type which hold or store heterogeneous/different types data item
or element in a single variable. It is a Combination of primitive and derived data type.
or
struct keyword is used to define/create a structure. struct define a new data type which is a
collection of different type of data.
Syntax
data_type member1;
data_type member2;
data_type member n;
};
Example
struct employee
{ int id;
char name[50];
float salary;
};
We can declare variable for the structure, so that we can access the member of structure easily.
There are two ways to declare structure variable:
1st way:
Let's see the example to declare structure variable by struct keyword. It should be declared
within the main function.
struct employee
{ int id;
float salary;
};
2nd way:
Let's see another way to declare variable at the time of defining structure.
struct employee
{ int id;
char name[50];
float salary;
}e1,e2;
But if no. of variable are not fixed, use 1st approach. It provides you flexibility to declare the
structure variable many times.
If no. of variables are fixed, use 2nd approach. It saves your code to declare variable in main()
function.
Structure Initialization
structure variable can also be initialized at compile time.
struct Patient
float height;
int weight;
};
or
p1.weight = 73;
p1.age = 23;
When the variable is normal type then go for struct to member operator.
When the variable is pointer type then go for pointer to member operator.
structure_variable_name.member_name
Example
struct book
char name[20];
char author[20];
int pages;
};
Example
struct emp
int id;
char name[36];
int sal;
};
Example of Structure in C
#include<stdio.h>
#include<conio.h>
struct emp
int id;
char name[36];
float sal;
};
void main()
struct emp e;
clrscr();
scanf("%s",&e.name);
scanf("%f",&e.sal);
printf("Id: %d",e.id);
printf("\nName: %s",e.name);
printf("\nSalary: %f",e.sal);
getch();
Output
Id : 05
Name: Spidy
Salary: 45000.00
Example
#include <stdio.h>
#include <string.h>
struct employee
{ int id;
char name[50];
int main( )
return 0;
Output:
employee 1 id : 101
Nested Structures
structure can have another structure as a member. There are two ways to define nested structure
in c language:
1. By separate structure
2. By Embedded structure
1) Separate structure
We can create 2 structures, but dependent structure should be used inside the main structure as a
member. Let's see the code of nested structure.
C PROGRAMMING Page 245
struct Date
int dd;
int mm;
int yyyy;
};
struct Employee
int id;
char name[20];
}emp1;
2) Embedded structure
struct Employee
int id;
char name[20];
struct Date
int dd;
int mm;
int yyyy;
}doj;
}emp1;
e1.doj.dd
e1.doj.mm
e1.doj.yyyy
Arrays of Structures
Array of structures to store much information of different data types. Each element of the array
representing a structure variable. The array of structures is also known as collection of
structures.
Ex : if you want to handle more records within one structure, we need not specify the number of
structure variable. Simply we can use array of structure variable to store them in one structure
variable.
Example of structure with array that stores information of 5 students and prints it.
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct student{
int rollno;
char name[10];
};
void main(){
int i;
clrscr();
for(i=0;i<5;i++){
printf("\nEnter Rollno:");
scanf("%d",&st[i].rollno);
printf("\nEnter Name:");
scanf("%s",&st[i].name);
for(i=0;i<5;i++){
printf("\nRollno:%d, Name:%s",st[i].rollno,st[i].name);
getch();
Output:
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
Rollno:1, Name:Sonoo
Rollno:2, Name:Ratan
Rollno:3, Name:Vimal
Rollno:4, Name:James
Rollno:5, Name:Sarfraz
The general format of sending a copy of a structure to the called function is:
Function_name(structure_variable_name);
----------
return(exp);
#include <stdio.h>
#include <string.h>
struct student
int id;
char name[20];
float percentage;
};
int main()
record.id=1;
strcpy(record.name, "Raju");
record.percentage = 86.5;
func(record);
return 0;
Output
Id is: 1
#include <stdio.h>
#include <string.h>
struct student
int id;
char name[20];
float percentage;
};
int main()
record.id=1;
strcpy(record.name, "Raju");
record.percentage = 86.5;
return 0;
#include <stdio.h>
#include <string.h>
struct student
int id;
char name[20];
float percentage;
};
void structure_demo();
int main()
record.id=1;
record.percentage = 86.5;
structure_demo();
return 0;
void structure_demo()
struct std
int no;
float avg;
};
struct std a;
void main()
clrscr();
a.no=12;
a.avg=13.76;
fun(a);
getch();
printf("number is%d\n",p.no);
printf("average is%f\n",p.avg);
#include <stdio.h>
#include <string.h>
struct student
int id;
char name[30];
float percentage;
int main()
int i;
ptr = &record1;
return 0;
OUTPUT:
Records of STUDENT1:
Id is: 1
Name is: Raju
Self‐referential Structures
A structure consists of at least a pointer member pointing to the same structure is known as a
self-referential structure. A self referential structure is used to create data structures like linked
lists, stacks, etc. Following is an example of this kind of structure:
type member1;
type membere2;
: :
: :
typeN memberN;
Ex:
struct emp
int code;
Unions
A union is a special data type available in C that allows to store different data types in the same
memory location.
We can access only one member of union at a time. We can‟t access all member values at the
same time in union. But, structure can access all member values at the same time. This is
because, Union allocates one common storage space for all its members. Where as Structure
allocates storage space for all its members separately.
union union_name
data_type member1;
data_type member2;
data_type memeberN;
};
Example
union employee
{ int id;
char name[50];
float salary;
};
Example
#include <string.h>
union employee
{ int id;
char name[50];
int main( )
e1.id=101;
return 0;
Output:
employee 1 id : 1869508435
As you can see, id gets garbage value because name has large memory size. So only name will
have actual value.
Example
#include <stdio.h>
#include <conio.h>
union item
int a;
float b;
char ch;
};
int main( )
it.a = 12;
it.b = 20.2;
it.ch='z';
clrscr();
printf("%d\n",it.a);
printf("%f\n",it.b);
printf("%c\n",it.ch);
getch();
return 0;
Output
-26426
20.1999
As you can see here, the values of a and b get corrupted and only variable c prints the expected
result. Because in union, the only member whose value is currently stored will have the memory.
Structure Union
Structure allocates separate Union allocates one common storage space for its all
4 storage space for its every members. Union find which member need more memory
members. than other member, then it allocate that much space
Bit‐Fields
Syntax
struct {
};
Elements Description
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.
struct {
} 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 {
} Age;
int main( ) {
Age.age = 4;
Age.age = 7;
Age.age = 8;
return 0;
Output
Sizeof( Age ) : 4
Age.age : 7
Age.age : 0
typedef
The typedef is a keyword that allows the programmer to create a new data type name for an
existing data type. So, the purpose of typedef is to redefine the name of an existing variable type.
Syntax
Example of typedef
#include<stdio.h>
#include<conio.h>
void main()
int a=10;
Integerdata b=20;
Integerdata s;
clrscr();
s=a+b;
getch();
Output
Sum: 20
#include<stdio.h>
#include<conio.h>
void main()
digits a,b,sum;
clrscr();
scanf("%d%d",&a,&b);
sum=a+b;
getch();
Application of typedef
typedef can be used to give a name to user defined data type as well. Lets see its use with
structures.
typedef struct
type member1;
type member2;
type member3;
} type_name ;
type_name t1, t2 ;
#include<stdio.h>
#include<conio.h>
#include<string.h>
char name[50];
int salary;
} emp ;
void main( )
emp e1;
printf("\nEmployee name\t");
scanf("%s",e1.name);
scanf("%d",&e1.salary);
printf("\nroll is %d",e1.salary);
getch();
typedef can be used to give an alias name to pointers also. Here we have a case in which use of
typedef is beneficial during pointer declaration.
int* x, y ;
By this declaration statement, we are actually declaring x as a pointer of type int, whereas y will
be declared as a plain integer.
IntPtr x, y, z;
But if we use typedef like in above example, we can declare any number of pointers in a single
statement.
NOTE : If you do not have any prior knowledge of pointers, do study Pointers first.
Enumerations
An enum is a keyword, it is an user defined data type. All properties of integer are applied on
Enumeration data type so size of the enumerator data type is 2 byte. It work like the Integer.
It is used for creating an user defined data type of integer. Using enum we can create sequence of
integer constant value.
Syntax
In above syntax tagname is our own variable. tagname is any variable name.
Example of Enumeration in C
#include<stdio.h>
#include<conio.h>
void main()
int a;
clrscr();
a=x+y+z; //0+1+2
printf("Sum: %d",a);
getch();
Output
Sum: 3
Example of Enumeration in C
#include<stdio.h>
void main()
today=tue;
printf("%d day",today+1);
getch();
Output
3 day
Example of Enumeration in C
#include<stdio.h>
#include<conio.h>
void main()
printf("%d ",i);
getch();
Output
In above code replace sun, mon, tue,.... with Equivalent numeric value 0, 1, 2,...
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.
File I/O:-
Sometimes it is necessary to store the data in a manner that can be later retrieved and displayed
either in a part or in whole. This medium is usually a “file” on the disk. File I/O can be handled
by using different functions.
a) Formatted functions:- The file input function fscanf( ) and the file output function fprintf( )
are called formatted file I/O functions.
b)Unformatted functions:- The input functions like getc( ), getw( ), and fread( ) are called
unformatted file input functions and putc( ), putw( ), and fwrite( ) functions are unformatted file
output functions. Each and every function is having its own syntax and meaning.
File streams:- Stream is either reading or writing of data. The streams are designed to allow the
user to access the files efficiently. A stream is a file or physical device like key board, printer,
monitor, etc., The FILE object uses these devices. When a C program is started, the operating
system is responsible for opening three streams: standard input stream (stdin), standard output
stream (stdout), standard error(stderr).Normally the stdin is connected to the keyboard, the
stdout and stderr are connected to the monitor.
Files
File is a collection of bytes that is stored on secondary storage devices like Hard disk.
OR
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 ready made structure.
Note:
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.
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:
Naming a file/Creation of new file
Opening an existing file
Reading data from file
Writing data into file
Closing a file
Steps for processing a file
Declare a file pointer
open a file using fopen() function
Process the file using suitable file functions.
close the file using fclose() function.
Mode Description
Note:
fscanf is used to read list of items from a file
fprintf is used to write a list of items to a file.
Note:
EOF – End of file (when EOF encountered the reading / writing should be terminated)
4 fscanf() To read set of data from file. fscanf(fp, "control string", list)
file1.txt
a
fgetc() function
The fgetc() function returns/read a single character from the file. It gets a character from the
stream. It returns EOF at the end of file.
Example:
#include<stdio.h>
#include<conio.h>
void main(){
FILE *fp;
char c;
clrscr();
fp=fopen("myfile.txt","r");
while((c=fgetc(fp))!=EOF){
printf("%c",c);
fclose(fp);
getch();
myfile.txt
fputs()
Example:
#include<stdio.h>
void main(){
FILE *fp;
clrscr();
fp=fopen("myfile2.txt","w");
fputs("hello c programming",fp);
fclose(fp);
getch();
myfile2.txt
hello c programming
fgets()
Example:
#include<stdio.h>
#include<conio.h>
void main(){
FILE *fp;
char text[300];
clrscr();
fp=fopen("myfile2.txt","r");
printf("%s",fgets(text,200,fp));
fclose(fp);
Output:
hello c programming
These are integer oriented functions. These are similar to above functions and are used to read
and write integer values. These are useful when we deal with only integer data. The general
format is
Ex: int x = 5;
putw(x,fp);
Ex: int x;
x = getw (fp);
The fseek() function is used to set the file pointer to the specified offset. It is used to write data
into file at desired location.
syntax:
Whence Meaning
SEKK_CUR Starts the offset from the current location of the cursor in the file.
or
Offset is a number or variable of type long, it specifies the number of positions (bytes) to
be moved from the location specified. If offset is positive number, then moving forward
or negative meaning move backwards.
Position is a n integer number and it specifies from which position the file pointer to be
moved. Position can take one of the following three values.
0 beginning of file
1 current position
2 end of file
Eg: fseek (fp, 0L,0); - go to the beginning of the file. (Similar to rewind).
fseek (fp, 0L,1); - Stay at current position (Rarely used)
fseek (fp, 0L,2); -go to the end of the file, past the last character of the file.
Example:
#include <stdio.h>
void main(){
fp = fopen("myfile.txt","w+");
fclose(fp);
myfile.txt
rewind()
This function places the file pointer to the beginning of the file, irrespective of where it is present
right now. It takes file pointer as an argument.
Syntax:
rewind( fp);
Example:
File: file.txt
Example:
#include<stdio.h>
#include<conio.h>
void main(){
char c;
clrscr();
fp=fopen("file.txt","r");
while((c=fgetc(fp))!=EOF){
printf("%c",c);
while((c=fgetc(fp))!=EOF){
printf("%c",c);
fclose(fp);
getch();
Output:
As you can see, rewind() function moves the file pointer at beginning of the file that is why "this
is simple text" is printed 2 times. If you don't call rewind() function, "this is simple text" will be
printed only once.
ftell()
The ftell() function returns the current file position of the specified stream. We can use ftell()
function to get the total size of a file after moving file pointer at the end of file. We can use
SEEK_END constant to move the file pointer at the end of file.
syntax:
n = ftell(fp);
#include <stdio.h>
#include <conio.h>
FILE *fp;
int length;
clrscr();
fp = fopen("file.txt", "r");
fseek(fp, 0, SEEK_END);
length = ftell(fp);
fclose(fp);
getch();
Output:
File
handling functions Description
scanf ()
scanf () function reads formatted data from