decision ii. csce 1062 outline boolean expressions switch statement (section 4.8)
TRANSCRIPT
CSCE 106 4
Boolean Assignment
bool type values are true and false Assignment statements have general form
variable = expression; E.g.: (for variable called same of type
bool)
same = true;
same = (x == y);
CSCE 106 5
Comparing Characters and Strings
Letters are in typical alphabetical order Upper and lower case significant Digit characters are also ordered as
expected String objects require string library
Compares corresponding pairs of characters
CSCE 106 10
Short Circuit Evaluation
(single == ‘y’ && gender == ‘m’ && age >= 18) If single condition is false, gender and age
conditions are not evaluated.
(single == ‘y’ || gender == ‘m’ || age >= 18) If single condition is true, gender and age
conditions are not evaluated.
CSCE 106 11
Additional Assignment Examples
inRange = (n > -10) && (n < 10); isLetter = ((‘A’ <= ch) && (ch <= ‘Z’)) ||
((‘a’ <= ch) && (ch <= ‘z’)); even = (n % 2 == 0);
CSCE 106 12
Writing bool Values
Boolean values are represented by integer values in C++ 0 for false non-zero (typically 1) for true
Outputting (or inputting) bool type values is done with integers
CSCE 106 15
Complements of Boolean Expressions (cont’d)
Complementing (or getting opposite of) boolean/logical expressions can be done in 2 ways: using logical operator ! (not) using DeMorgan’s Theorem
CSCE 106 16
DeMorgan’s Theorem
!(exp1 && exp2)
is the same as
!exp1 || !exp2
!(exp1 || exp2)
is the same as
!exp1 && !exp2
It explains how to complement a compound logical expression
CSCE 106 17
ExampleExpression
z <= x && x <= yComplement
!(z <= x && x <= y)the equivalent using DeMorgan’s theorem
!(z <= x) || !(x <= y)which is equivalent to (without the not “!”)
z > x || x > y
CSCE 106 19
Multiple Decision ExercisePlease write a multiple decision C++ segment to evaluate a letter grade, input by the user, and output the corresponding phrase according to the following table:
Grade OutputA or a ExcellentB or b GoodC or c FairD or d or F or f Pooranything else Invalid grade
CSCE 106 20
if (grade == ‘A’ || grade == ‘a’)
cout << “Excellent” << endl;
else if (grade == ‘B’ || grade == ‘b’)
cout << “Good” << endl;
else if (grade == ‘C’ || grade == ‘c’)
cout << “Fair” << endl;
else if (grade == ‘D’ || grade == ‘d’ || grade == ‘F’ || grade == ‘f’)
cout << “Poor” << endl;
else cout << “Invalid grade” << endl;
switch (grade) { case ‘A’: case ‘a’:
cout << “Excellent” << endl;
break;
case ‘B’: case ‘b’:
cout << “Good” << endl;
break;case ‘C’: case ‘c’:
cout << “Fair” << endl;
break;case ‘D’: case ‘d’:case ‘F’: case ‘f’:
cout << “Fair” << endl;
break;
default:
cout << “Invalid grade” << endl;}
Code Segmentsswitch selector
case label
optional
CSCE 106 21
The switch Control Statementswitch (selector ) { case label1: statements1;
break;
case label2: statements2;
break;.
.
.
case label10: statements10;
break;
default: statementsd; // optional}
CSCE 106 22
switch Control Statement (cont’d) Used in C++ to select one of several
alternatives. Alternative to multiple if statements in some
cases. Especially useful when the selection (called
the switch selector) is based on the value of a single variable or a simple expression.
switch selector must be of type int, char, or bool only.
CSCE 106 23
switch Control Statement (cont’d)
switch selector value compared to each case label. When there is an exact match, statements for that case are executed.
If no case label matches the selector, the entire switch body is skipped unless it contains a default case label.
break is typically used between cases to avoid fall through.
CSCE 106 25
switch Control Statement (cont’d) You have to use a formula to convert ranges to
an integer, so as to be able to use a switch statement.
For example, if you are asked to use a switch statement to give the following corresponding outputs for some given ranges:
Final GPA Honorary Degree3.80 <= GPA <= 4.00 Highest Honours3.60 <= GPA < 3.80 High Honours3.40 <= GPA < 3.60 Honours2.00 <= GPA < 3.40 Pass with no Honours
CSCE 106 26
switch Control Statement (cont’d)Here is one example for a formula that works, together with its corresponding case statements, provided that you check the range of GPA when input before:
int x = GPA *10;
switch (x){ case 40: case 39: case 38: cout<<“Highest Honours”; break; case 37: case 36: cout<<“High Honours”; break; case 35: case 34: cout<<“Honours”; break; default: cout<<“Pass with no Honours”; break;}