fcp_2_if_else.ppt
TRANSCRIPT
Introduction to C Programming
Control Instruction
alter our actions by circumstances. If the weather is fine, then I will go for a stroll If the highway is busy I would take a diversion notice that all these decisions depend on some condition being
met C language too must be able to perform different sets of
actions depending on the circumstances C has three major decision making instructions If statement if-else statement SThe conditional operators. switch statement
Decisions! Decisions!
Last class programs steps are executed sequentially i.e. in the same order in which they appear in the program.
Many a times, we want a set of instructions to be executed in one situation, and an entirely different set of instructions to be executed in another situation.
This kind of situation is dealt in C programs using a decision control instruction
(a) The if statement (b) The if-else statement (c) The conditional operators.
The if Statement General form
if ( this condition is true ){
execute this statement ;}
But how do we express the condition itself in C? we express a condition using C’s ‘relational’ operators. this expression is true if
x == y x is equal to yx != y x is not equal to yx < y x is less than yx > y x is greater than yx <= y x is less than or equal to yx >= y x is greater than or equal to y
/* Demonstration of if statement */#include<stdio.h>void main( ){int num ;
printf ( "Enter a number less than 10 " ) ;scanf ( "%d", &num ) ;if ( num <= 10 )
printf ( "What an obedient servant you are !" ) ;}
While purchasing certain items, a discount of 10% is offered if the quantity purchased is more than 1000. If quantity and price
per item are input through the keyboard, write a program to calculate the total expenses.
void main( ){int qty, dis = 0 ;float rate, tot ;printf ( "Enter quantity and rate " ) ;scanf ( "%d %f", &qty, &rate) ;if ( qty > 1000 )
dis = 10 ;tot = ( qty * rate ) - ( qty * rate * dis / 100 ) ;printf ( "Total expenses = Rs. %f", tot ) ;}
The current year and the year in which the employee joined the organization are entered through the keyboard. If the number of years for which the employee has served the organization is greater than 3 then a bonus of Rs. 2500/- is given to the employee. If the years of service are not greater than 3, then the program should do nothing.
#include<stdio.h>void main( ){int bonus, cy, yoj, yr_of_ser ;printf ( "Enter current year and year of joining " ) ;scanf ( "%d %d", &cy, &yoj ) ;yr_of_ser = cy - yoj ;if ( yr_of_ser > 3 )
{bonus = 2500 ;printf ( "Bonus = Rs. %d", bonus ) ;
}}
The Real Thing General form
if ( this condition is true ){ execute this statement ; }
But if ( expression ) { execute this statement ; }
expression can be any valid expressionif ( 3 + 2 % 5 )
printf ( "This works" ) ;if ( a = 10 )
printf ( "Even this works" ) ;if ( -5 )
printf ( "Surprisingly even this works" ) ; C a non-zero value is considered to be true, whereas a 0 is
considered to be false.
The if-else Statement Can we execute one group of statements if the expression
evaluates to true and another group of statements if the expression evaluates to false?
Of course! This is what is the purpose of the else statement General Form
if ( this condition is true ){
execute this statement ;}
else{execute this statement ;}
The group of statements after the if upto and not including the else is called an ‘if block’. Similarly, the statements after the else form the ‘else block’.
Notice that the else is written exactly below the if.
Had there been only one statement to be executed in the if block and only one statement in the else block we could have dropped the pair of braces.
As with the if statement, the default scope of else is also the statement immediately after the else.
Example. In a company an employee is paid as under: If his basic salary is less than Rs. 1500, then HRA = 10% of basic salary and DA = 90% of basic salary. If his salary is either equal to or above Rs. 1500, then HRA = Rs. 500 and DA = 98% of basic salary. If the employee's salary is input through the keyboard write a program to find his gross salary.
#include<stdio.h>void main( ){float bs, gs, da, hra ;printf ( "Enter basic salary " ) ;scanf ( "%f", &bs ) ;if ( bs < 1500 )
{hra = bs * 10 / 100 ;da = bs * 90 / 100 ;
}else
{hra = 500 ;da = bs * 98 / 100 ;
}gs = bs + hra + da ;printf ( "gross salary = Rs. %f", gs ) ;}
Nested if-elses if we write an entire if-else construct within either the body of the if
statement or the body of an else statement. This is called ‘nesting’ of ifs.
if ( condition ){
if ( condition )do this ;
else{do this ;and this ;}
} else
do this ;
#include<stdio.h>.void main( ){
int i ;printf ( "Enter either 1 or 2 " ) ;scanf ( "%d", &i ) ;if ( i == 1 )
printf ( "You would go to heaven !" ) ;else{
if ( i == 2 )printf ( "Hell was created with you in mind"
) ; else
printf ( "How about mother earth !" ) ;}
}
Forms of if The if statement can take any of the following forms:
(a) if ( condition )do this ;
(b) if ( condition ){
do this ;and this ;
}(c) if ( condition )
do this ; else
do this ;
Forms of if(d) if ( condition )
{do this ;and this ;
} else
{do this ;and this ;
}
Forms of if(e) if ( condition )
do this ; else
{if ( condition )
do this ;else
{do this ;and this ;}
}
(f) if ( condition ){
if ( condition )do this ;
else{do this ;and this ;}
} else
do this ;
Example 2.4: The marks obtained by a student in 5 different subjects are input through the keyboard. The student gets a division as per the following rules:Percentage above or equal to 60 - First divisionPercentage between 50 and 59 - Second divisionPercentage between 40 and 49 - Third divisionPercentage less than 40 - FailWrite a program to calculate the division obtained by the student.
Nested if-else Example
void main( )
{ int m1, m2, m3, m4, m5, per ;
printf ( "Enter marks in five subjects " ) ;scanf ( "%d %d %d %d %d", &m1, &m2, &m3, &m4, &m5 ) ;per = ( m1 + m2 + m3 + m4 + m5 ) / 5 ;
if ( per >= 60 )printf ( "First division ") ;
else{
if ( per >= 50 )printf ( "Second division" ) ;
else{
if ( per >= 40 )printf ( "Third division" ) ;
elseprintf ( "Fail" ) ;
}}
}
This is a straight forward program. Observe that the program uses nested if-elses.
This leads to three disadvantages:(a) As the number of conditions go on increasing the level ofindentation also goes on increasing. As a result the wholeprogram creeps to the right.(b) Care needs to be exercised to match the corresponding ifs and elses.(c) Care needs to be exercised to match the corresponding pair of braces.
All these three problems can be eliminated by usage of ‘Logical operators’.
Use of Logical Operators C allows usage of three logical operators, namely, &&, || and !.
These are to be read as ‘AND’ ‘OR’ and ‘NOT’ respectively. The first two operators, && and ||, allow two or more
conditions to be combined in an if statement.
Operands Results
x y !x !y x && y x || y
0 0 1 1 0 0
0 non-zero 1 0 0 0
non-zero 0 0 1 0 1
non-zero non-zero 0 0 1 1
void main( ){int m1, m2, m3, m4, m5, per ;printf ( "Enter marks in five subjects " ) ;scanf ( "%d %d %d %d %d", &m1, &m2, &m3, &m4, &m5 ) ;per = ( m1 + m2 + m3 + m4 + m5 ) / 5 ;if ( per >= 60 )
printf ( "First division" ) ;if ( ( per >= 50 ) && ( per < 60 ) )
printf ( "Second division" ) ;if ( ( per >= 40 ) && ( per < 50 ) )
printf ( "Third division" ) ;if ( per < 40 )
printf ( "Fail" ) ;}
Two distinct advantages in favour of this program:1) The matching of the ifs with their corresponding elses gets avoided, since there are no elses in this program.2) In spite of using several conditions, the program doesn't creep to the right. In the previous program the statements went on creeping to the right.
Control Instruction
alter our actions by circumstances. If the weather is fine, then I will go for a stroll If the highway is busy I would take a diversion notice that all these decisions depend on some condition being
met C language too must be able to perform different sets of
actions depending on the circumstances C has three major decision making instructions If statement if-else statement Logical Operators The conditional operators. switch statement
The Case Control Structure
make a choice between a number of alternatives rather than only one or two
Choice is more complicated than merely selecting between two alternatives.
C provides a special control statement that allows us to handle such cases effectively;
rather than using a series of if statements
Decisions Using switch switch ( integer expression )
{case constant 1 :
do this ;break;
case constant 2 :do this ;break;
case constant 3 :do this ;break;
default :do this ;
}
Integer expression that will yield an integer value Integer constant or expression that evaluates integer keyword case is followed by an integer or a character
constant.
If a = 10, b = 12, c = 0, find the values of the expressions in the following table:
Expression Valuea != 6 && b > 5
a == 9 || b < 3
! ( a < 10 )
! ( a > 5 && c )
5 && c != 8 || !c
What would be the output of the following programs:
void main( ){char suite = 3 ;switch ( suite )
{case 1 :
printf ( "\nDiamond" ) ;case 2 :
printf ( "\nSpade" ) ;default :
printf ( "\nHeart") ;}
printf ( "\nI thought one wears a suite" ) ;}
void main( ){int c = 3 ;
switch ( c ){
case 'v' :printf ( "I am in case v \n" ) ;break ;
case 3 :printf ( "I am in case 3 \n" ) ;break ;
case 12 :printf ( "I am in case 12 \n" ) ;break ;
default :printf ( "I am in default \n" ) ;
}}
void main( ){int k, j = 2 ;switch ( k = j + 1 ){
case 0 :printf ( "\nTailor") ;
case 1 :printf ( "\nTutor") ;
case 2 :printf ( "\nTramp") ;
default :printf ( "\nPure Simple Egghead!" ) ;
}}
void main( ){int i = 0 ;switch ( i ){
case 0 :printf ( "\nCustomers are dicey" ) ;
case 1 :printf ( "\nMarkets are pricey" ) ;
case 2 :printf ( "\nInvestors are moody" ) ;
case 3 :printf ( "\nAt least employees are good" ) ;
}}
void main( ){int i = 1 ;int ch = 'a' + 'b' ;
switch ( ch ){case 'a' :case 'b' :
printf ( "\nYou entered b" ) ;case 'A' :
printf ( "\na as in apple" ) ;case 'b' + 'a' :
printf ( "\nYou entered a and b" ) ;}}
There are three ways for taking decisions in a program. First way is to use the if-else statement, second way is to use conditional operators and third way is to use the switch statement
The default scope of the if statement is only the next statement. So, to execute more than one statement they must be written in a pair of braces.
An if block need not always be associated with an else block. However, an else block is always associated with an if statement.
&& and || are binary operators, whereas, ! is a unary operator.
In C every test expression is evaluated in terms of zero and non-zero values. A zero value is considered to be false and a non-zero value is considered to be true.
Assignment statements used with conditional operators must be enclosed within a pair of parenthesis.
Increment and Decrement Operators
The increment operator ++ The decrement operator -- Precedence: lower than (), but higher than * / and % Associativity: right to left Increment and decrement operators can only be applied
to variables, not to constants or expressions
Increment Operator
If we want to add one to a variable, we can say: count = count + 1 ; Programs often contain statements that increment
variables, so to save on typing, C provides these shortcuts: count++ ; OR ++count ; Both do the same thing. They change the value of count by
adding one to it.
Post increment Operator
The position of the ++ determines when the value is incremented. If the ++ is after the variable, then the incrementing is done last (a post increment).
int amount, count ;
count = 3 ; amount = 2 * count++ ;
amount gets the value of 2 * 3, which is 6, and then 1 gets added to count.
So, after executing the last line, amount is 6 and count is 4.
Preincrement Operator
If the ++ is before the variable, then the incrementing is done first (a preincrement).
int amount, count ; count = 3 ; amount = 2 * ++count ;
1 gets added to count first, then amount gets the value of 2 * 4, which is 8.
So, after executing the last line, amount is 8 and count is 4.
#define These macro definitions allow constant values to be declared
for use throughout your code. Syntax:
#define CNAME value#define CNAME (expression)
#include <stdio.h> #define NAME "TechOnTheNet.com"
#define AGE 10 void main()
{ printf("%s is over %d years old.\n", NAME, AGE); }
Review Branching/Decision Logical Operator Conditional Operator Increment and Decrement Operator
The Loop Control Structure so far used either a sequential or a decision control
instruction. the calculations were carried out in a fixed order, an appropriate set of instructions were executed depending
upon the outcome of the condition being tested Exactly once The versatility of the computer lies in its ability to perform a
set of instructions repeatedly. This involves repeating some portion of the program either a
specified number of times or until a particular condition is being satisfied.
This repetitive operation is done through a loop control instruction.
Group of instructions that are executed repeatedly while(until) some condition remains true.
LoopsBranching
Condition Statementlist
T
F
Condition Statementlist
T
F
There are three methods by way of which we can repeat a part of a program. They are:
(a) Using a while statement(b) Using a for statement(c) Using a do-while statement
It is often the case in programming that you want to do something a fixed number of times
Ex. calculate gross salaries of ten different persons, Ex. Convert temperatures from centigrade to Fahrenheit for
15 different cities. The while loop is ideally suited for such cases.
The while Loop
Condition Statementlist T
F
while(Condition){ Statement list}
The while Loop
The general form of while is as shown below:
initialize loop counter ;while ( test loop counter using a condition ){
do this ;and this ;increment loop counter ;
}
/* Calculation of simple interest for 3 sets of p, n and r */void main ( ){int p, n, count ;float r, si ;count=1;While(count <= 3)
{printf ( "Enter values of p, n, and r " ) ;scanf ( "%d %d %f", &p, &n, &r ) ;si = p * n * r / 100 ;printf ( "Simple Interest = Rs.%f\n", si ) ;count=count+1; //count++;
}}
// or /* */its comment
In the place of condition there can be any other valid which expression evaluates to a non-zero value
while ( i + j*2)while ( i >= 10 && j <= 15)
Must test a condition that will eventually become falseint i = 1 ;while ( i <= 10 )
printf ( "%d\n", i ) ; We can also used decrement
int i = 5 ;while (i>= 1 ){ printf ("\nMake the computer literate!" ) ;
i = i - 1 ;}
Loop counter can be float also.float a = 10.0 ;while (a<10.5 ){
printf ("\n that’s execute!" ) ;a=a+0.1;
} What will be the output?
int i = 1 ;while ( i <= 32767){
printf ( "%d\n", i ) ;i=i+1;
}
Example 1: while
char ans = ‘n’;
while (ans != ‘Y’ && ans != ‘y’)
{printf(“Will you pass this exam?”);
scanf(“%c\n”,ans);}
Printf(“Great!!”);
(ans != ‘Y’ || ans != ‘y')
Can I put ; here?
No!!
Example 2: while
int no_times;
printf(“How many times do you want to say?”);scanf(“%d“,&no_times);
while (no_times != 0){
printf(“Hello!\n”);no_times--;
}
printf(“End!!”);
Will there be any problem?
while (no_times > 0)
What if one inputs –1?
Example 3: while
int a, b, sum;
printf(“This program will return the ”);
Printf(“summation of integers from a to b.\n\n”);
printf(“Input two integers a and b:”);printf(“%d%d”, &a, &b);
while (a <= b){
sum += a;a++;
}
printf(“The sum is %d”, sum);
sum = 0;
sum = sum + a;+= ,*=,-=,/=,%=
compound assignment operatorThey modify the value of the operand to the left of them.
Don’t forget to set sum = 0;
Example 4: while
int a, b, sum=0;
printf(“This program will return the sum ”);
printf( “of odd numbers between a and b.\n\n”);
printf(“Input two integers a and b:”);
scanf(“%d%d”, &a ,&b);
while (a <= b){ if (a % 2) sum += a; a++;}
printf(“The answer is ”,sum);
if (a % 2 == 0) a++;
while (a <= b){ sum += a; a += 2;}
3, 4, 5, 6 , 7
2, 3, 4, 5, 6 , 7
a b
Example 5: while 3N+1 problem
long n,i=0;
printf(“Input an integer:”);scanf(“%d”,&n);
while (n > 1){ if (n % 2) n = 3*n+1; else
n /= 2; printf(“%d:%d”,++i,n);}
printf(“Done!!”);
Will we always get out of a loop?
That is the question!! No one knows!
Input an integer:71:222:113:344:175:526:267:138:409:2010:1011:512:1613:814:415:216:1Done!!Press any key to continue
Input an integer:111:342:173:524:265:136:407:208:109:510:1611:812:413:214:1Done!!Press any key to continue
Input an integer:37591:112782:56393:169184:84595:253786:126897:38068..........83:1684:885:486:287:1Done!!Press any key to continue
Review Loops While loop
int i = 1 ;Printf(“How many times repeat these statements”);Scanf(“%d”,&n)while (i<= 10 ) //while(i<=n){ printf ("\nWelcome!" ) ;
i = i+1 ;}
Counter Controlled loop
char ans = ‘y’;
while (ans == ‘y’ && ans == ‘Y’)
{printf(“Enter students details”);
.......Printf(“Do you want to submit another student details”);Scanf(“%c”,&ans);
}........Printf(“Great!!”);
Condition Controlled loop
The for allows us to specify three things about a loop in a single line:
Setting a loop counter to an initial value. Testing the loop counter to determine whether its value has
reached the number of repetitions desired. Increasing the value of loop counter each time the program
segment within the loop has been executed.
The for Loop
for (Initialization_action; Condition; Condition_update){ statement_list;}
The general format for a for loop
/* Calculation of simple interest for 3 sets of p, n and r */main ( ){int p, n, count ;float r, si ;for ( count = 1 ; count <= 3 ; count = count + 1 )
{printf ( "Enter values of p, n, and r " ) ;scanf ( "%d %d %f", &p, &n, &r ) ;si = p * n * r / 100 ;printf ( "Simple Interest = Rs.%f\n", si ) ;
}}
The general format for a for loop
for (Initialization_action; Condition; Condition_update){ statement_list;}
int n,f=1;Printf(“ENter a number to find factorial”);scanf(“%d”,&n);
for (i=2; i<=n; i++){ f *= i;} printf(“The factorial of %d is %d ”,n,f);
1 2 3
Factorial of n is n(n-1)(n-2)...21
63
Compare: for and while
for (Initialization_action; Condition; Condition_update){ statement_list;}
int n,f=1;
cin >> n;
for (i=2; i<=n; i++){ f *= i;}
printf(“The factorial of %d is %d” ,n,f);
i=2;while (i<=n){ f *= i; i++;}
1 2 3
for (Initialization_action; Condition; Condition_update){ statement_list;}
64
int n,i;
n = 100;
for (i=1; i <= n; i++)
{ statement_list;}
int n,i;
n = 100;i = 1;
while (i <= n){ statement_list; i++;}
v.s.
• We can give several statements separated by commas in place of “Initialization”, “condition”, and “updating”.
for (fact=1, i=1; i<=10; i++)fact = fact * i;for (sum=0, i=1; i<=N, i++)sum = sum + i * i;
The comma operator
66
do-while
Condition
Statementlist
T
F
do {
Statement list} while (Condition);
; is required
do{
printf(“Will you pass this exam?”); scanf(“%c”,&ans);} while (ans != “Y”);
printf(“Great!!”);
67
Example 1: do-while
int i;
....
do {
printf( “Please input a number between 10 and 20:”; printf(“%d”,i);} while (i < 10 || i > 20);
......
Suppose your Rs 10000 is earning interest at 1% per month. How many months until you double your money ?
my_money=10000.0;n=0;while (my_money < 20000.0) {my_money = my_money*1.01;n++;}printf (“My money will double in %d months.\n”,n);
69
Break and Continuein a loops
The break statement in a for loop will force theprogram to jump out of the for loop immediately.
The continue statement in a for loop will force theprogram to update the loop condition and then check the condition immediately.
for (Initialization_action; Condition; Condition_update){ statement_list;}
70
Nested loops (loop in loop)
printf(“%d%d”,a,b);
for (int i = 0; i < a; i++){
for (int j=0; j<b; j++){ printf(“*”);}
}
****************************************************
b
a
Nested loops (2)
int a,b;Printf(“Enter two values”);scanf(“%d%d”,&a,&b);
for (int i = 0; i < a; i++){
for (int j=0; j<b; j++){ if (j > i)
break; printf(“*”);}
}
**********
b
a
72
Nested loops (3)
**********
b
a
int a,b;Printf(“Enter two values”);scanf(“%d%d”,&a,&b);
for (int i = 0; i < a; i++){ for (int j=0; j<b && j < i; j++)
{ printf(“*”);}
}
j <= i;
if (j > i) break;
73
Nested loops (4)
int a,b;
cin >> a >> b;
for (int i = 0; i < a; i++){
for (int j=0; j<b; j++){ if (j < i)
printf(“ ”); else
printf(“*”);}
}
**********************************************
b
a
=
74
Nested loops (5)
int a,i,j;scanf(“%d”,a);
for (i = 0; i < a; i++) { for (j=0; j<a; j++) {
if (j < a-i) printf(" ");
else printf("*"); }
for (j=0; j<a; j++) {if (j > i) break;printf("*");
}
}
****
************
********************
75
Break in a loop
do{
r = p % i;if (r == 0) break;i++;
} while (i < p);
The break statement in a loop will force theprogram to jump out of the loop immediately.
do {printf(“Will you pass this exam?”);
scanf(“%c”,&ans);
} while (ans != “Y” && ans != “y”);cout << “Great!!”;
if (ans == ‘y’ || ans == ‘Y’) break;
76
Continue in a loop
The continue statement in a loop will force the program to check the loop condition immediately.
do {printf(“Will you pass this exam?”);
scanf(“%c”,&ans);
if (and != ‘Y’ && ans != ‘y’) continue;
printf(“Great?”);
break;
} while (true);
....
Example 5: SUM = 12 + 22 + 32 +...+ N2
int main () {int N, count, sum;printf(“Enter limit of series”)scanf (“%d”, &N) ;sum = 0;count = 1;while (count <= N) {
sum = sum + count*count;count = count + 1;
}printf (“Sum = %d\n”, sum) ;return 0;}
1. Declare variables i,n,j integers ;x, t,s,r as float2. Input and read the limit of the sine series,n.3. Input and read the value of angle(in degree),x.4. Convert the angle in degree to radian,x=((x*3.1415)/180)5. Assign t=r and s=r.6. Initialize i as 2.7. Initialize j as 2.8. while(j<=n) repeat the steps a to d. a)Find t=(t*(-1)*r*r)/(i*(i+1)) b)Find s=s+t c)Increment i by 2. d)Increment j by 1.9. End while.10. Print the sum of the sine series,s.
Evaluate Sine Series: sin x = x - ((x^3)/3!) + ((x^5)/5!) - …………..
#include<stdio.h>#include<conio.h>void main() { int i,n,j,ch; float x,t,s,r; printf("\nENTER THE LIMIT"); scanf("%d",&n); printf("\nENTER THE VALUE OF x:"); scanf("%f",&x); r=((x*3.1415)/180); t=r; s=r; i=2; for(j=2;j<=n;j++) { t=(t*(-1)*r*r)/(i*(i+1)); s=s+t; i=i+2; } printf("\nSUM OF THE GIVEN SINE SERIES IS %4f",s);
Specifying “Infinite Loop”
• %d (print as a decimal integer)
• %6d (print as a decimal integer with a width of at least 6 wide)
• %f (print as a floating point)
• %4f (print as a floating point with a width of at least 4 wide)
• %.4f (print as a floating point with a precision of four characters after the decimal point)
• %3.2f (print as a floating point at least 3 wide and a precision of 2)
Formatted output