Professional Documents
Culture Documents
Entire C
Entire C
Entire C
BASICS OF C LANGUAGE
What is C programming:
The C Language is developed for creating system applications that direct interacts to
the hardware devices such as drivers, kernals etc.
C programming is considered as the base for other programming languages, that is
why it is known as mother language.
It can be defined by following ways:
1. Mother language
2. System programming language
3. Procedure-oriented programming language
4. Structured programming language
5. Mid level programming language
1) C as a mother language
C language is considered as the mother language of all the modern languages
because most of the compilers, JVMs, Kernals etc. are written in C language and most
of languages follows c syntax e.g. C++, Java etc.
It provides the core concepts like array, functions, file handling etc. that is being used
in many languages like C++, java, C# etc.
2) C as a system programming language
A system programming language is used to create system softwares. C language is a
system programming language because it can be used to do low level programming
(e.g. driver and kernel). It is generally used to create hardware devices, OS, drivers,
kernels etc. For example, linux kernel is written in C.
It can?t be used in internet programming like java, .net, php etc.
3) C as a procedural language
A procedure is known as function, method, routine, subroutine etc. A procedural
language specifies a series of steps or procedures for the program to solve the
problem.
A procedural language breaks the program into functions, data structures etc.
C is a procedural language. In C, variables and function prototypes must be declared
before being used.
4) C as a structured programming language
A structured programming language is a subset of procedural language. Structure
means to break a program into parts or blocks so that it may be easy to understand.
In C language, we break the program into parts using functions. It makes the program
easier to understand and modify.
5) C as a mid-level programming language
C is considered as a middle level language because it supports the feature of both low-
level and high level language. C language program is converted into assembly code,
supports pointer arithmetic (low level), but it is machine independent (feature of high
level).
Low level language is specific to one machine i.e. machine dependent. It is machine
dependent, fast to run. But it is not easy to understand.
High Level language is not specific to one machine i.e. machine independent. It is easy
to understand.
History of C language:
C programming language was developed in 1972 by Dennis Ritchie at bell laboratories
of AT&T (American Telephone & Telegraph), located in U.S.A.
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.
Initially, C language was developed to be used in UNIX operating system. It inherits
many features of previous languages such as B and BCPL.
Features of C Language
C is the widely used language. It provides a lot of features that are given below.
1. Simple
2. Machine Independent or Portable
3. Mid-level programming language
4. structured programming language
5. Rich Library
6. Memory Management
7. Fast Speed
8. Pointers
9. Recursion
10.Extensible
1) Simple
C is a simple language in the sense that it provides structured approach (to break the
problem into parts), rich set of library functions, data types etc.
2) Machine Independent or Portable
Unlike assembly language, c programs can be executed in many machines with little bit
or no change. But it is not platform-independent.
3) Mid-level prorgramming language
C is also used to do low level programming. It is used to develop system applications
such as kernel, driver etc. It also supports the feature of high level language. That is
why it is known as mid-level language.
4) Structured prorgramming language
C is a structured programming language in the sense that we can break the program
into parts using functions. So, it is easy to understand and modify.
5) Rich Library
C provides a lot of inbuilt functions that makes the development fast.
6) Memory Management
It supports the feature of dynamic memory allocation. In C language, we can free the
allocated memory at any time by calling the free() function.
7) Speed
The compilation and execution time of C language is fast.
8) Pointer
C provides the feature of pointers. We can directly interact with the memory by using
the pointers. We can use pointers for memory, structures, functions, array etc.
9) Recursion
In c, we can call the function within the function. It provides code reusability for every
function.
10) Extensible
C language is extensible because it can easily adopt new features.
Structure of a C Program
Documentation section:
The documentation section consists of a set of comment lines giving the name of the
program, the author and other details, which the programmer would like to use later.
Link section: The link section provides instructions to the compiler to link functions
from the system library such as using the #include directive.
Definition section: The definition section defines all symbolic constants such using
the #define directive.
Global declaration section: There are some variables that are used in more than one
function. Such variables are called global variables and are declared in the global
declaration section that is outside of all the functions. This section also declares all
the user-defined functions.
main () function section: Every C program must have one main function section.
This section contains two parts; declaration part and executable part
1. Declaration part: The declaration part declares all the variables used in the
executable part.
2. Executable part: There is at least one statement in the executable part. These two
parts must appear between the opening and closing braces. The program
execution begins at the opening brace and ends at the closing brace. The closing brace
of the main function is the logical end of the program. All statements in the declaration
and executable part end with a semicolon.
Subprogram section: If the program is a multi-function program then the
subprogram section contains all the user-defined functions that are called in the main
() function. User-defined functions are generally placed immediately after the main ()
function, although they may appear in any order.
All section, except the main () function section may be absent when they are not
required.
Character Set in C
ALPHABETS
Uppercase letters A-Z
Lowercase letters a-z
DIGITS 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
SPECIAL CHARACTERS
` Apostrophe / Slash
WHITESPACE CHARACTERS
C Identifiers
Identifier refers to name given to entities such as variables, functions, structures etc.
Identifier must be unique. They are created to give unique name to a entity to identify
it during the execution of the program. For example:
int money;
double accountBalance;
Comments in C
Comments in C language are used to provide information about lines of code. It is
widely used for documenting code. There are 2 types of comments in C language.
1. Single Line Comments
2. Multi Line Comments
Single Line Comments
Single line comments are represented by double slash \\. Let's see an example of
single line comment in C.
1. #include <stdio.h>
2. #include <conio.h>
3. void main(){
4. clrscr();
5. //printing information
6. printf("Hello C");
7. getch();
8. }
Output:
Hello C
Even you can place comment after statement. For example:
1. printf("Hello C");//printing information
Multi Line Comments
Multi line comments are represented by slash asterisk \* ... *\. It can occupy many
lines of code but it can't be nested. Syntax:
1. /*
2. code
3. to be commented
4. */
Let's see an example of multi line comment in C.
1. #include <stdio.h>
2. #include <conio.h>
3. void main(){
4. clrscr();
5. /*printing
6. information*/
7. printf("Hello C");
8. getch();
9. }
Output:
Hello C
Data Types in C
A data type specifies the type of data that a variable can store such as integer,
floating, character etc.
There are 4 types of data types in C language.
float 4 byte
double 8 byte
Variables in C
A variable is a name of memory location. It is used to store data. Its value can be
changed and it can be reused many times.
It is a way to represent memory location through symbol so that it can be easily
identified.
Let's see the syntax to declare a variable:
1. type variable_list;
The example of declaring variable is given below:
1. int a;
2. float b;
3. char c;
Here, a, b, c are variables and int,float,char are data types.
We can also provide values while declaring the variables as given below:
1. int a=10,b=20;//declaring 2 variable of integer type
2. float f=20.8;
3. char c='A';
Rules for defining variables
o A variable can have alphabets, digits and underscore.
o A variable name can start with alphabet and underscore only. It can't start with
digit.
o No white space is allowed within variable name.
o A variable name must not be any reserved word or keyword e.g. int, float etc.
Valid variable names:
1. int a;
2. int _ab;
3. int a30;
Inalid variable names:
1. int 2;
2. int a b;
3. int long;
Constants in C
A constant is a value or variable that can't be changed in the program, for example:
10, 20, 'a', 3.4, "c programming" etc.
There are different types of constants in C programming.
List of Constants in C
Constant Example
Symbolic constant
C #define preprocessor
The #define preprocessor is also used to define constant. This is known as symbolic
constant
C #define
The #define preprocessor directive is used to define constant or micro substitution. It
can use any basic data type.
Syntax:
1. #define token value
Let's see an example of #define to define a constant.
1. #include <stdio.h>
2. #define PI 3.14
3. main() {
4. printf("%f",PI);
5. }
Output:
3.140000
Let's see an example of #define to create a macro.
1. #include <stdio.h>
2. #define MIN(a,b) ((a)<(b)?(a):(b))
3. void main() {
4. printf("Minimum between 10 and 20 is: %d\n", MIN(10,20));
5. }
Output:
Minimum between 10 and 20 is: 10
Assignment Statements:
Basic:
An assignment statement gives a value to a variable. For example,
x = 5;
gives x the value 5.
The value of a variable may be changed. For example, if x has the value 5, then the
assignment statement
x = x + 1;
will give x the value 6.
The general syntax of an assignment statement is
variable = expression;
where:
the variable must be declared;
the variable may be a simple name, or an indexed location in an array, or a field
(instance variable) of an object, or a static field of a class; and
the expression must result in a value that is compatible with the type of
the variable. In other words, it must be possible to cast the expression to the type of
the variable.
Examples:
int i = 0;
price[itemNumber] = 0.80 * price[itemNumber];
myDog.name = "Fido";
Intermediate:
An assignment "statement" is not really a statement (although it is typically used that
way), but is an expression. The value of the expression is the value that is assigned to
the variable. For example, the expression
i = j = k = 0;
sets all of i, j, and k to zero.
The file pointers are the means to access the file for reading and writing purpose. This
section explains how to read values from the screen and how to print the result on the
screen.
The getchar() and putchar() Functions
The int getchar(void) function reads the next available character from the screen and
returns it as an integer. This function reads only single character at a time. You can
use this method in the loop in case you want to read more than one character from the
screen.
The int putchar(int c) function puts the passed character on the screen and returns the
same character. This function puts only single character at a time. You can use this
method in the loop in case you want to display more than one character on the screen.
Check the following example −
#include <stdio.h>
int main( ) {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
return 0;
}
When the above code is compiled and executed, it waits for you to input some text.
When you enter a text and press enter, then the program proceeds and reads only a
single character and displays it as follows −
$./a.out
Enter a value : this is test
You entered: t
#include <stdio.h>
int main( ) {
char str[100];
printf( "Enter a value :");
gets( str );
printf( "\nYou entered: ");
puts( str );
return 0;
}
When the above code is compiled and executed, it waits for you to input some text.
When you enter a text and press enter, then the program proceeds and reads the
complete line till end, and displays it as follows −
$./a.out
Enter a value : this is test
You entered: this is test
#include <stdio.h>
int main( ) {
char str[100];
int i;
printf( "Enter a value :");
scanf("%s %d", str, &i);
printf( "\nYou entered: %s %d ", str, i);
return 0;
}
When the above code is compiled and executed, it waits for you to input some text.
When you enter a text and press enter, then program proceeds and reads the input
and displays it as follows −
$./a.out
Enter a value : seven 7
You entered: seven 7
Here, it should be noted that scanf() expects input in the same format as you provided
%s and %d, which means you have to provide valid inputs like "string integer". If you
provide "string string" or "integer integer", then it will be assumed as wrong input.
Secondly, while reading a string, scanf() stops reading as soon as it encounters a
space, so "this is test" are three strings for scanf().
*******
CHAPTER 2
CONTROL FLOW AND LOGICAL EXPRESSIONS
Operator in C
An operator is a symbol that tells the compiler to perform specific mathematical or
logical functions. C language is rich in built-in operators and provides the following
types of operators −
Arithmetic Operators
Relational Operators
Logical Operators
Bitwise Operators
Assignment Operators
We will, in this chapter, look into the way each operator works.
Arithmetic Operators
The following table shows all the arithmetic operators supported by the C language.
Assume variable A holds 10 and variable B holds 20 then −
Operator Description Example
Relational Operators
The following table shows all the relational operators supported by C. Assume
variable A holds 10 and variable B holds 20 then −
Operator Description Example
> Checks if the value of left operand is greater than the (A > B) is
value of right operand. If yes, then the condition becomes not true.
true.
< Checks if the value of left operand is less than the value of (A < B) is
right operand. If yes, then the condition becomes true. true.
>= Checks if the value of left operand is greater than or equal (A >= B) is
to the value of right operand. If yes, then the condition not true.
becomes true.
<= Checks if the value of left operand is less than or equal to (A <= B) is
the value of right operand. If yes, then the condition true.
becomes true.
Logical Operators
Following table shows all the logical operators supported by C language. Assume
variable A holds 1 and variable B holds 0, then −
Operator Description Example
&& Called Logical AND operator. If both the operands are non- (A && B)
zero, then the condition becomes true. is false.
! Called Logical NOT Operator. It is used to reverse the logical !(A && B)
state of its operand. If a condition is true, then Logical NOT is true.
operator will make it false.
Bitwise Operators
Bitwise operator works on bits and performs bit-by-bit operation. The truth tables for
&, |, and ^ is as follows −
p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
Assume A = 60 and B = 13 in binary format, they will be as follows −
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
The following table lists the bitwise operators supported by C. Assume variable 'A'
holds 60 and variable 'B' holds 13, then –
& Binary AND Operator copies a bit to the result if it exists (A & B) = 12,
in both operands. i.e., 0000
1100
<< Binary Left Shift Operator. The left operands value is A << 2 = 240
moved left by the number of bits specified by the right i.e., 1111
operand. 0000
>> Binary Right Shift Operator. The left operands value is A >> 2 = 15
moved right by the number of bits specified by the right i.e., 0000
operand. 1111
Assignment Operators
The following table lists the assignment operators supported by the C language −
Operator Description Example
Conditional operator
The conditional operator in C is called by two more names
? : Operator
It is actually the if condition that we use in C language, but using conditional operator,
we turn if condition statement into more simple line of code conveying the same thing.
The syntax of a conditional operator is :
expression 1 ? expression 2: expression 3
Explanation-
The question mark "?" in the syntax represents the if part.
The first expression (expression 1) is use to check true or false condition only.
If that condition (expression 1) is true then the expression on the left side of " : " i.e
expression 2 is executed.
If that condition (expression 1) is false then the expression on the right side of " : " i.e
expression 3 is executed.
Increment/decrement Operators
Increment operators are used to increase the value of the variable by one and
decrement operators are used to decrease the value of the variable by one in C
programs.
Syntax:
Increment operator: ++var_name; (or) var_name++;
Decrement operator: – -var_name; (or) var_name – -;
Example:
Increment operator : ++ i ; i ++ ;
Decrement operator : – – i ; i – – ;
Precedence of Operators in C
The precedence of operator species that which operator will be evaluated first and
next. The associativity specifies the operators direction to be evaluated, it may be left
to right or right to left.
Let's understand the precedence by the example given below:
int value=10+20*10;
The value variable will contain 210 because * (multiplicative operator) is evaluated
before + (additive operator).
The precedence and associativity of C operators is given below:
If Statement
The single if statement in C language is used to execute the code if condition is true.
The syntax of if statement is given below:
if(expression)
{
//code to be executed
}
Flowchart of if statement in C
example of if statement.
#include<stdio.h>
#include<conio.h>
void main()
{
int number=0;
clrscr();
printf("enter a number:");
scanf("%d",&number);
if(number%2==0)
{
printf("%d is even number",number);
}
getch();
}
Output
enter a number:4
4 is even number
If-else Statement
The if-else statement in C language is used to execute the code of part1 if condition is
true or execute the code of part2 if condition is false.
The syntax of if-else statement is given below:
if(expression)
{
//code to be executed if condition is true
}
else
{
//code to be executed if condition is false
}
Let's see the simple example of even and odd number using if-else statement in C
language.
#include<stdio.h>
#include<conio.h>
void main()
{
int number=0;
clrscr();
printf("enter a number:");
scanf("%d",&number);
if(number%2==0)
{
printf("%d is even number",number);
}
else
{
printf("%d is odd number",number);
}
getch();
}
Output
enter a number:4
4 is even number
If else-if ladder Statement
The if else-if statement is used to execute one code from multiple conditions. The
syntax of if else-if statement is given below:
if(condition1)
{
//code to be executed if condition1 is true
}
else
if(condition2)
{
//code to be executed if condition2 is true
}
else
if(condition3)
{
//code to be executed if condition3 is true
}
...
else
{
//code to be executed if all the conditions are false
}
Nested if_else
It is always legal in C programming to nest if-else statements, which means you can
use one if or else if statement inside another if or else if statement(s).
Syntax
if( boolean_expression 1)
{
/* Executes when the boolean expression 1 is true */
if(boolean_expression 2)
{
/* Executes when the boolean expression 2 is true */
}
}
You can nest else if...else in the similar way as you have nested if statements.
Example
#include <stdio.h>
#include <conio.h>
void main () {
int a = 100;
int b = 200;
if( a == 100 )
{
if( b == 200 )
{
printf("Value of a is 100 and b is 200\n" );
}
}
printf("Exact value of a is : %d\n", a );
printf("Exact value of b is : %d\n", b );
}
When the above code is compiled and executed, it produces the following result −
Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200
Switch Statement
The switch statement in C language is used to execute the code from multiple
conditions. It is like if else-if ladder statement.
The syntax of switch statement in c language is given below:
switch(expression)
{
case value1:
//code to be executed;
break; //optional
case value2:
//code to be executed;
break; //optional
......
default:
code to be executed if all cases are not matched;
}
Looping Structures:
A loop statement allows us to execute a statement or group of statements multiple
times. Given below is the general form of a loop statement in most of the programming
languages −
for loop
for loop is used to execute a set of statements repeatedly until a particular condition is
satisfied. we can say it an open ended loop. General format is,
In for loop we have exactly two semicolons, one after initialization and second after
condition. In this loop we can have more than one initialization or
increment/decrement, separated using comma operator. for loop can have only
one condition.
The for loop is executed as follows:
It first evaluates the initialization code.
Then it checks the condition expression.
If it is true, it executes the for-loop body.
Then it evaluate the increment/decrement condition and again follows from step 2.
When the condition expression becomes false, it exits the loop.
#include<stdio.h>
#include<conio.h>
void main( )
{
int x;
for(x=1; x<=10; x++)
{
printf("%d\t",x);
}
getch();
}
Output
1 2 3 4 5 6 7 8 9 10
while loop
while loop can be addressed as an entry control loop. It is completed in 3 steps.
Variable initialization.( e.g int x=0; )
condition( e.g while( x<=10) )
Variable increment or decrement ( x++ or x-- or x=x+2 )
Syntax :
variable initialization ;
while (condition)
{
statements ;
variable increment or decrement ;
}
do while loop
In some situations it is necessary to execute body of the loop before testing the
condition. Such situations can be handled with the help of do-while loop. do statement
evaluates the body of the loop first and at the end, the condition is checked
using while statement. It means that for at least one time ,the body of the loop will be
executed, even though the starting condition inside while is initialized to false. General
format of do-while loop is,
do
{
....
.....
}
while(condition)
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++;
}
while(i <= 10);
getch();
}
Output
5 10 15 20 25 30 35 40 45 50
continue statement
It causes the control to go directly to the test-condition and then continue the loop
process. On encountering continue, cursor leave the current cycle of loop, and starts
with the next cycle.
******
CHAPTER 3
FUNCTIONS
Definition:
A function is a group of statements that together perform a task. Every C program has
at least one function, which is main(), and all the most trivial programs can define
additional functions.
You can divide up your code into separate functions. How you divide up your code
among different functions is up to you, but logically the division is such that each
function performs a specific task.
Defining a Function
The general form of a function definition in C programming language is as follows −
return_type function_name( parameter list )
{
body of the function
}
A function definition in C programming consists of a function header and a function
body. Here are all the parts of a function −
Return Type − A function may return a value. The return_type is the data type of
the value the function returns. Some functions perform the desired operations
without returning a value. In this case, the return_type is the keyword void.
Function Name − This is the actual name of the function. The function name and
the parameter list together constitute the function signature.
Parameters − A parameter is like a placeholder. When a function is invoked, you
pass a value to the parameter. This value is referred to as actual parameter or
argument. The parameter list refers to the type, order, and number of the
parameters of a function. Parameters are optional; that is, a function may contain no
parameters.
Function Body − The function body contains a collection of statements that define
what the function does.
Example
Given below is the source code for a function called max(). This function takes two
parameters num1 and num2 and returns the maximum value between the two −
/* function returning the max between two numbers */
int max(int num1, int num2)
{
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Function Declarations/Prototype
A function declaration/prototype tells the compiler about a function name and how
to call the function. The actual body of the function can be defined separately.
A function declaration has the following parts −
return_type function_name( parameter list );
For the above defined function max(), the function declaration is as follows −
int max(int num1, int num2);
Parameter names are not important in function declaration only their type is required,
so the following is also a valid declaration −
int max(int, int);
Function declaration is required when you define a function in one source file and you
call that function in another file. In such case, you should declare the function at the
top of the file calling the function.
Advantage of functions in C
There are many advantages of functions.
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
It makes the code optimized, we don't need to write much code.
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.
Types of Functions
There are two types of functions in C programming:
1. Library Functions: are the functions which are declared in the C header files
such as scanf(), printf(), gets(), puts(), ceil(), floor() etc.
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.
Return Value
A C function may or may not return a value from the function. If you don't have to
return any value from the function, use void for the return type.
Let's see a simple example of C function that doesn't return any value from the
function.
Example without return value:
void hello()
{
printf("hello c");
}
If you want to return any value from the function, you need to use any data type such
as int, long, char etc. The return type depends on the value to be returned from the
function.
Let's see a simple example of C function that returns int value from the function.
Example with return value:
int get()
{
return 10;
}
In the above example, we have to return 10 as a value, so the return type is int. If you
want to return floating-point value (e.g. 10.2, 3.1, 54.5 etc), you need to use float as
the return type of the method.
float get()
{
return 10.2;
}
Now, you need to call the function, to get the value of the function.
Parameters in C Function
A c function may have 0 or more parameters. You can have any type of parameter in C
program such as int, float, char etc. The parameters are also known as formal
arguments.
Example of a function that has 0 parameter:
void hello()
{
printf("hello c");
}
Calling a function in C
If a function returns any value, you need to call function to get the value returned from
the function.
The syntax of calling a function in c programming is given below:
variable=function_name(arguments...);
1) variable: The variable is not mandatory. If function return type is void, you must not
provide the variable because void functions doesn't return any value.
2) function_name: The function_name is name of the function to be called.
3) arguments: You need to provide arguments while calling the C function. It is also
known as actual arguments.
#include <stdio.h>
#include <conio.h>
//defining function
void hello()
{
printf("hello c programming");
}
void main()
{
clrscr();
hello();//calling a function
hello();
hello();
getch();
}
Output
hello c programming
hello c programming
hello c programming
#include <stdio.h>
#include <conio.h>
//defining function
int cube(int n)
{
return n*n*n;
}
void main()
{
int result1=0,result2=0;
clrscr();
result1=cube(2);//calling function
result2=cube(3);
printf("%d \n",result1);
printf("%d \n",result2);
getch();
}
Output
8
27
Parameter passing in C
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 call by value but it is
modified in call by reference.
Call by value in C
In call by value, original value is not modified.
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().
example given below:
#include <stdio.h>
#include <conio.h>
void change(int num)
{
printf("Before adding value inside function num=%d \n",num);
num=num+100;
printf("After adding value inside function num=%d \n", num);
}
int main()
{
int x=100;
clrscr();
printf("Before function call x=%d \n", x);
change(x);//passing value in function
printf("After function call x=%d \n", x);
getch();
return 0;
}
Output
Before function call x=100
Before adding value inside function num=100
After adding value inside function num=200
After function call x=100
Call by reference in C
In call by reference, original value is modified because we pass reference (address).
Here, address of the value is passed in the function, so actual and formal arguments
shares the same address space. Hence, value changed inside the function, is reflected
inside as well as outside the function.
Let's try to understand the concept of call by reference in c language by the example
given below:
#include <stdio.h>
#include <conio.h>
void change(int *num)
{
printf("Before adding value inside function num=%d \n",*num);
(*num) += 100;
printf("After adding value inside function num=%d \n", *num);
}
int main()
{
int x=100;
clrscr();
getch();
return 0;
}
Output
Before function call x=100
Before adding value inside function num=100
After adding value inside function num=200
After function call x=200
2 Changes made inside the function is Changes made inside the function is
not reflected on other functions reflected outside the function also
3 Actual and formal arguments will be Actual and formal arguments will be
created in different memory location created in same memory location
Scope of Variables in C
A scope in any programming is a region of the program where a defined variable can
have its existence and beyond that variable it cannot be accessed. There are three
places where variables can be declared in C programming language −
Inside a function or a block which is called local variables.
Outside of all functions which is called global variables.
Local Variables
Variables that are declared inside a function or block are called local variables. They
can be used only by statements that are inside that function or block of code. Local
variables are not known to functions outside their own. The following example shows
how local variables are used. Here all the variables a, b, and c are local to main()
function.
#include <stdio.h>
int main ()
{
/* local variable declaration */
int a, b;
int c;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
return 0;
}
Global Variables
Global variables are defined outside a function, usually on top of the program. Global
variables hold their values throughout the lifetime of your program and they can be
accessed inside any of the functions defined for the program.
A global variable can be accessed by any function. That is, a global variable is
available for use throughout your entire program after its declaration. The following
program show how global variables are used in a program.
#include <stdio.h>
/* global variable declaration */
int g;
int main ()
{
/* local variable declaration */
int a, b;
/* actual initialization */
a = 10;
b = 20;
g = a + b;
printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
return 0;
}
A program can have same name for local and global variables but the value of local
variable inside a function will take preference. Here is an example −
#include <stdio.h>
/* global variable declaration */
int g = 20;
int main ()
{
/* local variable declaration */
int g = 10;
printf ("value of g = %d\n", g);
return 0;
}
When the above code is compiled and executed, it produces the following result −
value of g = 10
Recursion in C
When function is called within the same function, it is known as recursion in C. The
function which calls the same function, is known as recursive function.
A function that calls itself, and doesn't perform any task after function call, is know
as tail recursion. In tail recursion, we generally call the same function with return
statement. An example of tail recursion is given below.
example of recursion.
recursionfunction()
{
recursionfunction();//calling self function
}
Example of tail recursion in C
#include<stdio.h>
#include<conio.h>
int factorial (int n)
{
if ( n < 0)
return -1; /*Wrong value*/
if (n == 0)
return 1; /*Terminating condition*/
return (n * factorial (n -1));
}
void main()
{
int fact=0;
clrscr();
fact=factorial(5);
printf("\n factorial of 5 is %d",fact);
getch();
}
Output
factorial of 5 is 120
We can understand the above program of recursive method call by the figure given
below:
Storage Classes in C
Storage classes are used to define scope and life time of a variable. There are four
storage classes in C programming.
o auto
o extern
o static
o register
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
1) auto
The auto keyword is applied to all local variables automatically. It is the default storage
class that is why it is known as automatic variable.
#include <stdio.h>
void main()
{
int a=10;
auto int b=10;//same like above
printf("%d %d",a,b);
}
Output:
10 10
2) register
The register variable allocates memory in register than RAM. Its size is same of
register size. It has a faster access than other variables.
It is recommended to use register variable only for quick access such as in counter.
Note: We can't get the address of register variable.
3) static
The static variable is initialized only once and exists till the end of the program. It
retains its value between multiple functions call.
The static variable has the default value 0 which is provided by compiler.
#include <stdio.h>
void func()
{
static int i=0;//static variable
int j=0;//local variable
i++;
j++;
printf("i= %d and j= %d\n", i, j);
}
void main()
{
func();
func();
func();
}
Output:
i= 1 and j= 1
i= 2 and j= 1
i= 3 and j= 1
4) extern
The extern variable is visible to all the programs. It is used if two or more files are
sharing same variable or function.
extern int counter=0;
*****
CHAPTER 4
ARRAYS AND STRING
Introduction:
Array in C language is a collection or group of elements (data). All the elements of c
array are homogeneous (similar). It has contiguous memory location.
C array is beneficial if you have to store similar elements. 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
1) Code Optimization: Less code to the access the data.
2) Easy to traverse data: By using the for loop, we can retrieve the elements of an
array easily.
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 C Array
1) 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 which we will
learn later.
Declaration of C Array
We can declare an array in the c language in the following way.
data_type array_name[array_size];
int marks[5];
Here, int is the data_type, marks is the array_name and 5 is the array_size.
Initialization of C Array
A simple way to initialize array is by index. Notice that array index starts from 0 and
ends with [SIZE - 1].
marks[0]=80;//initialization of array
marks[1]=60;
marks[2]=70;
marks[3]=85;
marks[4]=75;
example
#include <stdio.h>
#include <conio.h>
void main()
{
int i=0;
int marks[5];//declaration of array
clrscr();
marks[0]=80;//initialization of array
marks[1]=60;
marks[2]=70;
marks[3]=85;
marks[4]=75;
//traversal of array
for(i=0;i<5;i++)
{
printf("%d \n",marks[i]);
}//end of for loop
getch();
}
Output
80
60
70
85
75
#include <stdio.h>
#include <conio.h>
void main()
{
int i=0;
int marks[5]={20,30,40,50,60};//declaration and initialization of array
clrscr();
//traversal of array
for(i=0;i<5;i++)
{
printf("%d \n",marks[i]);
}
getch();
}
Output
20
30
40
50
60
Two Dimensional Array in C
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];
int twodimen[4][3];
Initialization of 2D Array in C
A way to initialize the two dimensional array at the time of declaration is given below.
int arr[4][3]={{1,2,3},{2,3,4},{3,4,5},{4,5,6}};
#include <stdio.h>
#include <conio.h>
void main()
{
int i=0,j=0;
int arr[4][3]={{1,2,3},{2,3,4},{3,4,5},{4,5,6}};
clrscr();
//traversing 2D array
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("arr[%d] [%d] = %d \n",i,j,arr[i][j]);
}//end of j
}//end of i
getch();
}
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
String:
char ch[10]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
As you know well, array index starts from 0, so it will be represented as in the figure
given below.
While declaring string, size is not mandatory. So you can write the above code as given
below:
char ch[]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
You can also define string by string literal in C language. For example:
char ch[]="javatpoint";
In such case, '\0' will be appended at the end of string by the compiler.
#include <stdio.h>
void main ()
{
char ch[11]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
char ch2[11]="javatpoint";
printf("Char Array Value is: %s\n", ch);
printf("String Literal Value is: %s\n", ch2);
}
Output:
Char Array Value is: javatpoint
String Literal Value is: javatpoint
strlen()
The strlen() function returns the length of the given string. It doesn't count null
character '\0'.
#include <stdio.h>
void main()
{
char ch[20]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
printf("Length of string is: %d",strlen(ch));
}
Output:
Length of string is: 10
strcpy()
The strcpy(destination, source) function copies the source string in destination.
#include <stdio.h>
void main()
{
char ch[20]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
char ch2[20];
strcpy(ch2,ch);
printf("Value of second string is: %s",ch2);
}
Output:
Value of second string is: javatpoint
strcat()
The strcat(first_string, second_string) function concatenates two strings and result is
returned to first_string.
#include <stdio.h>
void main()
{
char ch[10]={'h', 'e', 'l', 'l', 'o', '\0'};
char ch2[10]={'c', '\0'};
strcat(ch,ch2);
printf("Value of first string is: %s",ch);
}
Output:
Value of first string is: helloc
strcmp()
The strcmp(first_string, second_string) function compares two string and returns 0 if
both strings are equal.
Here, we are using gets() function which reads string from the console.
#include <stdio.h>
void main()
{
char str1[20],str2[20];
printf("Enter 1st string: ");
gets(str1);//reads string from console
printf("Enter 2nd string: ");
gets(str2);
if(strcmp(str1,str2)==0)
printf("Strings are equal");
else
printf("Strings are not equal");
}
Output:
Enter 1st string: hello
Enter 2nd string: hello
Strings are equal
strrev()
The strrev(string) function returns reverse of the given string. Let's see a simple
example of strrev() function.
#include<stdio.h>
#include<conio.h>
void main(){
char str[20];
clrscr();
printf("Enter string: ");
gets(str);//reads string from console
printf("String is: %s",str);
printf("\nReverse String is: %s",strrev(str));
getch();
}
Output:
Enter string: javatpoint
String is: javatpoint
Reverse String is: tnioptavaj
*****
CHAPTER 5
POINTERS
Introduction:
Advantage of pointer
1) Pointer reduces the code and improves the performance, it is used to retrieving
strings, trees etc. and used with arrays, structures and functions.
2) We can return multiple values from function using pointer.
3) It makes you able to access any memory location in the computer's memory.
Usage of pointer
There are many usage of pointers in c language.
1) Dynamic memory allocation
In c language, we can dynamically allocate memory using malloc() and calloc()
functions where pointer is used.
2) Arrays, Functions and Structures
Pointers in c language are widely used in arrays, functions and structures. It reduces
the code and improves the performance.
Address Of Operator
The address of operator '&' returns the address of a variable. But, we need to use %u
to display the address of a variable.
#include <stdio.h>
#include <conio.h>
void main()
{
int number=50;
clrscr();
printf("value of number is %d, address of number is %u",number,&number);
getch();
}
Output
value of number is 50, address of number is fff4
Declaring a pointer
The pointer in c language can be declared using * (asterisk symbol).
int *a;//pointer to int
char *c;//pointer to char
example
An example of using pointers printing the address and value is given below.
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.
#include <stdio.h>
#include <conio.h>
void main()
{
int number=50;
int *p;
clrscr();
p=&number;//stores the address of number variable
printf("Address of number variable is %x \n",&number);
printf("Address of p variable is %x \n",p);
printf("Value of p variable is %d \n",*p);
getch();
}
Output
Address of number variable is fff4
Address of p variable is fff4
Value of p variable is 50
NULL Pointer
A pointer that is not assigned any value but NULL is known as NULL pointer. If you
don't have any address to be specified in the pointer at the time of declaration, you can
assign NULL value. It will a better approach.
int *p=NULL;
In most the libraries, the value of pointer is 0 (zero).
Pointer Arithmetic in C
In C pointer holds address of a value, so there can be arithmetic operations on the
pointer variable. Following arithmetic operations are possible on pointer in C language:
o Increment
o Decrement
o Addition
o Subtraction
o Comparison
Incrementing Pointer in C
Incrementing a pointer is used in array because it is contiguous memory location.
Moreover, we know the value of next location.
Increment operation depends on the data type of the pointer variable. The formula of
incrementing pointer is given below:
new_address= current_address + i * size_of(data type)
32 bit
For 32 bit int variable, it will increment to 2 byte.
64 bit
For 64 bit int variable, it will increment to 4 byte.
Decrementing Pointer in C
Like increment, we can decrement a pointer variable. The formula of decrementing
pointer is given below:
new_address= current_address - i * size_of(data type)
32 bit
For 32 bit int variable, it will decrement to 2 byte.
64 bit
For 64 bit int variable, it will decrement to 4 byte.
example of decrementing pointer variable on 64 bit OS.
#include <stdio.h>
void main()
{
int number=50;
int *p;//pointer to int
p=&number;//stores the address of number variable
C Pointer Addition
We can add a value to the pointer variable. The formula of adding value to pointer is
given below:
new_address= current_address + (number * size_of(data type))
32 bit
For 32 bit int variable, it will add 2 * number.
64 bit
For 64 bit int variable, it will add 4 * number.
Let's see the example of adding value to pointer variable on 64 bit OS.
#include <stdio.h>
void main()
{
int number=50;
int *p;//pointer to int
p=&number;//stores the address of number variable
printf("Address of p variable is %u \n",p);
p=p+3; //adding 3 to pointer variable
printf("After adding 3: Address of p variable is %u \n",p);
}
Output
Address of p variable is 3214864300
After adding 3: Address of p variable is 3214864312
As you can see, address of p is 3214864300. But after adding 3 with p variable, it is
3214864312 i.e. 4*3=12 increment. Since we are using 64 bit OS, it increments 12.
But if we were using 32 bit OS, it were incrementing to 6 only i.e. 2*3=6. As integer
value occupies 2 byte memory in 32 bit OS.
C Pointer Subtraction
Like pointer addition, we can subtract a value from the pointer variable. The formula of
subtracting value from pointer variable is given below:
new_address= current_address - (number * size_of(data type))
32 bit
For 32 bit int variable, it will subtract 2 * number.
64 bit
For 64 bit int variable, it will subtract 4 * number.
Let's see the example of subtracting value from pointer variable on 64 bit OS.
#include <stdio.h>
void main()
{
int number=50;
int *p;//pointer to int
p=&number;//stores the address of number variable
printf("Address of p variable is %u \n",p);
p=p-3; //subtracting 3 from pointer variable
printf("After subtracting 3: Address of p variable is %u \n",p);
}
Output
Address of p variable is 3214864300
After subtracting 3: Address of p variable is 3214864288
You can see after subtracting 3 from pointer variable, it is 12 (4*3) less than the
previous address value.
malloc() function
The malloc() function allocates single block of requested memory.
It doesn't initialize memory at execution time, so it has garbage value initially.
It returns NULL if memory is not sufficient.
The syntax of malloc() function is given below:
ptr=(cast-type*)malloc(byte-size)
Let's see the example of malloc() function.
#include <stdio.h>
#include <stdlib.h>
void main()
{
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf("Sum=%d",sum);
free(ptr);
}
Output:
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
calloc() function
The calloc() function allocates multiple block of requested memory.
It initially initialize all bytes to zero.
It returns NULL if memory is not sufficient.
The syntax of calloc() function is given below:
ptr=(cast-type*)calloc(number, byte-size)
Let's see the example of calloc() function.
#include <stdio.h>
#include <stdlib.h>
void main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf("Sum=%d",sum);
free(ptr);
}
Output:
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
realloc() function
If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by
realloc() function. In short, it changes the memory size.
Let's see the syntax of realloc() function.
ptr=realloc(ptr, new-size)
free() function
The memory occupied by malloc() or calloc() functions must be released by calling
free() function. Otherwise, it will consume memory until program exit.
Let's see the syntax of free() function.
free(ptr)
int arr[5]={ 1, 2, 3, 4, 5 };
Assuming that the base address of arr is 1000 and each integer requires two bytes,
the five elements will be stored as follows
Here variable arr will give the base address, which is a constant pointer pointing to the
element, arr[0]. Therefore arr is containing the address of arr[0] i.e 1000. In short,
arr has two purpose- it is the name of an array and it acts as a pointer pointing
towards the first element in the array.
arr is equal to &arr[0] // by default
We can declare a pointer of type int to point to the array arr.
int *p;
p = arr;
or p = &arr[0]; //both the statements are equivalent.
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
As studied above, 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;
int a[5] = {1, 2, 3, 4, 5};
int *p = a; // same as int*p = &a[0]
for (i=0; i<5; i++)
{
printf("%d", *p);
p++;
}
In the above program, the pointer *p will print all the values stored in the array one by
one. We can also use the Base address (a in above case) to act as pointer and print all
the values.
Array of Pointers
We can also have array of pointers. Pointers are very helpful in handling character
array with rows of varying length.
char *name[3]={
"Adam",
"chris",
"Deniel"
};
//Now see same array without using pointer
char name[3][20]= {
"Adam",
"chris",
"Deniel"
};
In the second approach memory wastage is more, hence it is prefered to use pointer in
such cases.
Pointer to Function:
C programming allows passing a pointer to a function. To do so, simply declare the
function parameter as a pointer type.
Following is a simple example where we pass an unsigned long pointer to a function
and change the value inside the function which reflects back in the calling function −
#include <stdio.h>
#include <time.h>
int main () {
return 0;
}
********
CHAPTER 6
STRUCTURES & UNION
Introduction:
Structure in c language is a user defined datatype that allows you to hold different type
of elements.
Each element of a structure is called a member.
It works like a template in C++ and class in Java. You can have different type of
elements in it.
It is widely used to store student information, employee information, product
information, book information etc.
Defining structure
The struct keyword is used to define structure. Let's see the syntax to define structure
in c.
struct structure_name
{
data_type member1;
data_type member2;
data_type memeberN;
};
Let's see the example to define structure for employee in c.
struct employee
{ int id;
char name[50];
float salary;
};
Here, struct is the keyword, employee is the tag name of
structure; id, name and salary are the members or fields of the structure. Let's
understand it by the diagram given below:
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;
#include <stdio.h>
#include <string.h>
struct employee
{ int id;
char name[50];
}e1; //declaring e1 variable for structure
int main( )
{
//store first employee information
e1.id=101;
strcpy(e1.name, "Sonoo Jaiswal");//copying string into char array
//printing first employee information
printf( "employee 1 id : %d\n", e1.id);
printf( "employee 1 name : %s\n", e1.name);
return 0;
}
Output:
employee 1 id : 101
employee 1 name : Sonoo Jaiswal
Array of Structures in C
There can be array of structures in C programming to store many information of
different data types. The array of structures is also known as collection of structures.
Let's see an 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;
struct student st[5];
clrscr();
printf("Enter Records of 5 students");
for(i=0;i<5;i++)
{
printf("\nEnter Rollno:");
scanf("%d",&st[i].rollno);
printf("\nEnter Name:");
scanf("%s",&st[i].name);
}
printf("\nStudent Information List:");
for(i=0;i<5;i++)
{
printf("\nRollno:%d, Name:%s",st[i].rollno,st[i].name);
}
getch();
}
Output:
Enter Records of 5 students
Enter Rollno:1
Enter Name:Sonoo
Enter Rollno:2
Enter Name:Ratan
Enter Rollno:3
Enter Name:Vimal
Enter Rollno:4
Enter Name:James
Enter Rollno:5
Enter Name:Sarfraz
Union
Like structure, Union in c language is a user defined datatype that is used to hold
different type of elements.
But it doesn't occupy sum of all members size. It occupies the memory of largest
member only. It shares memory of largest member.
Defining union
The union keyword is used to define union. Let's see the syntax to define union in c.
union union_name
{
data_type member1;
data_type member2;
.
data_type memeberN;
};
Let's see the example to define union for employee in c.
union employee
{ int id;
char name[50];
float salary;
};
******