0% found this document useful (0 votes)
173 views45 pages

C Unit 1

The document discusses the basics of C programming, including programming paradigms, the structure of a C program, data types, and storage classes. It defines imperative, structured, object-oriented, declarative, functional, and procedural programming paradigms. It describes the typical sections of a C program like documentation, pre-processor directives, definitions, main function, and sub-programs. It also explains basic data types in C like integer, float, double, character, and void, as well as derived data types like arrays and pointers. Storage classes are discussed as defining the scope and lifetime of variables.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
173 views45 pages

C Unit 1

The document discusses the basics of C programming, including programming paradigms, the structure of a C program, data types, and storage classes. It defines imperative, structured, object-oriented, declarative, functional, and procedural programming paradigms. It describes the typical sections of a C program like documentation, pre-processor directives, definitions, main function, and sub-programs. It also explains basic data types in C like integer, float, double, character, and void, as well as derived data types like arrays and pointers. Storage classes are discussed as defining the scope and lifetime of variables.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 45

UNIT I -BASICS OF C PROGRAMMING

Introduction to programming paradigms - Structure of C program - C programming: Data Types –Storage


classes - Constants – Enumeration Constants - Keywords – Operators: Precedence and Associativity -
Expressions - Input/ Output statements, Assignment statements – Decision making statements - Switch
statement - Looping statements – Pre-processor directives - Compilation process

Introduction to programming paradigms :


A programming paradigms are a way to classify programming languages based on their features. Languages
can be classified into multiple paradigms
1. Imperative programming paradigms
2. Structured programming paradigms
3. Object oriented programming paradigms
4. Declarative programming paradigms
5. Functional programming paradigms
6. Procedural programming paradigms
Imperative programming paradigms:
It consist of step-by-step instructions which shows how the computation take place .Each step affects
the global state of the computation. In this, control flow is explicit.
Structured programming paradigms:
It is a kind of imperative programming where control flow is defined by nested loops, conditional
and subroutines.
Object oriented programming paradigms:
Object oriented programming is a programming paradigm based on the concept of objects, which
may contain data in the form of fields, known as attributes
Declarative programming paradigms:
Control flow in declarative programming is implicit. The programmer states only what the result
should look like, not how to obtain it.
Functional programming paradigms:
Control flow is expressed by combining function calls, rather than by assigning values to variables
Procedural programming paradigms:
This paradigm includes imperative programming with procedural calls

STRUCTURE OF A C PROGRAM
In general, a structure of C program is composed of the following sections:

Documentation Section

Pre-processor directives

Definition Section and Global declarations

main() function section


{
Structure of a Declaration part
C Executable part
Program }
Sub Program Section
{
Body of the Sub
}

Documentation Section:

1 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


