Module 2
Module 2
a + b Expression
a _ b
Operators
i) Unary operator: An operator which acts on only one operand to produce the result is
called Unary operator.
Ex: -10, -a, *b, ++a, a++, b-- etc.
ii) Binary operator: An operator which acts on two operands to produce the result is called
Binary operator.
Ex: a+b, a*b, 10/5 etc
iii) Ternary operator: An operator which acts on three operands to produce the result is
called Ternary operator.
Ex: a ? b : c;
DBIT 1
2. Classification of operators based on type of operation
Arithmetic Operators Ex: +, - , * etc.
i) Arithmetic Operators
The operators that are used to perform arithmetic operations such as addition,
subtraction, multiplication, division and modulus are called arithmetic operators.
These operators perform operations on two operands and hence they are called binary
operators.
% (modulus operator) divides the first operand by second and returns the remainder.
% (modulus operator) cannot be applied to floating or double.
% operator returns remaining value(remainder) of an integer division.
DBIT 2
Arithmetic Operator’s Precedence (Precedence of operators)
The Arithmetic Expressions are evaluated based on “BODMAS” Rule. (Brackets of Operator
(x(2),[ ]), Order or Power (xy,23 etc.), Division, Multiplication, Addition, Subtraction).
variable= expression;
Ex: a=10;
a=b;
a=a+b;
Area= l*b; //Result of Expression l*b is copied into variable area.
DBIT 3
c). Multiple Assignment Statement
Assigning a value or a set of values to different variables in one statement is called multiple
assignment statement.
The multiple assignments are used whenever same value has to be copied into various memory
locations.
Ex: int i=10; //simple assignment
int j=10;
int k=10;
int i=j=k=10; //multiple assignment
1. Post Increment
It increments the value after (post) the operand value is used. i.e., operand value is used
first and then the operand value is incremented by 1.
Ex: void main()
{
int a=20,b; // a=20, b?
b=a++; // b=a=20, a=a+1= 20+1
printf(“%d”,a); // a=21
printf(“%d”,b); // b=20
}
2. Pre Increment
It increments before (pre) the operand value is used. The operand value is incremented by
1 and this incremented value is used.
4
Ex: void main()
{
int a=20,b; // a=20, b?
b=++a; // a=++a=a+1= 20+1, b=a=21
printf(“%d”,a); // a=21
printf(“%d”,b); // b=21
}
Decrement Operator
'--' is a decrement operator. This is a unary operator. It decrements the value of a variable
by one.
Post Decrement Ex: a--
Decrement
Operator Pre Decrement Ex: --a
1. Post Decrement
It decrements the value after (post) the operand value is used. i.e., operand value is used
first and then the operand value is decremented by 1.
Ex: void main()
{
int a=20,b; // a=20, b?
b=a--; // b=a=20, a=a-1= 20-1
printf(“%d”,a); // a=19
printf(“%d”,b); // b=20
}
2. Pre Decrement
It decrements before (pre) the operand value is used. The operand value is decremented by
1 and this decremented value is used.
Ex: void main()
{
int a=20,b; // a=20, b?
b=--a; // a=--a=a-1= 20-1, b=a=19
printf(“%d”,a);// a=19
printf(“%d”,b); // b=19
}
5
Relational operators available in C are:
All the relational operators are having a same priority and left to right associativity.
The relational operators have lower precedence than arithmetic operators.
Equality operators
C supports two kinds of equality operators to compare their operands for strict equality or
inequality.
equal ==
not equal ! =
Equality operators have lower precedence than the relational operators.
v) Logical operators
The operators that are used to combine two or more relational expressions are called
logical operators.
The output of relational expression is true or false, the output of logical expression is also
true or false.
Logical NOT: The logical NOT operator is denoted by ‘!’. The output of not operator can be true or
false. The result is true if the operand value is false and the result is false if the operand is true.
Logical AND: The logical AND operator is denoted by ‘&&’. The output of and operator is true if
both the operands are evaluated to true. If one of the operand is evaluated false, the result is false.
6
Logical OR: The logical OR operator is denoted by ‘||’. The output of or operator is true if and only
if at least one of the operands is evaluated to true. If both the operands are evaluated to false, the
result is false.
Ex: 1. If a, b, c are 3 sides of a triangle, then if a==b && b==c && c==a then triangle is equilateral
otherwise not an equilateral triangle.
2. If a, b, c are 3 sides of a triangle then if a==b || b==c || c==a then triangle is isosceles triangle
otherwise not a isosceles triangle.
3. int a=10, b:
b =!a ;
Output: value of b=0, because a = 10 then !a=0 and !a value assigned to b.
Where,
- expr1 is evaluated first.
- If expr1 is evaluated to true, then expr2is evaluated.
- If expr1 is evaluated to false, then expr3is evaluated.
Example:
1. Write a C program to find the biggest of two numbers using conditional operator.
#include<stdio.h>
void main()
{
int a,b,big;
printf(“Enter the values of a and b:”);
scanf(“%d%d”,&a,&b);
big=(a>b)?a:b;
printf(“Big=%d”,big);
}
2. Write a C program to find the smallest of two numbers using conditional operator.
#include<stdio.h>
void main()
{
int a,b,small;
printf(“Enter the values of a and b:”);
scanf(“%d%d”,&a,&b);
small=(a<b)?a:b;
printf(“Small=%d”,big);
}
7
vii) Bitwise Operators
The operators that are used to manipulate the bits of given data are called bitwise
operators.
These may only be applied to integral operand. i.e., char, short, int and long whether signed or
unsigned.
a. One’s Complement(~)
The operator that is used to change every bit from 0 to 1 and 1 to 0 in the specified operand
is called One’s complement operator.
Truth table of One’s Complement(~):
Op1 ~Op1
0 1
1 0
Output: ~10=245
Binary Representation:
10 = 0 0 0 0 1 0 1 0
245= 1 1 1 1 0 1 0 1
8
b. Left shift operator (<<)
The operator that is used to shift the data by a specified number of bit positions towards
left is called ‘left shift operator’.
Syntax:
b=a<<num;
Ex: Write a C program to show the usage of Left Shift operator.
#include<stdio.h>
void main()
{
int a=5,b;
b=a<<1;
printf(“%d<<1=%d”,a,b);
}
Output: 5<<1=10
MSB is discarded
0 0 0 0 0 1 0 1 a=5
b=10
0 0 0 0 1 0 1 0
0 is appended at LSB
0 0 0 0 1 0 1 0 a=10
0 0 0 0 0 1 0 1
b=5
0 is appended at MSB
9
d. Bit-wise AND (&)
If the corresponding bit positions in both the operands are 1, then AND operation results in
1, otherwise AND operation results in 0.
Truth table of Bit-wise AND (&):
Op1 Op2 Op1&Op2
0 0 0
0 1 0
1 0 0
1 1 1
Ex: Write a C program to show the usage of ‘&’ operator.
#include<stdio.h>
void main()
{
int a=10,b=6;
c=a&b;
printf(“%d&%d=%d”,a,b,c);
}
Output: 10&6=2
Binary Representation:
10 = 0 0 0 0 1 0 1 0
06 = 0 0 0 0 0 1 1 0
02 = 0 0 0 0 0 0 1 0
e. Bit-wise OR (|)
If the corresponding bit positions in both the operands are 0, then OR operation results in
0, otherwise OR operation results in 1.
10
f. Bit-wise XOR (^)
If the corresponding bit positions in both the operands are different, then XOR operation
results in 1, otherwise XOR operation results in 0.
0^0=0
0^1=1
1^0=1
1^1=0
Ex: Write a C program to show the usage of ‘^’ operator.
#include<stdio.h>
void main()
{
int a=10,b=6;
c=a^b;
printf(“%d^%d=%d”,a,b,c);
}
Output: 10^6=12
Binary Representation:
10 = 0 0 0 0 1 0 1 0
06 = 0 0 0 0 0 1 1 0
12 = 0 0 0 0 1 1 0 0
1. Comma operator
Comma Operator has the least precedence among all the operators and it is left associative
operator.
Comma Operator is used in the declaration to separate the variables.
Ex: int a,b,c;
It can be used to separate the items in the list.
Ex: a=12,345,678;
It can be used to combine two or more statements into a single statement.
Ex: sum=a+b,sub=a-b,mul=a*b,div=a/b,mod=a%b;
2. sizeof()
‘sizeof()’ operator is used to determine the number of bytes occupied by a variable or a constant
in the memory.
Ex: sizeof(char) 1 byte
sizeof(int) 2 bytes
sizeof(float) 4 bytes
Example program: Write a C program that computes the size of int, float, char and double
variables.
#include<stdio.h>
void main()
{
11
char ch;
int x;
float y;
double z;
clrscr();
printf(“Number of bytes occupied by character variable=%d”,sizeof(ch));
printf(“Number of bytes occupied by integer variable=%d”,sizeof(x));
printf(“Number of bytes occupied by floating-point variable=%d”,sizeof(y));
printf(“Number of bytes occupied by double variable=%d”,sizeof(z));
}
𝑥 = √2𝜋𝑛 x=sqrt(2*3.142*n)
a a/b
b
𝑏 x=-b/(2*a)
𝑥=−
2𝑎
𝑎𝑥2 + bx + c a*x*x+b*x+c
12
2.1.3 Associativity of operators
When two or more operators have the same precedence, then precedence rules are not
applicable.
Associativity determines how the operators with the same precedence are evaluated in an
expression.
The two types of operators Associativity are:
1. Left Associativity
2. Right Associativity
1. Left Associativity
In an expression, if two or more operators having the same priority are evaluated from
left-to-right, then the operators are called Left to Right associative operators.
We normally denote it using L R.
2. Right Associativity
In an expression, if two or more operators having the same priority are evaluated from
right-to-left, then the operators are called Left to Right associative operators.
We normally denote it using R L.
Ex: i=j=k=10.
13
Unary +, - and * have higher precedence than the binary forms.
14
15
16
2.3 Type Conversion and Typecasting
The process of converting the data or variable from one data type to another data type is
called Type Conversion or Typecasting.
Type conversion is done implicitly by the compiler, whereas typecasting has to be done
explicitly by the programmer.
17
C compiler converts the data type with lower rank to the data type with higher rank. This process
of conversion of data from lower rank to higher rank automatically by the C compiler is called
“Implicit type Conversion”.
If one operand type is same as that of other operand type, no conversion takes place. Ex: int
+ int = int, float + float = float
If one operand type is ‘int’ and other operand type is ‘float’, then the operand with type int is promoted
to ‘float’ (because float is up in ladder compared with int).
Type conversion is automatically done when we assign an integer value to floating point variable.
Consider the code given below in which an integer data type is promoted to float. This is known as
promotion (where the lower level data type is promoted to higher type).
float x; int y=3;
x=y;
Now, x=3.0, as automatically integer value is converted into its equivalent floating point representation.
2.3.2 Typecasting
Typecasting is also known as forced conversion.
It is done when the value of a higher data type has to be converted into a value of a lower data type.
But this casting is done under the programmer’s control and not under the compiler’s control.
The programmer can instruct the compiler to change the type of the operand or variable from one
data type to another data type. This forcible conversion from one data type to another data type is
called “Explicit type Conversion” (Type Casting).
Syntax:
(type) Expression
1
MODULE 2
Decision Control and Looping Statements
2.4 Introduction to Decision Control or Branching Statements
The statements that transfer the control from one place to other place in the program
with or without any condition are called branch statements or selection statements.
The branching statements are classified into two types:
i. Conditional branch statements
ii. Unconditional branch statements
goto
break
Unconditional
Branch statements continue
return
2
Syntax of if statement
if(test Expression)
{ test
Expression
Statement 1; False
Statement 2; True
... Statement 1
Statement 2
… …
… …
…
Statement n; Statement n
}
Statement x; Statement x
The ‘if’ structure may include one statement or ‘n’ statements enclosed within curly brackets.
Working Principle
First the test expression is evaluated. If the test expression is true, then the statements of ‘if’
block (statement 1 to n) are executed. Otherwise these statements will be skipped and the
execution will jump to statement x.
3
2. Write a C program to check whether the number is even or odd and print the
appropriate message.
#include<stdio.h>
void main()
{
int n;
printf(“Enter a number:”);
scanf(“%d”,&n);
if(n%2==0)
printf(“Number is even”);
if(n%2=0)
printf(“Number is odd”);
}
4
2.5.2 if-else statement
If one set of activities have to be performed when an expression is evaluated to true and
another set of activities have to be performed when an expression is evaluated to false, then
if-else statement is used.
else
Statement block 1 Statement block 2
{
Statement block 2;
}
Statement x
Statement x;
The is-else statement is used when we must choose between two choices (alternatives).
Hence is also called as “Two-way Decision or Selection Statement”.
Working Principle
According to the if-else construct, first the ‘test expression’ is evaluated.
If the expression is true then Statement block 1 is executed and Statement block 2 is skipped.
If the expression is false the Statement block 2 is executed and Statement block 1 is ignored.
Now in any case after the Statement block 1 or 2 gets executed the control will pass to
Statement x. It is executed in every case.
5
2. Write a C program to check whether the number is even or odd and print the
appropriate message.
#include<stdio.h>
void main()
{
int n;
printf(“Enter a number:”);
scanf(“%d”,&n);
if(n%2==0)
printf(“Number is even”);
else
printf(“Number is odd”);
}
3. Write a C program to enter a character and then determine whether it is a vowel or not.
#include<stdio.h>
void main()
{
char ch;
printf(“Enter any character:”);
scanf(“%c”,&ch);
if(ch==’a’||ch==’e’||ch==’i’||ch==’o’||ch==’u’||ch==’A’||ch==’E’||ch==’I’||ch==’O’||ch==’U’)
printf(“\n Character is a vowel”);
else
printf(“\n Character is a consonant”);
}
6
2.5.3 Nested if-else statement
An if-else statement within if statement or an if-else statement
within else statement is called “nested if or if-else statement”.
When an action has to be performed based on many decisions involving various types of
expressions and variables, then this statement is used. So it is called as “Multi-way decision
statement”.
Syntax for nested if-else statement:
if(test Expression1)
{
if(test Expression2) True Test False
{ Expression1
Statement block 1;
}
else True False Statement
Test
{ Expression2 block 3
Statement block 2;
} Statement Statement
} block 1 block 2
else
{
Statement block 3; Statement x
}
Statement x;
Working Principle
If the test expression 1 is evaluated to true, then the test expression 2 is checked for true or
false. If the test Expression2 is evaluated to true, then the statements in block 1 are executed,
otherwise the statements in block 2 are executed. After executing the inner if-else the control
comes out and the statement x is executed.
If the test expression1 itself is false, then the statements in block 3 are executed. After
executing these statements, the statement x is executed.
} block 1
….
…. Statement
….
…. block 2
else
Statement
{ block n
Statement block n;
}
Statement x
Statement x;
Working Principle
The ‘Expressions’ are evaluated in order. If any expression is true then the statement
associated with it is executed and this terminates the whole chain and statement x is
executed.
The last ‘else’ part is executed when all the test expression are false.
8
Example Programs for ‘cascaded if-else’ statement
1. Write a C program to demonstrate the use of cascaded if structure.
#include<stdio.h>
void main()
{
int x,y;
printf(“Enter the values of x and y:”);
scanf(“%d%d”,&x,&y);
if(x==y)
printf(“\n The two numbers are equal”);
else if(x>y)
printf(“\n %d is greater than %d”,x,y);
else
printf(“\n %d is less than %d”,x,y);
}
9
3. Write a C program to input 3 numbers and then find the largest of them using ‘&&’
operator.
#include<stdio.h>
void main()
{
int a,b,c;
printf(“Enter the three numbers:”);
scanf(“%d%d%d”,&a,&b,&c);
if(a>b && a>c)
printf(“\n %d is the largest number”,a);
else if(b>a && b>c)
printf(“\n %d is the largest number”,b);
else
printf(“\n %d is the largest number”,c);
}
10
switch statement syntax True Statement
switch(expression) Value1
block 1
{
False
case value-1: Statement block 1;
break; True
Value2 Statement
case value-2: Statement block 2; block 2
break;
….. False
… ….
…..
… ….
case value-n: Statement block n;
break; True
Valuen Statement
default: Statements;
block n
} False
Statement x;
default Statements
Statement x
Working Principle
First the expression within switch is evaluated.
The value of an expression is compared with all the case values.
The value of an expression within switch is compared with the case value-1. If it matches
then the statements associated with that case are executed. If not then the case value-2 is
compared, if it matches then the associated statements are executed and so on.
The “default” statements are executed when no match is found.
A default is optional.
The ‘break’ statement causes an exit from the switch. ‘break’ indicates end of a particular
case and causes the control to come out of the switch. [Significance of break within switch
statement]
11
case ‘O’: printf(“Outstanding”);
break;
case ‘A’: printf(“Excellent”);
break;
case ‘B’: printf(“Good”);
break;
case ‘C’: printf(“Fair”);
break;
case ‘F’: printf(“Fail”);
break;
default : printf(“Invalid grade”);
}
}
2. Write a C program to enter a number from 1 to 7 and display the corresponding day of
the week using switch.
#include<stdio.h>
void main()
{ int day;
printf(“Enter any number:”);
scanf(“%d”,&day);
switch(day)
{
case 1: printf(“Sunday”);
break;
case 2: printf(“Monday”);
break;
case 3: printf(“Tuesday”);
break;
case 4: printf(“Wednseday”);
break;
case 5: printf(“Thursday”);
break;
case 6: printf(“Friday”);
break;
case 7: printf(“Saturday”);
break;
default : printf(“invalid input”);
}
}
12
2.6 Iterative Statements or Loops
A set of statements may have to be repeatedly executed for a specified number of times or till
a condition is satisfied.
The statements that help us to execute a set of statements repeatedly for a specified
number of times or till a condition is satisfied are called as Iterative statements or looping
constructs or loop control statements.
These statements are also called as Repetitive or Iterative Statements.
while loop
do-while loop
Statement x
Working principle
The test expression is evaluated first, if it is TRUE then the set of statements within the body
of the loop are executed repeatedly as long as specified test expression is TRUE.
If the test expression is false, then the control comes out of the loop by skipping the
execution of the statements within the body of the loop, by transferring the control to the
Statement x.
13
Example programs of ‘while’ loop
1. Write a C program to print the natural numbers from 1 to 10.
#include<stdio.h>
void main()
{
int i=1;
while(i<=10)
{
printf(“%d\n”,i);
i++;
}
}
14
{
int i=1,sum=0;
while(i<=10)
{
sum=sum+i;
i++;
}
printf(“\nSum=%d”,sum);
}
6. Write a C program to find the factorial of a given number using while statement.
#include<stdio.h>
void main()
{
int fact=1,i=1,n;
printf(“Enter the value of n:\n”);
scanf(“%d”,&n);
while(i<=n)
{
fact=fact*i;
i++;
}
printf(“Factorial of a given number is=%d”,fact);
}
15
{
digit=num%10;
rev=rev*10+digit;
num=num/10;
}
printf("The reversed number is=%d\n",rev);
if(n==rev)
printf(“ The number is a palindrome”);
else
printf(“The number is not a palindrome”);
}
16
Flowchart
False
for(initialization ;test expression; increment/decrement)
L
O
O True
P
Statements
Statement x
Working Principle
initialization: In this section loop variable is initialized, like i=0, n=0, i=1,n=1. (i and n are
loop variables).
test expression: The test expression may be a relational expression or logical expression or
both, which is evaluated to TRUE or FALSE. Depending on the value of the test expression,
the body of the loop is executed. If the test expression is TRUE, then the body of the loop is
executed. This process of execution of body of the loop is continued as long as the
expression is TRUE. When the test expression becomes FALSE, execution of the statements
contained in the body of the loop are skipped, thereby transferring the control to the
Statement x, which immediately follows the for loop.
increment/decrement: This section increments or decrements the loop variables after
executing the body of the loop.
Infinite Loop
A for loop without a test expression is an Infinite loop.
Ex: for(i=0; ;i++)
{
………
} is an “infinite” loop.
17
2. Write a C program to print the natural numbers from 1 to n.
#include<stdio.h>
void main()
{
int i,n;
printf(“Enter the value of n:”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
printf(“%d\n”,i);
}
}
18
f3=f1+f2;
printf(“%d\t”,f3);
f1=f2;
f2=f3;
}
}
}
printf(“%c\t”,ch);
}
}
Output: A B C D E F Z
6. Write a C program to find the factorial of a given number using for statement.
#include<stdio.h>
void main()
{
int fact=1,i,n;
printf(“Enter the value of n:\n”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
fact=fact*i;
}
printf(“Factorial of a given number is=%d”,fact);
19
The do-while tests the expression at the bottom after making each passes through the loop
body.
Syntax of do-while loop Statements
do{
Statements;
Statement x
Working Principle
It is a post-test or bottom-testing loop and hence the statements contained within the body
of the loop are executed first and then the expression is evaluated to TRUE or FALSE. If it is
TRUE, then the statements contained within the body of the loop are executed once again
and the expression is evaluated. This is repeated until the expression is evaluated to FALSE.
If the expression is FALSE, then the control comes out of the loop by skipping the execution
of the statements within the body of the loop, by transferring the control to the Statement x.
20
6 Ex: Ex:
int i=0,sum=0; int i=0,sum=0;
while(i<=n) do{
{ sum=sum+i;
sum=sum+i; i=i+1;
i=i+1; }while(i<=n);
}
21
7 Flowchart: Flowchart:
Statements
False
while(test expression)
True
True
Statements while(test expression);
False
Statement x Statement x
2. Write a C program to calculate the sum and average of first ‘n’ numbers.
#include<stdio.h>
void main()
{
int n,i=0,sum=0;
float avg=0.0;
printf(“Enter the value of n:”);
scanf(“%d”,&n);
do
{
sum=sum+i;
i++;
}while(i<=n);
avg=sum/n;
printf(“The sum of numbers=%d”,sum);
printf(“The average of numbers=%f”,avg);
}
2.7 Nested Loops
The loops that can be placed inside other loops.
It will work with any loops such as while, do-while and for.
Nested loop is commonly used with the for loop because this is easiest to control.
The ‘inner for loop’ can be used to control the number of times that a particular set of
statements will be executed.
The ‘outer for loop’ can be used to control the number of times that a whole loop is repeated.
Example Program: Write a C program to print the following output.
1
1 2
#include<stdio.h> 1 2 3
void main( ) 1 2 3 4
{ 1 2 3 4
int i,j;
for(i=1;i<=5;i++)
{
printf(“\n”);
Outer for(j=1;j<=i;j++)
for loop { Inner
printf(“%d”,j); for loop
}
}
}
2. do
{
……
if(condition)
break;
…… Transfers the control out of the do-while loop
}while(condition);
……
3. for(…)
{
……
if(condition)
break;
……
} Transfers the control out of the for loop
……
Syntax:
1. while(… )
{
if(condition) Transfers the control to the expression of the while loop
continue;
……….
}
……….
2. do
{
……
if(condition)
continue;
…… Transfers the control to the expression of the do-while loop
}while(condition);
……
3. for(…)
{
……
if(condition) Transfers the control to the expression of the for loop
continue;
……
}
……
25
Output: 1 3 4 5 [if i==2 then the continue statement is executed and the statements following
continue are skipped]
2.10 Write a C Program to display the following by reading the number of rows as input,
27
#include <stdio.h>
void main()
{
int i,j,n;
printf("Input number of rows : ");
scanf("%d",&n);
for(i=0;i<=n;i++)
{
/*print blank spaces */
for(j=1;j<=n-i;j++)
printf(" ");
/* Display number in ascending order upto middle*/
for(j=1;j<=i;j++)
printf("%d",j);
/* Display number in reverse order after middle */
for(j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
}
28
x = y = z = 1;
for(i = n; i >=1; i--)
{
x = x * i; Output:
} Enter the value of n and r:
6
for(i = n-r; i >=1; i--)
2
{ 6C2 = 15
y = y * i;
}
for(i = r; i >=1; i--)
{
z = z * i;
}
nCr = x / (y * z);
printf(“%d C %d= %d”, n ,r, nCr);
}
29
soprotection.com