control structures selection or decision or branching
TRANSCRIPT
Control Structures
Selection
or
Decision
or
Branching
Decision
Which the statements are executed
Two types:simple alternative ifcompound alternative if...else
Single Alternative Decision
An action is taken if the condition is true,
otherwise the control goes to the next
statement.
Syntaxif (expression)
statementIf expression is true, statement is executed; otherwise statement is skipped.
no ;
* *
Single Alternative Decision
Example:if (stomach if (stomach == empty) empty)
eat a Snickers bar; eat a Snickers bar;
note: 2 == signs
An expression is any combination of variables, constants, or function calls thatevaluate to a value.
•
ex. 5 x + y a = 3 + jN n++ f(12.3, a, “Yvonne”)
Syntaxif (expression)
statement
Single Alternative Decision
* *
Syntaxif (expression)
statementIf expression is true, statement is executed; otherwise statement is skipped.
no ;
* *
Single Alternative Decision
Example:if (stomach if (stomach ==== empty) empty)
eat a Snickers bar; eat a Snickers bar; eat a marshmallow sunday; eat a marshmallow sunday;
note: 2 == signs
Single Alternative Decision
Example:if (grade >= 90)if (grade >= 90) cout << “Congratulations!\n”; cout << “Congratulations!\n”;cout << “Your grade is “ << grade << “.\n";
The Compound Statement
Syntaxif (expression){{ statement; statement; if (expression) { statement; statement; } }}
Example:if (u > v){{
a = 1;b = 2;
if ( u > z){
x =11;y = 12;
}}}
* * ** *
The compound statement is itself a statement.
ifif Examples
Valid:Valid:
if (y != 0.0) z = x/y;
if (a < b && b < c) {
d = a + b + c; cout << "All OK\n";
}
* *
Not ValidNot Valid:
if b == a area = a * a;
if (a < b) && (b < c)if (a < b) ;
Valid But... Valid But... if (a < b) ;
ifif Problems
Using Using == in place of in place of ====
What is the difference between these two?
if (toss == 7)if (toss == 7)
cout << “You win the bet.”;cout << “You win the bet.”;
if (toss = 7)if (toss = 7)cout << “You win the bet.”;cout << “You win the bet.”;
Compounding 2 ifif Statementsif (j < k){ min = j;
cout << “the smaller number is “ << min;}if (j < k)
cout << "j is smaller than k\n";
More EfficientMore Efficient::if (j < k){ min = j;
cout << “the smaller number is “ << min;cout << "j is smaller than k\n"; } * *
Double Alternative Decision
An action (or set of actions) is taken if the condition is true, another action (or set of actions) is taken if the condition is false, then the control goes to the next statement.
if ... elseif ... else is the typical double alternative.
* *
The if-elseif-else Statement Syntax
if (expression)statement1
elsestatement2
If expression is nonzero then statement1 is executed and statement2 is skipped. If expression is zero statement1 is skipped and statement2 is executed.
if ... elseif ... else Examples
if (stomach == empty)
{ eat a pizza;
eat a Snickers bar;}
else eat a salad;
if ( j < k ){ min = j;
k = k * 3;}else{
min = k;j = j * 3;
} * *
Interactive Program Finding the minimum of three values
Finding the Minimum of Three Values
* * *
int x, y, z, min;cout << “Input three integers: “;cin >> x >> y >> z;if (x < y)
min = x;else
min = y;
if (z < min)min = z;
cout << “The minimum value is “ << min << ‘\n’;
Output:
Input three integers:
Interactive Program Finding the minimum of three values
* *
9 5 -12
The minimum value is -12_
The if-elseif-else Statement Syntax
if (expression)
statement1else
statement2
if (a > b)if (a > b)max = a;max = a;
elseelsemax = b;max = b;
expression1 ? expression2 : expression3
max = (a > b) ? a : b;
* * *
Nested ifif Statements
A nested if statement is an if statement that is included within another if statement.
Syntax
if (expression1)
{ if (expression2)
statement
}
Nested ifif Example
if (number == secretnumber) cout << “You guessed it!”;if (number != secretnumber){ cout << “Sorry, that’s not the number.\n”;
if (number > secretnumber) cout << “You guessed too high.\n”;
else cout << “You guessed too low.\n”;
} * *
2 statement1 3 else if (expression2) 4 statement2 5 . . .
6 else if (expressionN) 7 statementN 8 else 9 last statement10 next statement *
Chained if...elseif...else Example
Syntax 1 if (expression1)
Chained if...elseif...else Example
if (total >=90)grade = ‘A’;
else if (total >= 80)grade = ‘B’;
else if (total >= 70)grade = ‘C’;
else if (total >= 60)grade = ‘D’;
elsegrade = ‘E’;
next statement* *
The Dangling elseelseif (avg >= 60.0)
if (avg < 70.0)cout << “Passing, but marginal”; elsecout << “Failing”;
* *
if (avg >= 60.0){
if (avg < 70.0)cout << “Passing, but marginal”;
}else
cout << “Failing”;
The Dangling elseelse
if (avg >= 60.0){
if (avg < 70.0)cout << “Passing, but marginal”;
}else
cout << “Failing”;
AND vs. OR
if( (rel == 'S') && (rel == 'M') && (rel == 'F') )cout << "\nImmediate family.\n";
if( (rel != 'S') && (rel != 'M') && (rel != 'F') ){
cout << "\nNot immediate family,\n";cout << " but a close relation.\n";
}
Random Numbers#include<stdlib.h>#include<stdlib.h> // defines rand() & srand()// defines rand() & srand()
#include<time.h>#include<time.h> // defines time()// defines time()
in main():
srand(time(NULL));srand(time(NULL));
num1 = 1 + rand() % 3;num1 = 1 + rand() % 3;
num1 = 1 + rand() % 6;num1 = 1 + rand() % 6;
num1 = 6 + rand() % 5;num1 = 6 + rand() % 5;
1, 2, 31, 2, 3, 4, 5, 66, 7, 8, 9, 10
how many numbers
* * * starting number
The switchswitch Statement
Similar to if statements
Can list any number of branches
Used in place of nested if statements
Avoids confusion of deeply nested ifs
The switchswitch StatementSyntax switch (expression)
{case value1:
statement1;break;
case value2:statement2;break;
case valuen:
statementn;break;
default:statement;
}
no no ;;useuse : :
* *
The switchswitch StatementSyntax switchswitch (expression)
{case value1:
statement1;breakbreak;
case value2:statement2;breakbreak;
case valuen:
statementn;breakbreak;
defaultdefault:statement;
}
no no ;;useuse : :
The switchswitch Statementswitch (let_grd){
case ‘A’:cout << “Grade is between 90 & 100”;break;
case ‘B’:cout << “Grade is between 80 & 89”;break;
case ‘C’:cout << “Grade is between 70 & 79”;break;
cont.
The switchswitch Statementcase ‘D’:
cout << “Grade is between 60 & 69”;break;
case ‘E’:cout << “Grade is between 0 & 59”;break;
default:cout << “You entered an invalid grade.”;
}next statementnext statement
The switchswitch Statementswitch (let_grd){
case ‘A’:cout << “Grade is between 90 & 100”;break;
case ‘B’:cout << “Grade is between 80 & 89”;break;
case ‘C’:cout << “Grade is between 70 & 79”;break;
case ‘D’:cout << “Grade is between 60 & 69”;break;
case ‘E’:cout << “Grade is between 0 & 59”;break;
default:cout << “You entered an invalid grade.”;
}
The breakbreak Statementswitch (let_grd){
case ‘A’:cout << “Grade is between 90 & 100”;break;
case ‘B’:cout << “Grade is between 80 & 89”;break;
case ‘C’:cout << “Grade is between 70 & 79”;break;
case ‘D’:cout << “Grade is between 60 & 69”;break;
case ‘E’:cout << “Grade is between 0 & 59”;break;
default:cout << “You entered an invalid grade.”;
}
The breakbreak Statement
switch (let_grd){
case ‘A’:case ‘B’: cout << “Good Work”;
break;case ‘C’: cout << “Average Work”;
break;case ‘D’:case ‘E’: cout << “Poor Work”;
}
The breakbreak Statement
switch (let_grd){
case ‘A’:case ‘a’:case ‘B’:case ‘b’: cout << “Good Work”;
break;case ‘C’:case ‘c’: cout << “Average Work”;
break;etc.
The switchswitch Statement
* * * * Menu * * * *
1. NY Yankees
2. Orioles
3. Dodgers
Choose either 1, 2, or 3:
The switchswitch Statement
switch (choice){ case 1:
cout << “World Champs”; case 2:
cout << “Good Guys”; case 3:
cout << “Da Bums”;}
What will be
the output?
The switchswitch Statement
What will be the output when the user enters
1 World ChampsGood GuysDa Bums
2 Good GuysDa Bums
3 Da Bums
* * * ** * * *
4 skips the switch
The switchswitch Statement
*
switch (choice){ case 1:
cout << “World Champs”; case 2:
cout << “Good Guys”; case 3:
cout << “Da Bums”;}
switch (choice){ case 1:
cout << “World Champs”; break;
case 2: cout << “Good Guys”; break;
case 3: cout << “Da Bums”; break;
default: cout << “Enter a 1, 2, or 3”;
}
Common Errors
Using = in place of ==Using = in place of ==
Improper braces in nested ifsImproper braces in nested ifs
Too deeply nested ifsToo deeply nested ifs
Missing Missing breakbreak statements in switch the statements in switch the statementstatement
Copyright © 1999 by Freedom TLC, Inc.
DebuggingDebugging
Syntax errors vs. Logic error
Prevention - plan first!Valuation tablesDisplay values
C++ Debugger
Copyright © 1999 by Freedom TLC, Inc.
““I discovered I always have I discovered I always have
choices, and sometimes it’s choices, and sometimes it’s
only a choice of attitude”only a choice of attitude”
Judith M. KnowltonJudith M. Knowlton
Copyright © 1999 by Freedom TLC, Inc.