It includes a set of comment lines giving information such as name of the program, purpose of the
program and other details.
Comments:
Comments are used to convey a message and used to increase the readability of a program. They are
not processed by the compiler.
There are two types of comments:
1. Single line comment
2. Multi line comment
Single line comment
A single line comment starts with two forward slashes (//) and is automatically terminated with the
end of the line.
E.g. //First C program
Multi-line comment
A multi-line comment starts with /* and terminates with */.A multi-line comment is used when
multiple lines of text are to be commented.
E.g. /* This program is used to find
Area of the Circle */

Preprocessor Directive section


 The pre-processor statement begins with # symbol and is also called the pre-processor directive.
 These statements instruct the compiler to include C pre-processors such as header files and symbolic
constants before compiling the C program.
 The pre-processor directive is terminated with a new line character and not with a semicolon.
 They are executed before the compiler compiles the source code.
 Some of the pre-processor statements are listed below:
(i)Header files
#include<stdio.h> - to be included to use standard I/O functions : prinf(),scanf()
#include<math.h> -to be included to use mathematical functions :eg)sqrt()
(ii)Symbolic constants
#define PI 3.1412
#define TRUE 1

Global declaration Section


 Variables which are declared before the main() function are called as global variables.
 Global variables are variables that are used in more than one function.
Example:
int b=5;
void main()
{
}

Function Section
 This section is compulsory. This section can have one or more functions. Every program written in C
language must contain main () function.
 The execution of every C program always begins with the function main ().
 The body of the function consists of a set of statements enclosed within curly brackets commonly
known as braces.
The statements are of two types.

Declaration Part:
These are declaration statements, which declares the entire variables used. Variable initialization is
also coming under these statements.

2 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


Executable Part :
Statements following the declaration statements are used to perform various tasks. For example
printf function call statement.
Non-executable statements are written first and then executable statements are written

E.g. C Program

Line 1: // First C program


Line2: #include<stdio.h>
Line3: main()
Line4: {
Line5 Printf(“Hello”);
Line6 }

Line1 is a comment; Line 2 is a preprocessor directive. Line3 is a header of the function main. Line 4, 5, 6
form the body of main function.

Example Program:
/*Addition of two numbers*/ Documentation Section
#include<stdio.h> Pre-processor directives
#define A 10 Definition Section
int c; Global declarations
int sum(int,int);
main() Main() functions
{
int b;
printf(“Emter the value for B:”);
scanf(“%d”,&b); Execution Part
c=sum(b);
printf(“\n Answer=%d”,c);
getch();
}
int sum(int y)
{
c=A+Y; Sub Program
return(c);
}

PROGRAMMING RULES
1. All statements should be written in lower case letters.
2. Upper case letters are only used for symbolic constants.
3. Blank spaces cannot be used while declaring a variable, keyword, constant and function.
4. The programmer can write the statement anywhere between the two braces following the declaration
part.
5. The user can also write one or more statements in one line by separating semicolon (;).

Ex:
a=b+c;
d=b*c;
or
a=b+c; d=b*c;
The opening and closing braces should be balanced. For example, if opening braces are four, then closing
braces should also be four.

3 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


DATA TYPES:
Data types specifies the type and size of data used in the program.In c language, data types are classified as
1. Basic data type(primitive)
2. Derived data type
3. User defined data type

Primitive data type:


Primitive data types are the inbuilt data types .The following primitive data types are available in c
language
Data type Description Keyword Syntax Size
Integer Used to declare the whole int int variablename; 2 bytes
number without decimal int a;
Float Used to declare the float float variablename; 4 bytes
decimal numbers with float a;
single precision
Double Used to store floating double double variablename; 8 bytes
point number with double
precision
Character Holds a single character char char variablename; 1 byte
void Has no value and it is
used to specify the type of
function or what it returns

Type Modifier:
Type modifier is used to alter their range and storage space to fit for various requirements. Type qualifiers
are
 short
 long
 signed
 unsigned

4 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


Derived data types:
Data types that are derived from basic data types are called as derived data types. It adds some functionality
to the basic data types. Derived data types in c are
 Arrays
 Pointers

Array Array is a collection of homogenous/similar type of data, stored in contiguous


memory location. There are two types of array
1. Single dimensional array
2. Multi dimensional array

Pointer Pointer is a variable which stores the address of the another variable.

User defined data type:


User defined data types are used to define their identifier that would represent an existing data type.Derived
data types available in c are
 Structure
 Union
 Enum

Structure is a collection of variables of different data types. ”struct” is a


Structure
keyword that used to define a structure
Union is used to store different data types in the same memory location
Union
Enumeration (enum) is a user defined data type which is used to assign
names to integral constants
Enum Syntax:
enum variablename{enumlist}

STORAGE CLASS:
Storage classes are used to define scope and life time of a variable. There are four storage classes in C
programming.
 auto
 extern
 static
 register
Storage Storage Default Scope Life-time
Classes Place Value

auto RAM Garbage Value Local Within function


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
register Register Garbage Value Local Within function

5 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


The auto storage class:
 Automatic variables are also called as auto variables, which are defined inside a function.
 It is a default storage class if the variable is declared inside the block
 Auto variables are stored in main memory.
 Variables has automatic (local) lifetime.
 Auto variables are not implicitly initialized.
 Auto variables have no linkage.
Example:
#include<stdio.h>
void main()
{
auto int a=10;
printf(“a=%d”,a);
{ int b=20;
printf(“b=%d”,b);
}
printf(“Here b is not visible\n”);
printf(“a=%d”,a);
}
Output:
a=10
b=20
Here b is not visible
a=10

2. The register storage class


 The register variable allocates memory in register than RAM. Its size is same of register size
.Register variables can be accessed faster than others
 Variables are stored in CPU.
 Variables have automatic (local) lifetime.
 Register variables are not implicitly initialized.
 Register variables have no linkage.
 Register variables are used for loop counter to improve the performance of a program.

Example: # include<stdio.h>
void main()
{
register int a=200;
printf(“a=%d”,a);
}
Output:
a=200

3. The static storage class


 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.
 Static variables have global lifetime.
6 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI
 Static variables are stored in the main memory.
 Static variables can be declared in local scope as well as in the global scope.
 Static variables are implicitly initialized.
 Static variables will have internal linkage.
 The value of static variables persists between the function calls. Last change made in the value of
static variable remains throughout the program execution.
Ex:
# include<stdio.h>
void fun(int);
void main()
{
int i=0;
for(i=0;i<5;i++)
{
fun(i); } }
void fun(int i)
{ static int a=10;
a++;
printf(“%d”,a); }
Output: 11 12 13 14 15

4. The extern storage class


 Variables that are available to all functions are called external or global variables.
 External variables are stored in main memory.
 External variables have static (global) lifetime.
 External variables have external linkage.
 External variables are implicitly initialized to 0.

Example:
#INCLUDE<STDIO.H>
extern int v=10;
void call1()
void main()
{ call1();
printf(“In main v=%d”,v);
}
void call1()
{ printf(“In call1() v=%d”,v);
}
Output:
In main v=10
In call1( ) v=10
Since v is a external variable it is visible and accessed in all functions.

7 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


Constants
Constants provide a way to define a variable which cannot be modified during the execution of a
program. Constants can be defined by placing the keyword const in front of any variable declaration.
Constants are classified as:
 Literal constants
 Qualified constants
 Symbolic constants

Literal constants
Literal constant or just literal denotes a fixed value, which may be an integer, floating point number,
character or a string.
Literal constants are of the following types.
1. Integer Literal constant
2. Floating point Literal constant
3. Character Literal constant
4. String Literal constant

Integer Literal constant


Integer Literal constants are integer values like -1, 2, 8 etc. It can be represent decimal, octal or
hexadecimal values. The rules for writing integer literal constant are:
An Integer Literal constant must have at least one digit
1. It should not have any decimal point
2. It can be either positive or negative.
3. No special characters and blank spaces are allowed.
4. A number without a sign is assumed as positive.
5. Octal constants start with 0.
6. Hexadecimal constant start with 0x or 0X
Floating point Literal constant
Floating point Literal constants are values like -23.1, 12.8, 4e8 etc.. It can be written in a fractional
form or in an exponential form.
The rules for writing Floating point Literal constants in a fractional form:
1. A fractional floating point Literal constant must have at least one digit.
2. It should have a decimal point.
3. It can be either positive or negative.
4. No special characters and blank spaces are allowed.
The rules for writing Floating point Literal constants in an exponential form:
1. A Floating point Literal constants in an exponential form has two parts: the mantissa part and the
exponent part. Both are separated by e or E.
2. The mantissa part can be either positive or negative. The default sign is positive.
3. The mantissa part should have at least one digit.
4. The mantissa part can have a decimal point.
5. The exponent part should have at least one digit
6. The exponent part cannot have a decimal point.
7. No special characters and blank spaces are allowed.
Character Literal constant
A Character Literal constant can have one or at most two characters enclosed within single quotes. E.g, ‘A’ ,
‘a’ , ‘ n ‘.
It is classified into:
1. Printable character literal constant
2. Non-Printable character literal constant.
Printable character literal constant
All characters except quotation mark, backslash and new line characters enclosed within single
quotes form a Printable character literal constant. Ex: ‘A’ , ‘#’

8 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


Non-Printable character literal constant.
Non-Printable character literal constants are represented with the help of escape sequences. An
escape sequence consists of a backward slash (i.e. \) followed by a character and both enclosed within single
quotes.
String Literal constant
A String Literal constant consist of a sequence of characters enclosed within double quotes. Each string

literal constant is implicitly terminated by a null character.


E.g. “ABC”
Qualified constants:
Qualified constants are created by using const qualifier.
E.g. const char a = ‘A’
The usage of const qualifier places a lock on the variable after placing the value in it. So we can’t change the
value of the variable a

Qualified constants:
Qualified constants are created by using const qualifier. E.g. const char a = “A‟ The usage of const
qualifier places a lock on the variable after placing the value in it. So we can’t change the value of the
variable a

Symbolic constants
Symbolic constants are created with the help of the define pre-processor directive. For ex #define
PI= 3.14 defines PI as a symbolic constant with the value 3.14. Each symbolic constant is replaced by its
actual value during the pre-processing stage.

2 ways to define constant in C


There are two ways to define constant in C programming.
1. const keyword
2. #define preprocessor
1) C const keyword
The const keyword is used to define constant in C programming.
Example: const float PI=3.14;
Now, the value of PI variable can't be changed.
#include<stdio.h>
int main(){
const float PI=3.14;
printf("The value of PI is: %f",PI);
return 0;
}
Output:
The value of PI is: 3.140000
If you try to change the value of PI, it will render compile time error.
#include<stdio.h>

