Program Output with Example Input

advertisement
Chapter 4
Making Decisions
Namiq Sultan
University of Duhok
Department of Electrical and Computer Engineerin
Reference: Starting Out with C++, Tony Gaddis, 2nd Ed.
C++ Programming, Namiq Sultan
1
4.1 Relational Operators
• Relational operators allow you to compare numeric values
and determine if one is greater than, less than, equal to, or
not equal to another.
C++ Programming, Namiq Sultan
2
Table 4-1
Relational Operators
(in Order of Precedence)
>
Meaning
<
Less than
>=
Greater than or equal to
<=
Less than or equal to
==
Equal to
!=
Not equal to
Greater than
C++ Programming, Namiq Sultan
3
Table 4-2
Expression
X>Y
What the Expression Means
Is X greater than Y?
X<Y
Is X less than Y?
X >= Y
Is X greater than or equal to Y?
X <= Y
Is X less than or equal to Y?
X == Y
Is X equal to Y?
X != Y
Is X not equal to Y?
C++ Programming, Namiq Sultan
4
The Value of a Relationship
• Relational expressions are also know as a Boolean expression
• Warning! The equality operator is two equal signs together
==
C++ Programming, Namiq Sultan
5
Table 4-3
Assume x is 10 and y is 7
Expression
Value
x<y
False, because x is not less than y.
x>y
True, because x is greater than y.
x >= y
True, because x is greater than or equal to y.
x <= y
False, because x is not less than or equal to y.
y != x
True, because y is not equal to x.
C++ Programming, Namiq Sultan
6
Program 4-1
// This program displays the values of true and false states.
#include <iostream>
using namespace std;
int main()
{
int trueValue, falseValue, x = 5, y = 10;
trueValue = x < y;
falseValue = y== x;
cout << "True is " << trueValue << endl;
cout << "False is " << falseValue << endl;
}
Program Output
True is 1
False is 0
C++ Programming, Namiq Sultan
7
4.2 The if Statement
• The if statement can cause other statements to execute only
under certain conditions.
C++ Programming, Namiq Sultan
8
Program 4-2
// This program averages 3 test scores
#include <iostream>
using namespace std;
int main(void)
{
int score1, score2, score3;
float average;
cout << "Enter 3 test scores and I will average them: ";
cin >> score1 >> score2 >> score3;
average = (score1 + score2 + score3) / 3.0;
cout << "Your average is " << average << endl;
if (average > 95)
cout << "Congratulations! That's a high score!\n";
}
C++ Programming, Namiq Sultan
9
Program Output with Example Input
Enter 3 test scores and I will average them: 80 90 70 [Enter]
Your average is 80
Program Output with Other Example Input
Enter 3 test scores and I will average them: 100 100 100 [Enter]
Your average is 100
Congratulations! That's a high score!
C++ Programming, Namiq Sultan
10
Table 4-5
Statements
if (Hours > 40)
OverTime = 1;
Outcome
Assigns 1 to OverTime only when
Hours is greater than 40
if (Value > 32)
cout << "Invalid number\n";
Displays the message “Invalid
number” only when Value is greater
than 32
if (OverTime == 1)
PayRate *= 2;
Multiplies PayRate by 2 only when
OverTime is equal to 1
C++ Programming, Namiq Sultan
11
Be Careful With Semicolons
if (expression)
statement;
• Notice that the semicolon comes after the statement that gets
executed if the expression is true; the semicolon does NOT
follow the expression
False
Expression
True
Statement(s)
C++ Programming, Namiq Sultan
12
Program 4-3
// This program demonstrates how a misplaced semicolon
// prematurely terminates an if statement.
#include <iostream>
using namespace std;
int main()
{
int x = 0, y = 10;
cout << “x is " << x << " and y is " << y << endl;
if (x > y);
// misplaced semicolon!
cout << “x is greater than y\n";
// Always executed
}
Program Output
X is 0 and Y is 10
X is greater than Y
C++ Programming, Namiq Sultan
13
Programming Style and the if Statement
• The conditionally executed statement should appear on the
line after the if statement.
• The conditionally executed statement should be indented
one “level” from the if statement.
• Note: Each time you press the tab key, you are indenting
one level.
C++ Programming, Namiq Sultan
14
And Now Back to Truth
• When a relational expression is true, it has the value 1.
• When a relational expression is false it has the value 0.
• An expression that has the value 0 is considered false by
the if statement.
• An expression that has any value other than 0 is considered
true by the if statement.
C++ Programming, Namiq Sultan
15
• Consider the following statement:
if (x = 2)
// caution here!!!!
cout << “It is True!”;
• This statement does not determine if x is equal to 2, it
assigns x the value 2, therefore, this expression will always
be true because the value of the expression is 2, a non-zero
value
C++ Programming, Namiq Sultan
16
Program 4-5
// This program averages 3 test scores. The if statement uses
// the = operator, but the == operator was intended.
#include <iostream>
using namespace std;
int main()
{
int score1, score2, score3;
float average;
cout << "Enter 3 scores and I will average them:";
cin >> score1 >> score2 >> score3;
average = (score1 + score2 + score3) / 3.0;
cout << "Your average is " << average << endl;
if (average = 100) // Wrong
cout << "Congratulations! That's a high score!\n";
}
C++ Programming, Namiq Sultan
17
Program Output with Example Input
Enter your 3 test scores and I will average them: 80 90 70[Enter]
Your average is 80
Congratulations! That’s a perfect score!
C++ Programming, Namiq Sultan
18
4.3 Flags
• A flag is a variable, usually a boolean or an integer, that
signals when a condition exists.
• If your compiler does not support the bool data type, use
int instead.
C++ Programming, Namiq Sultan
19
Program 4-6
// This program averages 3 test scores. It uses the variable highScore as a flag.
#include <iostream>
using namespace std;
int main( )
{
int score1, score2, score3;
float average;
bool highScore = false;
cout << "Enter your 3 test scores and I will average them: ";
cin >> score1 >> score2 >> score3;
average = (score1 + score2 + score3) / 3.0;
if (average > 95)
highScore = true;
// Set the flag variable
cout << "Your average is " << average << endl;
if (highScore)
cout << "Congratulations! That's a high score!\n";\
}
C++ Programming, Namiq Sultan
20
Program 4-6
Program Output with Example Input
Enter your 3 test scores and I will average them: 100 100 100 [Enter]
Your average is 100.0
Congratulations! That's a high score!
C++ Programming, Namiq Sultan
21
4.4 Expanding the if Statement
• The if statement can conditionally execute a block of statement
enclosed in braces.
if (expression)
{
statement;
statement;
// Place as many statements here as necessary.
}
C++ Programming, Namiq Sultan
22
Program 4-7
// This program averages 3 test scores.
// It uses the variable highScore as a flag.
#include <iostream>
using namespace std;
int main(void)
{
int score1, score2, score3;
float average;
bool highScore = false;
cout << "Enter 3 test scores and I will average them: ";
cin >> score1 >> score2 >> score3;
average = (score1 + score2 + score3) / 3.0;
if (average > 95)
highScore = true; // Set the flag variable
C++ Programming, Namiq Sultan
23
cout << "Your average is " << average << endl;
if (highScore)
{
cout << "Congratulations!\n";
cout << "That's a high score.\n";
cout << "You deserve a pat on the back!\n";
}
}
C++ Programming, Namiq Sultan
24
Program Output with Example Input
Enter your 3 test scores and I will average them: 100 100 100 [Enter]
Your average is 100.0
Congratulations!
That's a high score.
You deserve a pat on the back!
Program Output with Different Example Input
Enter your 3 test scores and I will average them: 80 90 70 [Enter]
Your average is 80.0
C++ Programming, Namiq Sultan
25
Don’t Forget the Braces!
• If you intend to execute a block of statements with an if
statement, don’t forget the braces.
• Without the braces, the if statement only executes the very
next statement.
C++ Programming, Namiq Sultan
26
4.5
The if/else Statement
• The if/else statement will execute one group of statements if the
expression is true, or another group of statements if the
expression is false.
if (expression)
statement or block of statements;
else
statement or block of statements;
False
Statement(s)
expression
True
Statement(s)
C++ Programming, Namiq Sultan
27
Program 4-9
// This program uses the modulus operator to determine
// if a number is odd or even. If the number is evenly divided
// by 2, it is an even number. A remainder indicates it is odd.
#include <iostream>
using namespace std;
int main()
{
int number;
cout << "Enter an integer and I will tell you if it\n";
cout << "is odd or even. ";
cin >> number;
if (number % 2 == 0)
cout << number << " is even.\n";
else
cout << number << " is odd.\n";
}
C++ Programming, Namiq Sultan
28
Program Output with Example Input
Enter an integer and I will tell you if it
is odd or even. 17 [Enter]
17 is odd.
C++ Programming, Namiq Sultan
29
Program 4-10
// This program asks the user for two numbers, num1 and num2.
// num1 is divided by num2 and the result is displayed.
// Before the division operation, however, num2 is tested
// for the value 0. If it contains 0, the division does not take place.
#include <iostream>
using namespace std;
int main()
{
float num1, num2, quotient;
cout << "Enter a number: ";
cin >> num1;
cout << "Enter another number: ";
cin >> num2;
C++ Programming, Namiq Sultan
30
if (num2 == 0)
{
cout << "Division by zero is not possible.\n";
cout << "Please run the program again and enter\n";
cout << "a number besides zero.\n";
}
else
{
quotient = num1 / num2;
cout << "The quotient of " << num1 << " divided by ";
cout << num2 << " is " << quotient << ".\n";
}
}
C++ Programming, Namiq Sultan
31
Program Output
(When the user enters 0 for num2)
Enter a number: 10 [Enter]
Enter another number: 0 [Enter]
Division by zero is not possible.
Please run the program again and enter
a number besides zero.
C++ Programming, Namiq Sultan
32
4.6
The if/else if Construct
• The if/else if statement is a chain of if statements. They
perform their tests, one after the other, until one of them is
found to be true.
if (expression)
statement or block of
else if (expression)
statement or block of
//
// put as many else it’s
//
else if (expression)
statement or block of
statements;
statements;
as needed here
statements;
C++ Programming, Namiq Sultan
33
Program 4-11
// This program uses an if/else if statement to assign a
// letter grade (A,B,C,D,or F) to a numeric test score.
#include <iostream>
using namespace std;
int main()
{
int testScore;
char grade;
cout << "Enter your numeric test score and I will\n";
cout << "tell you the letter grade you earned: ";
cin >> testScore;
C++ Programming, Namiq Sultan
34
if (testScore < 60)
grade = 'F';
else if (testScore < 70)
grade = 'D';
else if (testScore < 80)
grade = 'C';
else if (testScore < 90)
grade = 'B';
else if (testScore <= 100)
grade = 'A';
cout << "Your grade is " <<
grade << ".\n";
T
exprn
Statement(s)
F
T
Statement(s)
exprn
F
T
exprn
Statement(s)
F
T
exprn
Statement(s)
F
}
Statement(s)
C++ Programming, Namiq Sultan
35
Program Output with Example Input
Enter your test score and I will
tell you the letter grade you earned: 88 [Enter]
Your grade is B.
C++ Programming, Namiq Sultan
36
Program 4-12
// This program uses independent if/else statements to assign a
// letter grade (A, B, C, D, or F) to a numeric test score.
// Do you think it will work?
#include <iostream>
using namespace std;
int main( )
{
int testScore;
char grade;
cout << "Enter your test score and I will tell you\n";
cout << "the letter grade you earned: ";
cin >> testScore;
C++ Programming, Namiq Sultan
37
if (testScore < 60)
grade = 'F';
if (testScore < 70)
grade = 'D';
if (testScore < 80)
grade = 'C';
if (testScore < 90)
grade = 'B';
if (testScore <= 100)
grade = 'A';
cout << "Your grade is " << grade <<
".\n";
}
T
exprn
Statement(s)
F
T
Statement(s)
exprn
F
T
exprn
Statement(s)
F
T
exprn
Statement(s)
F
Statement(s)
C++ Programming, Namiq Sultan
38
Program Output with Example Input
Enter your test score and I will tell you
the letter grade you earned: 40 [Enter]
Your grade is A.
C++ Programming, Namiq Sultan
39
Program 4-13
//This program uses an if/else if statement to
//assign a letter grade ( A, B, C, D, or F )
//to a numeric test score.
#include <iostream>
using namespace std;
int main()
{
int testScore;
cout << "Enter your test score and I will tell you\n";
cout << "the letter grade you earned: ";
cin >> testScore;
if (testScore < 60)
{
cout << "Your grade is F.\n";
cout << "This is a failing grade. Better see your ";
cout << "instructor.\n";
}
C++ Programming, Namiq Sultan
40
else if (testScore < 70)
{
cout << "Your grade is D.\n";
cout << "This is below average. You should get ";
cout << "tutoring.\n";
}
else if (testScore < 80)
{
cout << "Your grade is C.\n";
cout << "This is average.\n";
}
else if (testScore < 90)
{
cout << "Your grade is B.\n";
cout << "This is an above average grade.\n";
}
C++ Programming, Namiq Sultan
41
else if (testScore <= 100)
{
cout << "Your grade is A.\n";
cout << "This is a superior grade. Good work!\n";
}
}
Program Output with Example Input
Enter your test score and I will tell you
the letter grade you earned: 94 [Enter]
Your grade is A.
This is a superior grade. Good work!
C++ Programming, Namiq Sultan
42
4.7
Using a Trailing else
• A trailing else, placed at the end of an if/else if statement,
provides default action when none of the if’s have true
expressions
C++ Programming, Namiq Sultan
43
Program 4-14
// This program uses an if/else if statement to assign a
// letter grade (A, B, C, D, or F) to a numeric test score.
// A trailing else has been added to catch test scores > 100.
#include <iostream>
using namespace std;
int main()
{
int testScore;
cout << "Enter your test score and I will tell you\n";
cout << "the letter grade you earned: ";
cin >> testScore;
C++ Programming, Namiq Sultan
44
if (testScore < 60)
{
cout << "Your grade is F.\n";
cout << "This is a failing grade. Better see your ";
cout << "instructor.\n";
}
else if (testScore < 70)
{
cout << "Your grade is D.\n";
cout << "This is below average. You should get ";
cout << "tutoring.\n";
}
C++ Programming, Namiq Sultan
45
else if (testScore < 80)
{
cout << "Your grade is C.\n";
cout << "This is average.\n";
}
else if (testScore < 90)
{
cout << "Your grade is B.\n";
cout << "This is an above average grade.\n";
}
C++ Programming, Namiq Sultan
46
else if (testScore <= 100)
{
cout << "Your grade is A.\n";
cout << "This is a superior grade. Good work!\n";
}
else // Default action
{
cout << testScore << " is an invalid score.\n";
cout << "Please enter scores no greater than 100.\n";
}
}
C++ Programming, Namiq Sultan
47
Program Output with Example Input
Enter your test score and I will tell you
the letter grade you earned: 104 [Enter]
104 is an invalid score.
Please enter scores no greater than 100.
C++ Programming, Namiq Sultan
48
4.9 Nested if Statements
• A nested if statement is an if statement in the
conditionally-executed code of another if statement.
C++ Programming, Namiq Sultan
49
Program 4-16
// This program demonstrates the nested if statement.
#include <iostream>
using namespace std;
int main()
{
char employed, recentGrad;
cout << "Answer the following questions\n";
cout << "with either Y for Yes or ";
cout << "N for No.\n";
cout << "Are you employed? ";
cin >> employed;
cout << "Have you graduated from college ";
cout << "in the past two years? ";
cin >> recentGrad;
C++ Programming, Namiq Sultan
50
if (employed == 'Y')
{
if (recentGrad == 'Y') // Nested if
{
cout << "You qualify for the special ";
cout << "interest rate.\n";
}
}
}
C++ Programming, Namiq Sultan
51
Program Output with Example Input
Answer the following questions
with either Y for Yes or N for No.
Are you employed? Y[Enter]
Have you graduated from college in the past two years? Y[Enter]
You qualify for the special interest rate.
C++ Programming, Namiq Sultan
52
Program Output with Other Example Input
Answer the following questions
with either Y for Yes or N for No.
Are you employed? Y[Enter]
Have you graduated from college in the past two years? N[Enter]
C++ Programming, Namiq Sultan
53
4.10 Logical Operators
• Logical operators connect two or more relational
expressions into one, or reverse the logic of an expression.
C++ Programming, Namiq Sultan
54
Table 4-6
Operator
Meaning
Effect
&&
AND
Connects two expressions into one. Both
expressions must be true for the overall
expression to be true.
||
OR
Connects two expressions into one. One or
both expressions must be true for the overall
expression to be true. It is only necessary for
one to be true, and it does not matter which.
!
NOT
The ! operator reverses the “truth” of an
expression. It makes a true expression false,
and a false expression true.
C++ Programming, Namiq Sultan
55
Table 4-7
Expression 1
True
Expression 2
False
Expression 1 && Expression 2
False (0)
False
True
False (0)
False
False
False (0)
True
True
True (1)
C++ Programming, Namiq Sultan
56
Program 4-18
// This program demonstrates the && logical operator.
#include <iostream>
using namespace std;
int main()
{
char employed, recentGrad;
cout << "Answer the following questions\n";
cout << "with either Y for Yes or ";
cout << "N for No.\n";
cout << "Are you employed? ";
cin >> employed;
C++ Programming, Namiq Sultan
57
cout << "Have you graduated from college ";
cout << "in the past two years? ";
cin >> recentGrad;
if (employed == 'Y‘ && recentGrad == 'Y')
// && Operator
{
cout << "You qualify for the special ";
cout << "interest rate.\n";
}
else
{
cout << "You must be employed and have \n";
cout << "graduated from college in the\n";
cout << "past two years to qualify.\n";
}
}
C++ Programming, Namiq Sultan
58
Program Output with Example Input
Answer the following questions
with either Y for Yes or
N for No.
Are you employed? Y[Enter]
Have you graduated from college in the past two years? N[Enter]
You must be employed and have
graduated from college in the
past two years to qualify.
C++ Programming, Namiq Sultan
59
Table 4-8
Expression 1
Expression 2
Expression 1 || Expression 2
True
False
True (1)
False
True
True (1)
False
False
False (0)
True
True
True (1)
C++ Programming, Namiq Sultan
60
Table 4-9
Expression
True
False
!(Expression)
False (0)
True (1)
C++ Programming, Namiq Sultan
61
Program 4-20
//This program asks the user for his annual income and
//the number of years he has been employed at his current job.
//The ! operator reverses the logic of the expression in the if/else statement.
#include <iostream>
using namespace std;
int main()
{
float income; int years;
cout << "What is your annual income? ";
cin >> income;
cout << "How many years have you worked at " << "your current job? ";
cin >> years;
if (!(income >= 35000 || years > 5)) // Uses the ! Logical operator
{
cout << "You must earn at least $35,000 or have\n";
cout << "been employed for more than 5 years.\n";
}
else
cout << "You qualify.\n";
C++ Programming, Namiq Sultan
62
}
Precedence of Logical Operators
!
&&
||
C++ Programming, Namiq Sultan
63
4.11 Checking Numeric Ranges With Logical Operators
• Logical operators are effective for determining if a number
is in or out of a range.
C++ Programming, Namiq Sultan
64
4.15 The Conditional Operator
• You can use the conditional operator to create short
expressions that work like if/else statements
expression ?
X<0
?
result if true
:
result if false;
Y = 10
:
Z = 20;
C++ Programming, Namiq Sultan
65
Program 4-29
// This program calculates a consultant's charges at $50 per hour, for a minimum of
// 5 hours. ?: operator adjusts hours to 5 if less than 5 hours were worked.
#include <iostream>
using namespace std;
int main()
{
const float payRate = 50.0;
float hours, charges;
cout << "How many hours were worked? ";
cin >> hours;
hours = hours < 5 ? 5 : hours;
charges = payRate * hours;
cout << "The charges are $" << charges << endl;
}
C++ Programming, Namiq Sultan
66
Program Output with Example Input
How many hours were worked? 10 [Enter]
The charges are $500.00
Program Output with Example Input
How many hours were worked? 2 [Enter]
The charges are $250.00
C++ Programming, Namiq Sultan
67
4.16 The switch Statement
• The switch statement lets the value of a variable or
expression determine where the program will branch to.
C++ Programming, Namiq Sultan
68
Program 4-31
// The switch statement in this program tells the user
// something he or she already knows: what they just entered!
#include <iostream>
using namespace std;
int main(void)
{
char choice;
cout << "Enter A, B, or C: ";
cin >> choice;
C++ Programming, Namiq Sultan
69
switch (choice)
{
case 'A': cout << "You entered A.\n";
break;
case 'B’: cout << "You entered B.\n";
break;
case 'C’: cout << "You entered C.\n";
break;
default: cout << "You did not enter A, B, or C!\n";
}
}
C++ Programming, Namiq Sultan
70
Program Output with Example Input
Enter A, B, or C: B [Enter]
You entered B.
Program Output with Different Example Input
Enter a A, B, or C: F [Enter]
You did not enter A, B, or C!
C++ Programming, Namiq Sultan
71
Program 4-34
// The switch statement in this program uses the "fallthrough"
// feature to catch both upper and lowercase letters entered
// by the user.
#include <iostream>
using namespace std;
int main()
{
char feedGrade;
cout << "Our dog food is available in three grades:\n";
cout << "A, B, and C. Which do you want pricing for? ";
cin >> feedGrade;
C++ Programming, Namiq Sultan
72
switch(feedGrade)
{
case 'a':
case 'A': cout << "30 cents per pound.\n";
break;
case 'b':
case 'B': cout << "20 cents per pound.\n";
break;
case 'c':
case 'C': cout << "15 cents per pound.\n";
break;
default: cout << "That is an invalid choice.\n";
}
}
C++ Programming, Namiq Sultan
73
Download