Conditionals
Download
Report
Transcript Conditionals
Conditionals
In many cases we want our program to make a
decision about whether a piece of code should be
executed or not, based on the truth of a condition.
For this we use conditionals
if statements
switch statements
1
Conditionals
Example:
IF score is higher than 50
THEN grade is PASS
ELSE grade is FAIL
In C++ this corresponds to
one statement with 3 parts:
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
2
Conditionals
Part 1 : the condition.
An expression that evaluates to TRUE or FALSE
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
3
Conditionals
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
Part 2 : the TRUE part.
A block of statements that
are executed if the condition
evaluates to TRUE
4
Conditionals
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
Part 3 : the FALSE part.
A block of statements that
are executed if the condition
evaluates to FALSE
5
Conditionals
Sometimes, we do not need a FALSE part:
if (gas_tank_state == EMPTY) {
fill_up_tank();
}
In that case, if the condition is FALSE, execution will
continue at the statement following the if-statement.
6
Conditionals
If the TRUE or the FALSE part consists of only one
statement, the curly braces may be omitted.
The following statements are equivalent:
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
if (score > 50)
grade = PASS;
else
grade = FAIL;
7
Conditionals
We often use cascading if-statements:
if (score > 90)
lettergrade = 'A';
else if (score > 75)
lettergrade = 'B';
else if (score > 60)
lettergrade = 'C';
else if (score > 50)
lettergrade = 'D';
else
lettergrade = 'F';
8
Conditionals
Cascading if-statements may sometimes be replaced
with a switch statement:
if (lettergrade == 'A')
cout << "Very good!";
else if (lettergrade == 'B')
cout << "Good!";
else if (lettergrade == 'C')
cout << "Adequate";
else cout << "Work harder!";
switch (lettergrade) {
case 'A': cout << "Very good!";
break;
case 'B': cout << "Good!";
break;
case 'C': cout << "Adequate";
break;
default: cout << "Work harder!";
break;
}
9
Conditionals
switch (expression) {
case value1: statements;
break;
case value2 : statements;
break;
...
default : statements;
break;
}
In English:
Check the value of expression.
Is it equal to value1? If yes, execute
the statements and break out
of the switch. If no,
Is it equal to value2? etc.
If it's not equal to any of the above,
execute the default statements
and then break out of the
switch
10
Conditionals
switch (expression) {
case value1: statements;
break;
case value2 : statements;
break;
...
default : statements;
break;
}
-- expression should evaluate to
either an int or a char
-- NEVER omit break; (see next
slide for an example of
what may happen)
-- ALWAYS have a default to
cover the case when none
of the above values match
11
Conditionals
This is equivalent to:
switch (lettergrade) {
case 'A':
case 'B':
case 'C':
case 'D':
cout << "You passed!";
break;
case 'F' :
cout << "You failed!";
break;
default:
cout << "You received a "
<< lettergrade;
}
if (lettergrade == 'A'
|| lettergrade == 'B'
|| lettergrade == 'C'
|| lettergrade == 'D')
cout << "You passed!";
else if (lettergrade == 'F')
cout << "You failed!";
else
cout << "You received a "
<< lettergrade;
12
Conditionals
int x = -1;
int y;
switch ( x ) {
case -1: y = 10;
case 1 : y = 20;
default : y = 30;
}
cout << y;
This piece of code prints 30 on the screen
x is -1, so the first case applies. y is assigned
the value 10. Since there is no break statement,
execution continues to the next case and
eventually y becomes 30 which is not what
we intended.
This event is called fall-through.
13
Loops
Loops repeat (iterate) a block of statements for a
number of times.
A terminating condition tells a loop when to stop
iterating (e.g. terminate after 10 iterations or
terminate when the user types NO)
Careful! If there is no terminating condition, then
your program will never finish
14
Loops
star
t
Pre-Test Loop
check condition
if false, exit the loop
if true, execute statements,
iterate:
check condition
if false, exit the loop
if true, execute
statements, iterate:
initialize condition
is(condition)true?
yes
{
block of statements;
etc.
The block of statements may not
be executed at all (if condition is
immediately false)
The condition must be updated
no
}
finish
15
Loops
Pre-Test Loop
count-driven :
uses a "counter" to determine how many times it iterates
Example:
every time the loop iterates, a counter variable is
incremented by one. When the counter reaches a specific
value, the condition becomes false and the loop
terminates.
event-driven :
uses an "event" to determine how many times it iterates
Example:
at each iteration the user is asked whether to continue. As
long as the user types "yes" the loop iterates. When the
user types "no" the condition becomes false and the loop
terminates.
16
for loops
Pre-test, mainly count-driven
Syntax:
Example:
for (init; condition; update) {
statements;
}
/* Frog lifetime*/
int days;
for (days =155; days > 0; days--) {
work_all_day();
sleep_all_night();
}
die_quietly();
17
while loops
Pre-test, mainly event-driven
Syntax:
while (condition) {
statements;
}
Example (event):
/* Frog Feeding */
while ( am_hungry() == TRUE && see_fly() == TRUE ) {
flick_tongue();
clamp_mouth();
swallow_fly();
}
18
while loops
Pre-test, mainly event-driven
Syntax:
while (condition) {
statements;
}
Example (counter):
/* Frog lifetime*/
int days;
days = 155;
/* initialize */
while ( days > 0 ) { /* condition */
work_all_day();
sleep_all_night();
days--;
/* update */
}
die_quietly();
19
star
t
Loops
Post-Test Loop
execute statements
check condition
if false, exit the loop
if true, iterate:
execute statements
check condition
if false, exit the loop
if true, iterate:
etc.
The block of statements is
always executed at least once
The condition must be updated
initialize condition
{
block of statements;
}
is(condition)true?
no
yes
finish
20
Loops
Post-test loops
The block of statements is ALWAYS executed at least once!
Often used for data validation (e.g. if the user types a wrong
selection, keep asking for a correct one)
A post-test loop may be count- or event-driven.
21
do-while loop
Post-test, mainly event driven
Syntax:
do {
statements;
} while (condition)
Example:
/* Frog mating*/
do {
have_mate = look_for_lady_frog();
} while ( have_mate == FALSE )
22
Loops
In some cases, we may need to break put of a loop
prematurely. To do that, we use a break statement.
Example:
int days;
float food,fat;
...
for( days = 155; days > 0; days--) {
work_all_day();
if ( food+fat < 0.01)
break;
sleep_all_night();
}
die_quietly();
23
Loops
In some cases, we may want to only execute part of
the body during an iteration. To do that, we use a
continue statement.
Example:
/* Frog feeding v2.0 */
while ( am_hungry() == TRUE && see_fly() == TRUE ) {
flick_tongue();
if (!caught_fly())
continue;
clamp_mouth();
swallow_fly();
}
24
break vs. continue vs. return
continue
it is used in loops
it means : skip the remaining statements in the loop body
and iterate again
break
it is used in loops and switch statements
it means : skip the remaining statements in this block, break
out of the block. When used in loops, it causes the loop to
terminate
return
it may be used anywhere in a function.
it means : terminate the function.
25