9 Prepared by, A.LAURO EUGIN BRITTO AP/CSE , RVSETGI


int main(){
const float PI=3.14;
PI=4.5;
printf("The value of PI is: %f",PI);
return 0;
}
Output:
Compile Time Error: Cannot modify a const object

2) C #define preprocessor
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>
#define PI 3.14
main() {
printf("%f",PI);
}
Output:
3.140000

Enumeration Constants:
An enumeration is a user-defined data type or constant. Enumeration is achieved by using the
keyword enum.
The enumeration type is an integral data type.
SYNTAX:
enum enum_name{ const1,const2, ... constN };

It is start with 0 (zero) by default and value is incremented by 1for the sequential
identifiers in the list. If constant one value is not initialized then by default sequence will be start
from zero and next to generated value should be previous constant value one.
Example:
#include <stdio.h>
main()
{
enum Day{ Monday =1, Tuesday, Wednesday, Thursday};
enum { A= 3, B , C , Z = 400, X, Y };
printf("Wednesday = %d\n", Wednesday);
printf("B = %d \t C = %d\n", B,C);
printf("X = %d \t Y = %d\n", X,Y);
printf("Thursday/Tuesday = %d\n", Thursday/Tuesday);
}

10 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Output:
Wednesday=3
B=4 C=5
X=401 Y=402
Thursday/Tuesday=2

Example: Enumeration Type


#include <stdio.h>
enum week { sunday, monday, tuesday, wednesday, thursday, friday, saturday };
int main()
{
enum week today;
today = wednesday;
printf("Day %d",today+1);
return 0;
}
Output
Day 4

Keywords:
Keyword is a reserved word that has a particular meaning in the programming language. The
meaning of a keyword is predefined. It can‟t be used as an identifier

Operators: Precedence and Associativity – Expressions:


An expression is a sequence of operators and operands that specifies computation of a value.
For e.g, a=2+3 is an expression with three operands a,2,3 and 2 operators = & +

Operands
An operand specifies an entity on which an operation is to be performed. It can be a variable name, a
constant, a function call.
E.g: a=2+3 Here a, 2 & 3 are operands

Operator
An operator is a symbol that is used to perform specific mathematical or logical manipulations.
For e.g, a=2+3 Here = & + are the operators

Simple Expressions & Compound Expressions


11 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
An expression that has only one operator is known as a simple expression.
E.g: a+2
An expression that involves more than one operator is called a compound expression.
E.g: b=2+3*5

Precedence of operators
The precedence rule is used to determine the order of application of operators in evaluating sub expressions.
Each operator in C has a precedence associated with it.
The operator with the highest precedence is operated first.

Associativity of operators
The associativity rule is applied when two or more operators are having same precedence in the sub
expression.
An operator can be left-to-right associative or right-to-left associative.

Category Operators Associativity Precedence


Parentheses, braces () [] Left to right Level-1
Unary +, -, !, ~, ++, - -, &, sizeof Right to left Level-2
Multiplicative *, /, % Left to right Level-3
Addition/subtraction +, - Left to right Level-4
Shift << , >> Left to right Level-5
Relational <, <=, >, >= Left to right Level-6
Bitwise AND & Left to right Level-7
Bitwise OR ^ Left to right Level-8
Bitwise inclusive Level-9
| Left to right
OR
Logical AND && Left to right Level-10
Logical OR || Left to right Level-11
Ternary ?: Right to left Level-12
Assignment = += -= *= /= Right to left Level-13
Comma , Left to right Level-14

Rules for evaluation of expression


• First parenthesized sub expressions are evaluated first.
• If parentheses are nested, the evaluation begins with the innermost sub expression.
• The precedence rule is applied to determine the order of application of operators in evaluating sub

12 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
expressions
The associability rule is applied when two or more operators are having same precedence in the sub
expression.

