C Programming Condition
C Programming Condition
IIT Patna 1
Conditional statement
• Allow different sets of instructions to be executed depending on truth or falsity
of a logical condition
• How do we specify these conditions?
• Using expressions and relational operators (>,<,>=,<=,==,!=)
• Non-zero value signifies condition is true
• Value 0 indicates the condition is false
• Using logical connectives (&&, ||, !)
• Example:
(a + b) <= 60
((age == 18) && (height > 5))
((grade == 'A') && ((bankbalance > 6000) || (age >= 45))
IIT Patna 2
Branching: if statement
if(expression) if(expression){
statement; Block of statements
}
Indentation - (leaving horizontal spaces in the following lines of if) easy to read
IIT Patna 3
Example
IIT Patna 4
Branching: if-else statement
if(expression){ if(expression){
Block of statements; Block of statements;
} }
else{ else if(expression){
Block of statements; Block of statements;
} }
else{
Block of statements;
}
IIT Patna 5
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90)
printf("A");
else if(marks>=80)
printf("B");
else if(marks>=70)
printf("C");
else
printf("failed");
return 0;
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
printf("B");
else if(marks>=70)
printf("C");
else
printf("failed");
return 0;
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
printf("B"); m≥90
else if(marks>=70)
printf("C");
else
printf("failed");
return 0;
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
printf("B"); m≥90
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
no
printf("B"); m≥90 m≥80
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
no
printf("B"); m≥90 m≥80
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
no no
printf("B"); m≥90 m≥80 m≥70
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m
printf("A");
else if(marks>=80)
no no
printf("B"); m≥90 m≥80 m≥70
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start
scanf("%d",&marks);
if(marks>=90) Read m Write F
printf("A");
no
else if(marks>=80)
no no
printf("B"); m≥90 m≥80 m≥70
}
IIT Patna 6
Example: grade computation
int main(){
int marks; Start Stop
scanf("%d",&marks);
if(marks>=90) Read m Write F
printf("A");
no
else if(marks>=80)
no no
printf("B"); m≥90 m≥80 m≥70
}
IIT Patna 6
Example: grade computation
int main(){
int marks;
scanf("%d",&marks);
if(marks>=90)
{ printf("A\n"); printf("Well done\n"); }
else if(marks>=70)
printf("B");
else if(marks>=50)
printf("C");
else
{ printf("failed\n"); printf("Study hard\n"); }
return 0;
}
IIT Patna 7
Maximum of two numbers
#include <stdio.h> Start
int main()
{ Read x,y
int x,y;
scanf("%d%d",&x,&y);
yes x>y no
if(x>y)
printf("Largest is %d\n",x);
else print x print y
printf("Largest is %d\n",y);
return 0;
Stop Stop
}
IIT Patna 8
Example: minimum of 3 numbers
Start
IIT Patna 9
Example: minimum of 3 numbers
Start
Read x,y,z
IIT Patna 9
Example: minimum of 3 numbers
Start
Read x,y,z
x>y
IIT Patna 9
Example: minimum of 3 numbers
Start
Read x,y,z
yes x>y
min=y
IIT Patna 9
Example: minimum of 3 numbers
Start
Read x,y,z
yes x>y no
min=y min=x
IIT Patna 9
Example: minimum of 3 numbers
Start
yes x>y no
min=y min=x
IIT Patna 9
Example: minimum of 3 numbers
Start
min=y min=x
IIT Patna 9
Example: minimum of 3 numbers
Start
min=y min=x
Stop
IIT Patna 9
Example: minimum of 3 numbers
Start
min=y min=x
Stop
IIT Patna 9
Example: minimum of 3 numbers
Start
min=y min=x
Stop Stop
IIT Patna 9
Minimum of three numbers
#include <stdio.h>
int main()
{
int x,y,z,min;
scanf("%d%d%d",&x,&y,&z);
if(x > y) { min=y; }
else { min=x;}
if(z > min) { printf("%d",min); }
else { printf("%d",z); }
return 0;
}
IIT Patna 10
Maximum of three numbers
int main(){
int x,y,z;
scanf("%d%d%d", &x, &y, &z);
if((x >= y) && (x >= z))
printf("%d",x);
if((y >= x) && (y >= z))
printf("%d",y);
if((z >= y) && (z >= x))
printf("%d",z);
return 0;
}
IIT Patna 11
Nesting of if-else structures
• It is possible to nest if-else statements, one within another
• All if statements may not be having the else part
• Confusion??
• Rule to be remembered:
• An ”else” clause is associated with the closest preceding unmatched ”if”
IIT Patna 12
Dangling else problem
• if(exp1) if(exp2) stamta else stmtb
if(exp1){ if(exp1){
if(exp2) if(exp2)
stmta stmta
else }
stmtb else
} stmtb
if(exp1){ if(exp1){
if(exp2) if(exp2)
stmta stmta
else }
stmtb else
} stmtb
×
While implementing a code, it is good practice
to provide explicit { and } to avoid any confusion
IIT Patna 13
More examples
if e1 s1
else if e2 s2
IIT Patna 14
More examples
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2}
IIT Patna 14
More examples
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2}
if e1 s1
else if e2 s2
else s3
IIT Patna 14
More examples
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2}
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2 else s3}
else s3
IIT Patna 14
More examples
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2}
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2 else s3}
else s3
if e1 if e2 s1
else s2
else s3
IIT Patna 14
More examples
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2}
if e1 s1 if e1 s1
else if e2 s2 else {if e2 s2 else s3}
else s3
IIT Patna 14
Example
• Print PASSED if a given marks is between 60 and 100, or FAILED if it is below
60. Do not print anything in other cases
int main(){
int m;
scanf("%d", &m);
if(m >= 60)
if(m <= 100)
printf("PASSED\n");
else
printf("FAILED\n");
return 0;
}
IIT Patna 15
Example
• Print PASSED if a given marks is between 60 and 100, or FAILED if it is below
60. Do not print anything in other cases
int main(){
int m;
Output:
scanf("%d", &m); 150
if(m >= 60) FAILED
if(m <= 100)
printf("PASSED\n"); Output:
else 30
printf("FAILED\n");
return 0;
}
IIT Patna 15
Example
• Print PASSED if a given marks is between 60 and 100, or FAILED if it is below
60. Do not print anything in other cases
int main(){
int m;
scanf("%d", &m); Output:
if(m >= 60){ 150
if(m <= 100)
printf("PASSED\n"); Output:
} else 30
FAILED
printf("FAILED\n");
return 0;
}
IIT Patna 16
Conditional operator ?:
• Conditional expression written with the ternary operator ?: provides alter-
nate way to write if-else statement
• It is of the form — expr1 ? expr2 : expr3 ;
• The expression expr1 is evaluated first. If it is non-zero, then expr2 is eval-
uated. Otherwise expr3 will be evaluated
• Example: z = (a > b) ? a : b ;
if (a > b)
z = a;
else
z = b;
• Conditional expression can be represented in succinct way ?: operator
printf("%c", (i%10==9 || i==n-1) ? '\n' : ' ');
IIT Patna 17
Equality (==) vs Assignment (=) operators
• It can lead to fatal error and does not cause syntax error in general
• Any expression that produces a value can be used for control structure
• Non-zero values are treated as true and zero as false
• Example:
if(age = 18)
printf("You can cast vote!");
• printf statement will always get executed!!
• if (18 = age) — leads to syntax error, this can be good practice
IIT Patna 18
The switch statement
• The switch statement is a multi-way decision that tests whether an expres-
sion matches one of a number of constant integer values and branches accord-
ingly
switch (expr){ • expr is any integer valued expression
case cexpr1: S1 • cexpr1, cexpr2, … are constant integer
case cexpr2: S2 valued expression and values must be distinct
.
.
. • S1,S2,…, S are statements or compound
default: S statements
} • default is optional and can come anywhere
not necessary at the end. Usually it is put at
the end
IIT Patna 19
The switch statement
switch (expr){
case cexpr1: S1 • When a switch statement is executed, the
case cexpr2: S2 expr is evaluated and control is transferred to
.
. the group of case statements
.
• It is then compared with cexpr1, cexpr2,
default: S
… for equality in order
} • If there is a match, all statements from that
point till the end of switch is executed (includ-
ing default)
• Need to use break statement to transfer con-
trol to the end
• Statements for default gets executed if
none of the expression is matched
IIT Patna 20
Example
switch (choice){
case 'r':
printf("RED");
break;
case 'g': Output: (choice = ’r’)
printf("GREEN"); RED
break; Output: (choice = ’G’)
default: OTHER
printf("OTHER");
}
IIT Patna 21
Example
switch (choice){ Since no break statement is there, the control
case 'r': passes to the next statement without checking
case 'R': the next condition.
printf("RED");
break; Output: (choice = ’r’)
case 'g': RED
case 'G':
printf("GREEN"); Output: (choice = ’G’)
GREEN
break;
default: Output: (choice = ’z’)
printf("OTHER"); OTHER
}
IIT Patna 22
Alternative way
switch (toupper(choice)){
case 'R':
printf("RED");
break;
case 'G': Output: (choice = ’r’)
printf("GREEN"); RED
break; Output: (choice = ’G’)
default: GREEN
printf("OTHER");
} Output: (choice = ’z’)
OTHER
IIT Patna 23
The break statement
• Used to exit from a switch or terminate from a loop
• With respect to switch, the break statement causes a transfer of control out
of the entire switch statement, to the first statement following the switch
statement
• Can be used with other statements also
IIT Patna 24
Example
int x;
scanf("%d",&x);
switch(x){
case 1: printf("One \n");
case 2: printf("Two \n");
default: printf("Not one or two \n");
}
IIT Patna 25
Example
int x;
scanf("%d",&x);
switch(x){
case 1: printf("One \n");
case 2: printf("Two \n");
default: printf("Not one or two \n");
}
IIT Patna 26
Practice problems
• Read in 4 integers and print the second maximum number
• Read in the coefficient a, b, c of the expression ax2 + bx + c = 0. Print the
roots of the equation nicely (For imaginary roots, use x + iy format)
• Read in 3 points on a 2D plane and check if they are collinear. Print suitable
message
• Read in a number (integer), convert it into grade. Marks >= 90 is AA, 80-89 —
AB, 70-79 — BB, 60-69 — BC, 50-59 —CC, 40-49 — CD, 30-39 — DD and marks
< 30 will get F
IIT Patna 27