Classification of Operators
The operators in C are classified on the basis of
 The number of operands on which an operator operates
 The role of an operator

Classification based on Number of Operands


Types:
Unary Operator: A unary operator operates on only one operand. Some of the unary operators are,

Operator Meaning
- Minus
++ Increment
-- Decrement
& Address- of operator
sizeof sizeof operator

Binary Operator: A binary operator operates on two operands. Some of the binary operators are,

Operator Meaning
+ Addition
- Subtraction
* Multiplication
/ Division
% Modular
Division
&& Logical AND

Ternary Operator
A ternary operator operates on 3 operands. Conditional operator (i.e. ?:) is the ternary operator.

Based upon their role, operators are classified as,


1. Arithmetic Operators
2. Relational Operators
3. Logical Operators
4. Bitwise Operators
5. Assignment Operators
6. Conditional operator (?:)
7. Miscellaneous/special Operators

Arithmetic Operators
They are used to perform arithmetic operations like addition, subtraction, multiplication, division etc.

A=10 & B=20

13 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Operator Description Example
+ Adds two operands A + B = 30
- Subtracts second operand from the first A - B = -10
* Multiplies both operands A * B = 200
/ The division operator is used to find the quotient. B/A=2
% Modulus operator is used to find the remainder B%A = 0
Unary plus & minus is used to indicate the algebraic
+,- +A, -A
sign of a value.

/* Program to demonstrate the working of arithmetic operators in C. */


#include <stdio.h>
int 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);
return 0;}

output
a+b=13
a-b=5
a*b=36
a/b=2
Remainder when a divided by b=1

Increment operator
 The operator ++ adds one to its operand.
 ++a or a++ is equivalent to a=a+1
Prefix increment (++a) operator will increment the variable BEFORE the expression is evaluated.
Postfix increment operator (a++) will increment AFTER the expression evaluation.

E.g.
c=++a. Assume a=2 so c=3 because the value of a is incremented and then it is assigned to c.
d=b++ Assume b=2 so d=2 because the value of b is assigned to d before it is incremented.

Decrement operator
 The operator – subtracts one from its operand.
 --a or a-- is equivalent to a=a+1
Prefix decrement (--a) operator will decrement the variable BEFORE the expression is evaluated.
Postfix decrement operator (a--) will decrement AFTER the expression evaluation.

14 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
E.g.
c=--a. Assume a=2 so c=1 because the value of a is decremented and then it is assigned to c.
d=b-- Assume b=2 so d=2 because the value of b is assigned to d before it is decremented.

2. Relational Operators

Relational operators are used to compare two operands. There are 6 relational operators in C, they are

Operator Meaning of Operator Example

== Equal to 5==3 returns false (0)


> Greater than 5>3 returns true (1)
< Less than 5<3 returns false (0)
!= Not equal to 5!=3 returns true(1)
>= Greater than or equal to 5>=3 returns true (1)
<= Less than or equal to 5<=3 return false (0)

If the relation is true, it returns value 1 and if the relation is false, it returns value 0.
An expression that involves a relational operator is called as a condition. For e.g a<b is a condition.

Sample program
#include<stdio.h>
main()
{
int a=10, b=5;
printf(“a>b is %d, a>b);
printf(“a>=b is %d, a>=b);
printf(“a<b is %d, a<b);
printf(“a<=b is %d, a<=b);
printf(“a==b is %d, a==b);
printf(“a!=b is %d, a!=b);
}

Output
a>b is 1
a>=b is 1
a<b is 0
a<=b is 0
a==b is 0
a!=b is 1

3. Logical Operators
Logical operators are used to logically relate the sub-expressions. There are 3 logical operators in C,
they are
If the relation is true, it returns value 1 and if the relation is false, it returns value 0 .

15 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Meaning of
Operator Operator Example Description

Logial If c=5 and d=2 then,((c==5) && It returns true when both
&& AND (d>5)) returns false. conditions are true
If c=5 and d=2
It returns true when at-least
Logical then, ((c==5) || (d>5)) returns
one of the condition is true
|| OR true.
Logical If c=5 then, !(c==5) returns It reverses the state of the
! NOT false. operand

Truth tables of logical operations


condition 1 condition 2 NOT X X AND Y X OR Y
(e.g., X) (e.g., Y) (~X) ( X && Y ) ( X || Y )
False false true false false
False true true false true
true false false false true
true true false true true
Sample Program
// program using logical operators
#include<stdio.h>
main()
{
int a=20,b=10,c=15;
printf(“logical AND is %d”,((a>b)&&(a<c));
printf(“logical OR is %d”,((a>b)||(a<c));
printf(“logical NOT is %d”,!(a>b));
}

Output
logical AND is 1
logical OR is 1
logical NOT is 0

4. Bitwise Operators
C language provides 6 operators for bit manipulation. Bitwise operator operates on the individual
bits of the operands. They are used for bit manipulation.

Operators Meaning of operators

& Bitwise AND


| Bitwise OR
^ Bitwise exclusive OR
~ Bitwise complement
<< Shift left
>> Shift right
16 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
Truth tables

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

E.g.
12 = 00001100 (In Binary)
25 = 00011001 (In Binary)

Bit Operation of 12 and 25


00001100
& 00011001
________
00001000 = 8 (In decimal)

Bitwise OR Operation of 12 and 25


00001100
| 00011001
________
00011101 = 29 (In decimal)

3 << 2 (Shift Left)


0011
1100=12

3 >> 1 (Shift Right)


0011
0001=1

5. Assignment Operators
To assign a value to the variable assignment operator is used.

Operators Example Explanation


10 is assigned to variable
Simple assignment operator = sum=10
sum
+= sum+=10 This is same as sum=sum+10
Compound assignment -= sum-=10 sum = sum-10
operators *= sum*=10 sum = sum*10
Or /+ sum/=10 sum = sum/10
Shorthand assignment %= sum%=10 sum = sum%10
operators &= sum&=10 sum = sum&10
^= sum^=10 sum = sum^10

17 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
E.g.
var=5 //5 is assigned to var
a=c; //value of c is assigned to a

6.Conditional Operator
 It is the only ternary operator available in C.
 Conditional operator takes three operands and consists of two symbols ? and : .
 Conditional operators are used for decision making in C.
Syntax :
(Condition? true_value: false_value);
For example:
c=(c>0)?10:-10;
If c is greater than 0, value of c will be 10 but, if c is less than 0, value of c will be -10.

Example of conditional operator


#include <stdio.h>
int main(){
int a-8,b=10,op1,op2;
op1=a<b?a:b;
printf(“The option1=%d”,op1);
op1=a>b?a:b;
printf(“The option2=%d”,op2);
}

Output
The option1=8
The option2=10

7.Miscellaneous/Special Operators
Other operators available in C are
() Function Call Operator Used in functions
[] Array subscript Operator Used in declaring an array
Direct member access operator Used to access a member of a struct
.
(i.e. . dot operator)
Indirect member access operator Used to access a member of a struct which is referenced by
->
(i.e. -> arrow operator) the pointer
It is used to join multiple expressions together and to separate
the elements like variables and constants
, Comma operator E.g.
int i , j;
i=(j=10,j+20);
The sizeof operator returns the size of its operand in bytes.
Size() Size of operator Example : size of (char) will give us 1.
sizeof(a), where a is integer, will return 2.
& Address-of operator It specifies the address of the variable

Managing Input and Output operations


The I/O functions are classified into two types:
 Formatted Functions
 Unformatted functions
18 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
Input and Output functions

Formatted Functions Unformatted Functions

printf() getch()
getche()
scanf() getchar()
gets()
putch()
putchar()
puts()

Unformatted Functions:
They are used when I/P & O/P is not required in a specific format.
C has 3 types I/O functions.
 Character I/O
 String I/O
 File I/O
a) Character I/O:
1. getchar() This function reads a single character data from the standard input.
(E.g. Keyboard)
Syntax :
variable_name=getchar();
eg:
char c;
c=getchar();

2. putchar() This function prints one character on the screen at a time.


Syntax :
putchar(variable name);
eg
char c=‘C’;
putchar(c);

Example Program
#include <stdio.h>
main()
{
int i;
char ch;
ch = getchar();
putchar(ch);
}
Output:
A
A

19 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
3. getch() and getche() : getch() accepts only a single character from keyboard. The character entered
through getch() is not displayed in the screen (monitor).
Syntax
variable_name = getch();
Like getch(), getche() also accepts only single character, but getche() displays the entered character in the
screen.
Syntax
variable_name = getche();
4 putch(): putch displays any alphanumeric characters to the standard output device. It displays only one
character at a time.
Syntax
putch(variable_name);
b) String I/O:
1.gets() – This function is used for accepting any string through stdin (keyboard) until enter key is pressed.
Syntax
gets(variable_name);
2. puts() – This function prints the string or character array.
Syntax
puts(variable_name);
3. cgets()- This function reads string from the console.
Syntax
cgets(char *st);
It requires character pointer as an argument.
4. cputs()- This function displays string on the console.
Syntax
cputs(char *st);

Example Program
void main()
{
char ch[30];
clrscr();
printf(“Enter the String : “);
gets(ch);
puts(“\n Entered String : %s”,ch);
puts(ch);
}
Output:
Enter the String : WELCOME
Entered String : WELCOME

Formatted Input & Output Functions


The formatted I/O functions allow programmers to specify the type of data and the way in which it
should be read in or written out. The standard library functions scanf( ) & printf( ) are used.
O/P function printf( )
The printf( ) function is used to print data of different data types in a specified format.

20 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
General Form

printf(“Control String”, var1, var2, …);

Control String may contain


 Ordinary characters
 Conversion Specifier Field (or) Format Specifiers
 They denoted by %, contains conversion codes like %c, %d etc. and the optional modifiers width,
flag, precision, size.
Conversion Codes
Data type Conversion Symbol
char %c
int %d
float %f
Unsigned octal %o
String %s

Width Modifier: It specifies the total number of characters used to display the value.

Precision: It specifies the number of characters used after the decimal point.
E.g:
printf(“ Number=%7.2f\n”,5.4321);
Width=7
Precession=2
Output: Number = 5.43(3 spaces added in front of 5)

Flag: It is used to specify one or more print modifications.


Flag Meaning
- Left justify the display
+ Display +Ve or –Ve sign of value
Space Display space if there is no sign
0 Pad with leading 0s

E.g:
printf(“Number=%07.2f\n”,5.4321)
Output:
Number=0005.4

Size: Size modifiers used in printf are,


Size modifier Converts To
l Long int
h Short int
L Long double
%ld means long int variable
%hd means short int variable

3. Control Codes
They are also known as Escape Sequences.
21 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
E.g:
Control Code Meaning
\n New line
\t Horizontal Tab
\b Back space
Input Function scanf( )
It is used to get data in a specified format. It can accept data of different data types.
Syntax
scanf(“Control String”, var1address, var2address, …);

Format String or Control String is enclosed in quotation marks. It may contain


1. White Space
2. Ordinary characters
3. Conversion Specifier Field
It is denoted by % followed by conversion code and other optional modifiers E.g: width, size.
Format Specifiers for scanf( )

Data type Conversion Symbol


char %c
int %d
float %f
string %s
E.g Program:
#include <stdio.h>
void main( )
{
int num1, num2, sum;
printf("Enter two integers: ");
scanf("%d %d",&num1,&num2);
sum=num1+num2;
printf("Sum: %d",sum);
}
Output
Enter two integers: 12 11
Sum: 23

Decision making statements - Switch statement – Looping statements


Decision making statements in a programming language help the programmer to transfer the control
from one part to other part of the program.
Flow of control: The order in which the program statements are executed is known as flow of control. By
default, statements in a c program are executed in a sequential order.
The default flow of control can be altered by using flow control statements. These statements are of two
types.
Selection-Conditional Branching

1.Branching

Jump-unconditional Branching
22 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
2.Iteration statements

Branching statements
Branching statements are used to transfer program control from one point to another.
There are 2 types of branching statements.
 Conditional Branching:- Program control is transferred from one point to another based on the
result of some condition
Eg) if, if-else, switch
 Unconditional Branching:- program control is transferred from one point to another without
checking any condition
Eg) goto, break, continue, return

a) Conditional Branching : Selection statements


Statements available in c are
1. The if statement
2. The if-else statement
3. The switch case statement
(i)The if statement
C uses the keyword if to execute a statement or set of statements when the logical condition is true.
Syntax:
if (test expression)
F
Statement;
Test
expres
T sion

Statement

 If test expression evaluates to true, the corresponding statement is executed.


 If the test expression evaluates to false, control goes to next executable statement.
 The statement can be single statement or a block of statements. Block of statements must be enclosed
in curly braces.

Example:
#include <stdio.h>
void main()
{
int n;
clrscr();
printf(“enter the number:”);
scanf(“%d”,&n);
if(n>0)
printf(“the number is positive”);
getch();
}
Output:
enter the number:50
23 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
the number is positive

(ii)The if-else statement


Syntax:
Test
if (test expression)
expression
Statement T; F
else
Statement F;

T F

 If the test expression is true, statementT will be executed. StatementT StatementF


 If the test expression is false, statementF will be executed.
 StatementT and StatementF can be a single or block of statements.

Example:1 Program to check whether a given number is even or odd.


#include <stdio.h>
void main()
{
int n,r;
clrscr();
printf(“Enter a number:”);
scanf(“%d”,&n);
r=n%2;
if(r==0)
printf(“The number is even”);
else
printf(“The number is odd”);
getch();
}
Output:
Enter a number:15
The number is odd

Example:2 To check whether the two given numbers are equal


#include <stdio.h>
void main()
{
int a,b;
clrscr();
printf(“Enter a and b:” );
scanf(“%d%d”,&a,&b);
if(a==b)
printf(“a and b are equal”);
else
printf(“a and b are not equal”);
getch();
}

24 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Output:
Enter a and b: 2 4
a and b are not equal

(iii) Nested if statement


If the body the if statement contains another if statement, then it is known as nested if statement
Syntax:
if (test expression) if (test expression)
if (test expression) {
statement;
(Or) if (test expression)
This nesting can be done up to any level. ….
statement;
else }
Syntax:
Statement F;
if (test expression1)
{
…..
if (test expression2)
{
….
if (test expression3)
{
….
if (test expression n)
}}}

This is known as if ladder

iv) Nested if-else statement


….
Here, the if body or else body of an if-else statement contains another if statement or if else statement
Syntax: ….
if (condition)
{ }
statement 1;
statement 2;
}
else
{
statement 3;else
if (condition)
Statement F;
statementnest;
statement 4;
}
Example:
Program for finding greatest of 3 numbers
#include<stdio.h>
void main()

25 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
{
int a,b,c;
printf(“Enter three numbers\n”);
scanf(“%d%d%d”,&a,&b,&c);
if(a>b)
{
if(a>c)
{
printf(“a is greatest”);
}}
else
{
if(b>c)
{
printf(“b is greatest”);
}
else
{
printf(“C is greatest”);
}}}
Output
Enter three numbers 2 4 6
C is greatest

v) Switch statement
It is a multi way branch statement.
It provides an easy & organized way to select among multiple operations depending upon some condition.
Execution
1. Switch expression is evaluated.
2. The result is compared with all the cases.
3. If one of the cases is matched, then all the statements after that matched case gets executed.
4. If no match occurs, then all the statements after the default statement get executed.
Switch ,case, break and default are keywords
Break statement is used to exit from the current case structure
Flowchart
switch(expression)

case: break
statement
constant 0

case : break
constant 1 statement

default
statement break

26 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
End of switch

Syntax

switch(expression)
{
case value 1:
program statement;
program statement;
……
break;
case value 2:
program statement;
Program statement;
……
break;

case value n:
program statement;
program statement;
……
break;
default:
program statement;
program statement;
}
Example1
#include <stdio.h>
void main()
{
char ch;
printf(“Enter a character\n”);
scanf(“%c”,&ch);
switch(ch)
{
case ‘A’:
printf(“you entered an A\n”);
break;
case ‘B’:
printf(“you entered a B\n”);
break;
default:
printf(“Illegal entry”);
break;
}
getch();
}
Output
Enter a character
A
You entered an A

27 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Example2
#include <stdio.h>
void main()
{
int n;
printf(“Enter a number\n”);
scanf(“%d”,&n);
switch(n%2)
{
case 0:printf(“EVEN\n”);
break;
case 1:printf(“ODD\n”);
break;
}
getch();
}

Output:
Enter a number
5
ODD

b)Unconditional branching statements/Jumping statements


i)The goto Statement
This statement does not require any condition. Here program control is transferred to another part of
the program without testing any condition.
Syntax:
goto label;

label is the position where the control is to be transferred.


Example:
#include <stdio.h>
void main()
{
printf(“www.”);
goto x;
y:
printf(“mail”);
goto z;

28 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
x:
printf(“yahoo”);
goto y;
z:
printf(“.com”);
getch();
}
Output: www.yahoomail.com

b)break statement
A break statement can appear only inside a body of , a switch or a loop
A break statement terminates the execution of the nearest enclosing loop or switch.
Syntax
break;

Example:1
#include<stdio.h>
void main()
{
int c=1;
while(c<=5)
{
if (c==3)
break;
printf(“\t %d”,c);
c++;
}
}

Output : 1 2

Example :2
#include<stdio.h>
void main()
{
int i;
for(i=0;i<=10;i++)
{
if (i==5)
break;

29 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
printf(“ %d”,i);
}
}
Output :1 2 3 4

iii) continue statement


A continue statement can appear only inside a loop.
A continue statement terminates the current iteration of the nearest enclosing loop.

Syntax:
continue;

Example :1
#include<stdio.h>
void main()
{
int c=1;
while(c<=5)
{
if (c==3)
continue;
printf(“\t %d”,c);
c++;
}
}
Output : 1 2 4 5

Example :2
#include<stdio.h>
main()
{
int i;
for(i=0;i<=10;i++)
{
if (i==5)
continue;
printf(“ %d”,i);
}
}

30 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Output :1 2 3 4 6 7 8 9 10

iv) return statement:


A return statement terminates the execution of a function and returns the control to the calling
function.
Syntax:

return;
(or)

return expression;

Iteration Statements (Looping Statements)


Iteration is a process of repeating the same set of statements again and again until the condition holds
true.
Iteration or Looping statements in C are:
1. for
2. while
3. do while
Loops are classified as
1. Counter controlled loops
2. Sentinel controlled loops
3. Counter controlled loops
The number of iterations is known in advance. They use a control variable called loop counter.
Also called as definite repetitions loop.
E.g:
For Sentinel controlled loops
 The number of iterations is not known in advance. The execution or termination of the loop depends
upon a special value called sentinel value.
 Also called as indefinite repetitions loop.

for loop
It is the most popular looping statement. It is a pre test loop
Syntax:
for(initialization;condition2;incrementing/updating)
{
Statements;
}

31 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
There are three sections in for loop.
 Initialization section – gives initial value to the loop counter.
 Condition section – tests the value of loop counter to decide whether to execute the loop or not.
 Manipulation section - manipulates the value of loop counter.

Execution of for loop


1. Initialization section is executed only once.
2. Condition is evaluated
3. If it is true, loop body is executed.
4. If it is false, loop is terminated
5. After the execution of loop, the manipulation expression is evaluated.
6. Steps 2 & 3 are repeated until step 2 condition becomes false.

Ex 1: Write a program to print 10 numbers using for loop


#include <stdio.h>
void main()
{
int i;
clrscr();
for(i=1;i<=10;i++)
{
printf(“%d”,i);
}
getch();
}
Output:
1 2 3 4 5 6 7 8 9 10

Ex2: To find the sum of n natural number. 1+2+3…+n


#include <stdio.h>
32 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
void main()
{
int n, i, sum=0;
clrscr();
printf(“Enter the value for n”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
sum=sum+i;
}
printf(“Sum=%d”, sum);
getch();
}
Output:
Enter the value for n
4
sum=10

2. while statement
They are also known as Entry controlled loops because here the condition is checked before the execution
of loop body.

Syntax:
while (expression)
{
statements;
}

Execution of while loop


1. Condition in while is evaluated
2. If it is true, body of the loop is executed.
3. If it is false, loop is terminated
4. After executing the while body, program control returns back to while header.
5. Steps a & b are repeated until condition evaluates to false.
6. Always remember to initialize the loop counter before while and manipulate loop counter inside the
body of while.

Ex 1: Write a program to print 10 numbers using while loop


#include <stdio.h>
void main()
{
int i=1;
clrscr();
33 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
while (num<=10)
{
printf (“%d”,i);
i=i+1;
}
getch();
}
Output:
1 2 3 4 5 6 7 8 9 10

Ex2: To find the sum of n natural number. 1+2+3…+n


#include <stdio.h>
void main()
{
int n, i=1, sum=0;
clrscr();
printf(“Enter the value for n”);
scanf(“%d”,&n);
while(i<=n)
{
sum=sum+i;
i=i+1;
}
printf(“Sum=%d”, sum);
getch();
}
Output:
Enter the value for n
4
Sum=10

3. do while statement
They are also known as Exit controlled loops because here the condition is checked after the execution of
loop body.
Syntax:
do
{
statements;
}
while(expression);

34 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Execution of do while loop
1. Body of do-while is executed.
2. After execution of do-while body, do-while condition is evaluated
3. If it is true, loop body is executed again and step b is repeated.
4. If it is false, loop is terminated
5. The body of do-while is executed once, even when the condition is initially false.

Ex1: Write a program to print 10 numbers using do while loop


#include <stdio.h>
void main()
{
int i=1;
clrscr();
do
{
printf (“%d”,i);
i=i+1;
} while (num<=10);
getch();
}
Output:
1 2 3 4 5 6 7 8 9 10

Ex2: To find the sum of n natural number. 1+2+3…+n


#include <stdio.h>
void main()
{
int n, i=1, sum=0;
clrscr();
printf(“Enter the value for n”);
scanf(“%d”,&n);
do
{
sum=sum+i;
i=i+1;
} while(i<=n);
printf(“Sum=%d”, sum);
getch();
}
Output:
Enter the value for n
4
Sum=10

Three main ingredients of counter-controlled looping


1. Initialization of loop counter
2. Condition to decide whether to execute loop or not.
3. Expression that manipulates the value of loop.

Nested loops
If the body of a loop contains another iteration statement, then we say that the loops are nested.

35 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
Loops within a loop are known as nested loop.
Syntax
while(condition)
{
while(condition)
{
Statements;
}
Statements;
}

Programs:

1. i) Write a program to check whether a given number is Prime or not. [May2014]


#include<stdio.h>
int main()
{
int num,i,count=0;
printf("Enter a number: ");
scanf("%d",&num);
for(i=2;i<=num/2;i++){
if(num%i==0){
count++;
break;
}
}
if(count==0 && num!= 1)
printf("%d is a prime number",num);
else
printf("%d is not a prime number",num);
return 0;
}

Sample output:
Enter a number: 5
5 is a prime number

ii) Write a C program to find sum of digits of an integer. [May2014]

// C program to accept an integer & find the sum of its digits


#include <stdio.h>
void main()
{
long num, temp, digit, sum = 0;
printf("Enter the number \n");
scanf("%ld", &num);

36 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
temp = num;
while (num > 0)
{
digit = num % 10;
sum = sum + digit;
num /= 10;
}
printf("Given number = %ld\n", temp);
printf("Sum of the digits %ld = %ld\n", temp, sum);
}
2. i) Write a C program to find roots of a quadratic equation. [May2014]
#include<stdio.h>
#include<math.h>
int main(){
int a,b,c;
double x,y,d;
printf("Enter a , b , c of quadratic equation: ");
scanf("%d%d%d",&a,&b,&c);
//calculating the value of d
d = sqrt(b * b - 4 * a * c);
//Checking real solution is possible or not
if(d<0){
printf("Real number root is not possible");
exit(1);
}
//finding the root of quadractic equation
x = (-b + d) / 2 * a;
y = (-b - d) / 2 * a;
//printing the root of the quadractic equation
printf("Solution of quadratic equation are %lf , %lf",x,y);
return 0;
}

PRE-PROCESSOR DIRECTIVES
 The C preprocessor is a micro processor that is used by compiler to transform your code before
compilation. It is called micro preprocessor because it allows us to add macros.
 Preprocessor directives are executed before compilation.
 All preprocessor directives starts with hash # symbol.

Let's see a list of preprocessor directives.


 #include
 #define
 #undef

37 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
 #ifdef
 #ifndef
 #if
 #else
 #elif
 #endif
 #error
 #pragma
S.No Preprocessor Purpose Syntax
directives

1 #include Used to paste code of given file into current #include <filename>
file. It is used include system-defined and #include “filename”
user-defined header files. If included file is
not found, compiler renders error.
2 #define Used to define constant or micro #define PI 3.14
substitution. It can use any basic data type.
3 #undef Used to undefine the constant or macro #define PI 3.14
defined by #define. #undef PI
4 #ifdef Checks if macro is defined by #define. If #ifdef MACRO
yes, it executes the code otherwise #else //code
code is executed, if present. #endif
5 #ifndef Checks if macro is not defined by #define. #ifndef MACRO
If yes, it executes the code otherwise #else //code
code is executed, if present. #endif
6 #if Evaluates the expression or condition. If #if expression
condition is true, it executes the code //code
otherwise #elseif or #else or #endif code is #endif
executed.
7 #else Evaluates the expression or condition if #if expression
condition of #if is false. It can be used with //if code
#if, #elif, #ifdef and #ifndef directives. #else
//else code
#endif
8 #error Indicates error. The compiler gives fatal #error First include then
error if #error directive is found and skips compile
further compilation process.
9 #pragma Used to provide additional information to #pragma token
the compiler. The #pragma directive is used
by the compiler to offer machine or
operating-system feature

.
COMPILATION PROCESS
C is a high level language and it needs a compiler to convert it into an executable code so that the
program can be run on our machine.
How do we compile and run a C program?
Below are the steps we use on an Ubuntu machine with gcc compiler.
We first create a C program using an editor and save the file as filename.c
$ vi filename.c
The diagram on right shows a simple program to add two numbers.
Then compile it using below command.
$ gcc – Wall filename.c – o filename
38 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
The option -Wall enables all compiler’s warning messages. This option is recommended to generate
better code.
The option -o is used to specify output file name. If we do not use this option, then an output file
with name a.out is generated.
After compilation executable is generated and we run the generated executable using below
command.
$ ./filename
What goes inside the compilation process?
Compiler converts a C program into an executable. There are four phases for a C program to become an
executable:
1. Pre-processing
2. Compilation
3. Assembly
4. Linking
By executing below command, We get the all intermediate files in the current directory along with the
executable.
$gcc – Wall – save-temps filename.c – o filename

The following screenshot shows all generated intermediate files.


Let us one by one see what these intermediate files contain.

Pre-processing
This is the first phase through which source code is passed. This phase include:
Removal of Comments
Expansion of Macros
Expansion of the included files.

The preprocessed output is stored in the filename.i. Let’s see what’s inside filename.i: using $vi filename.i
In the above output, source file is filled with lots and lots of info, but at the end our code is preserved.

Analysis:
printf contains now a + b rather than add(a, b) that’s because macros have expanded.
Comments are stripped off.
#include<stdio.h> is missing instead we see lots of code. So header files has been expanded and included
in our source file.

Compiling
The next step is to compile filename.i and produce an; intermediate compiled output file filename.s.
This file is in assembly level instructions. Let’s see through t his file using $vi filename.s

Assembly
In this phase the filename.s is taken as input and turned into filename.o by assembler.This file
contain machine level instructions. At this phase, only existing code is converted into machine language, the
function calls like printf() are not resolved. Let’s view this file using $vi filename.o

Linking
This is the final phase in which all the linking of function calls with their definitions are done. Linker
knows where all these functions are implemented. Linker does some extra work also, it adds some extra
code to our program which is required when the program starts and ends.
For example, there is a code which is required for setting up the environment like passing command line
arguments. This task can be easily verified by using $size filename.o and $size filename. Through these

39 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
commands, we know that how output file increases from an object file to an executable file. This is because
of the extra code that linker adds with our program.

40 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,


RVSETGI
41 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
42 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
43 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
44 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI
45 Prepared by, A.LAURO EUGIN BRITTO AP/CSE ,
RVSETGI

You might also like