Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Brief Edition Chapter 4 Making Decisions.

Similar presentations


Presentation on theme: "Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Brief Edition Chapter 4 Making Decisions."— Presentation transcript:

1 Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Brief Edition Chapter 4 Making Decisions

2 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 2 Topics 4.1 Relational Operators 4.2 The if Statement 4.3 Flags 4.4 Expanding the if Statement 4.5 The if/else Statement 4.6 The if/else if Statement 4.7 Using a Trailing else 4.8 Menus 4.9 Nested if Statements

3 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 3 Topics 4.10 Logical Operators 4.11 Checking Numeric Ranges with Logical Operators 4.12 Validating User Input 4.13 More About Variable Definitions and Scope 4.14 Comparing Strings 4.15 The Conditional Operator 4.16 The switch Statement 4.17 Testing for File Open Errors

4 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 4 4.1 Relational Operators Used to compare numbers to determine relative order Operators: > Greater than < Less than >= Greater than or equal to <= Less than or equal to == Equal to != Not equal to

5 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 5 Table 4-2 Expression What the Expression Means X > YIs X greater than Y ? X < YIs X less than Y ? X >= YIs X greater than or equal to Y ? X <= YIs X less than or equal to Y ? X = = YIs X equal to Y ? X != YIs X not equal to Y ?

6 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 6 Relational Expressions Relational expressions are known as Boolean expressions A relational (boolean) expression evaluates to true or false Examples: 12 > 5 is true 7 <= 5 is false if x is 10, then: x == 10 is true x != 8 is true x == 8 is false

7 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 7 Relational Expressions The result of a relational expression can be assigned to a variable: result = x <= y; The assignment operator has lower precedence than the relational operator Assigns 0 for false, 1 for true Do not confuse = and ==

8 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 8 Table 4-4 ( Assume x is 10, y is 7, and that A and B are ints )

9 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 9 4.2 The if Statement Allows statements to be conditionally executed or skipped over Models the way we mentally evaluate situations: –“If it is raining, take an umbrella.” Format: if (expression) statement;

10 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 10 if statement – what happens To evaluate: if (expression) statement; If (expression) is true, then statement is executed. If (expression) is false, then statement is skipped.

11 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 11 if statement – what happens expression statement-1 truefalse

12 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 12 if statement notes Do not place ; after (expression) Place statement; on a separate line after (expression), indented: if (score > 90) grade = 'A'; Don’t test floating-point variables for equality! 0 is false ; any other value is true

13 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 13 Program 4-2 //This program averages 3 test scores #include using namespace std; int main() { int score1, score2, score3; double average; cout << "Enter 3 test scores and I will average them: "; cin >> score1 >> score2 >> score3; average = (score1 + score2 + score3) / 3.0; cout << fixed << showpoint << setprecision(1); cout << "Your average is " << average << endl; if (average > 95) cout << "Congratulations! That's a high score!\n"; return 0; }

14 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 14 Program 4-4 // This program demonstrates how floating point round-off // errors can make equality comparisons unreliable. #include using namespace std; int main() { double result; result = 6.0 * 0.666666; // Round-off error // result is: 3.999996 if (result == 4.0) cout << "It's true!"; else cout << "It's false!"; return 0; } if ( 4.0 - result < =.000004 ) would evaluate to true

15 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 15 Not All Operators Are “Equal” 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

16 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 16 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.

17 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 17 4.3 Flags Variable that signals a condition Often implemented as a boolean variable ( C++ bool data type ) As with other variables in functions, must be assigned an initial value before it is used

18 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 18 4.4 Expanding the if Statement To execute more than 1 statement as part of an if statement, enclose them in { } : if (score > 90) { grade = 'A'; cout << "Good Job!\n"; } { } creates a block of code

19 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 19 4.5 The if/else Statement Allows choice between statements if (expression) is true or false Format: if (expression) statement1; // or block else statement2; // or block

20 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 20 if/else – what happens To evaluate: if (expression) statement1; else statement2; If (expression) is true, then statement1 is executed and statement2 is skipped. If (expression) is false, then statement1 is skipped and statement2 is executed.

21 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 21 if/else – what happens expression statement-1statement-2 truefalse

22 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 22 4.6 The if/else if Statement Chain of if statements that are tested in order until one is found to be true Also models thought processes: –“If it is raining take an umbrella else if it is windy, take a hat else take sunglasses” an else is always matched with the most recent if

23 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 23 if/else if format if (expression) statement-1; // or block else if (expression) statement-2; // or block.. // other else ifs. else if (expression) statement-n; // or block

24 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 24 Program 4-8 // This program uses independent if/else statements to assign a // letter grade (A, B, C, D, or F) to a numeric test score. // Beware of using separate if's when nested if's are needed! #include 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; Program continues on next slide …

25 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 25 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"; return 0; } Program continued from previous slide.

26 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 26 4.7 Using a Trailing else Used with if/else if statement when none of (expression) is true Provides default statement/action Used to catch invalid values, other exceptional situations Note: there is no elseif or endif in C/C++

27 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 27 4.8 Menus Menu-driven program: program execution controlled by user selecting from a list of actions Menu: list of choices on the screen Can be implemented using if/else if statements

28 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 28 Menu-driven program organization Display a list of numbered or lettered choices for actions Prompt user to make selection Test user selection in (expression) –if a match, then execute code for action –if not, then go on to next (expression)

29 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 29 Program 4-9 // This program displays a menu and asks the user to make a // selection. An if/else if statement determines which item // the user has chosen. #include using namespace std; int main() { int choice, months; double charges; cout << "\t\tHealth Club Membership Menu\n\n"; cout << "1. Standard Adult Membership\n"; cout << "2. Child Membership\n"; cout << "3. Senior Citizen Membership\n"; cout << "4. Quit the Program\n\n"; cout << "Enter your choice (1 to 4): "; cin >> choice;

30 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 30 cout << fixed << showpoint << setprecision(2); if (choice == 1) { cout << "\nFor how many months? "; cin >> months; charges = months * 40.00; cout << "The total charges are $" << charges << endl; } Program continued from previous slide.

31 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 31 else if (choice == 2) { cout << "\nFor how many months? "; cin >> months; charges = months * 20.00; cout << "The total charges are $" << charges << endl; } else if (choice == 3) { cout << "\nFor how many months? "; cin >> months; charges = months * 30.00; cout << "The total charges are $" << charges << endl; } Program continued from previous slide.

32 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 32 else if (choice != 4) { cout << "The valid choices are 1 through 4. Run the\n"; cout << "program again and select one of those.\n"; } return 0; } else if (choice == 4) cout << "You have chosen to quit."; else { cout << "The valid choices are 1 through 4. Run the\n"; cout << "program again and select one of those.\n"; } Program continued from previous slide.

33 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 33 4.9 Nested if Statements An if statement that is part of the if or else part of another if statement Can be used to evaluate more than one data item or condition: if (score < 100) { if (score > 90) grade = 'A'; }

34 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 34 Notes on coding nested if s An else matches the nearest if that does not have an else : if (score < 100) if (score > 90) grade = 'A'; else...// goes with second if, // not first one Proper indentation helps greatly

35 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 35 4.10 Logical Operators Used to create relational expressions from other relational expressions Operators, meaning, and explanation: && ANDNew relational expression is true if both expressions are true || ORNew relational expression is true if either expression is true ! NOTReverses the value of an expression – true expression becomes false, and false becomes true

36 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 36 Logical Operators - examples int x = 12, y = 5, z = -4; (x > y) && (y > z)true (x > y) && (z > y)false (x <= z) || (y == z)false (x <= z) || (y != z)true !(x >= z) not ( x >= z ) false !x >= z ( ( not x ) >= z ) true

37 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 37 Truth Table for Logical AND

38 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 38 Logical Operators - notes ! has highest precedence, followed by &&, then || If the value of an expression can be determined by evaluating just the sub- expression on left side of a logical operator, then the sub-expression on the right side will not be evaluated (short circuit evaluation) && can be used to replace if-if || can be used to replace if-else-if

39 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 39 4.11 Checking Numeric Ranges with Logical Operators Used to test to see if a value falls into a range: if (grade >= 0 && grade <= 100) cout << "Valid grade"; Can also test to see if value falls outside of range: if (grade = 100) cout << "Invalid grade"; Cannot use mathematical notation: if (0 <= grade <= 100) //doesn’t work!

40 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 40 4.12 Validating User Input Input validation: inspecting data to a program to determine if it is acceptable Bad output will be produced from bad input Can perform various tests: –Range –Reasonableness –Valid menu choice –Divide by zero

41 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 41 4.13 More About Variable Definitions and Scope Scope of a variable is the block in which it is defined, from the point of definition to the end of the block Usually defined at beginning of function May be defined close to first use

42 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 42 Still More About Variable Definitions and Scope Variables defined inside { } have local or block scope When inside a block within another block, can define variables with the same name as in the outer block. –When in inner block, outer definition is not available ( hidden ) –Not a good idea

43 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 43 4.14 Comparing Strings Can not use relational operators with character strings Must use the strcmp function to compare C-strings strcmp compares the ASCII codes of the characters in the strings. Comparison is character-by-character

44 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 44 Comparing Strings strcmp(str1, str2) : compares strings str1 and str2 and returns: 0 if the strings are the same, negative number if str1 < str2, and positive number if str1 > str2 char myName[10] = "George", yourName[10] = "Georgia"; if ( strcmp(myName, yourName) < 0 ) cout << myName << " comes before " << yourName << " in the alphabet";

45 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 45 // This program uses strcmp to compare the string entered // by the user with valid stereo part numbers. #include using namespace std; int main() { const double A_PRICE = 249.0, B_PRICE = 299.0; char partNum[9]; cout << "The stereo part numbers are:\n"; cout << "\tBoom Box, part number S147-29A\n"; cout << "\tShelf Model, part number S147-29B\n"; Program 4-17

46 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 46 Program continued from previous slide cout << "Enter the part number of the stereo you\n"; cout << "wish to purchase: "; cin >> setw(9);// So they won't enter more than 8 char's cin >> partNum; cout << fixed << showpoint << setprecision(2); if (strcmp(partNum, "S147-29A") == 0) cout << "The price is $" << A_PRICE << endl; else if (strcmp(partNum, "S147-29B") == 0) cout << "The price is $" << B_PRICE << endl; else cout << partNum << " is not a valid part number.\n"; }

47 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 47 Program Output with Example Input The stereo part numbers are: Boom Box, part number S147-29A Shelf Model, part number S147-29B Enter the part number of the stereo you wish to purchase: S147-29B [Enter] The price is $299.00

48 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 48 4.15 The Conditional Operator Can use to create short if/else statements Format: expr ? expr : expr; x<0 ? y=10 : z=20; First Expression: Expression to be tested 2nd Expression: Executes if first expression is true 3rd Expression: Executes if the first expression is false

49 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 49 The Conditional Operator The value of a conditional expression is –The value of the second expression if the first expression is true –The value of the third expression if the first expression is false Parentheses () may be needed in an expression due to precedence of conditional operator

50 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 50 4.16 The switch Statement Used to select among statements from several alternatives May be used instead of if/else if statements

51 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 51 switch statement format switch (expression) //integral { case exp-1: statement-1; case exp-2: statement-2;... case exp-n: statement-n; default: statement-n+1; }

52 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 52 switch statement requirements 1) expression must be an integral variable or an expression that evaluates to an integral value 2) exp- 1 through exp- n must be constant integral expressions or literals, and must be unique in the switch statement 3) default is optional but recommended

53 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 53 switch statement – how it works 1) expression is evaluated 2)The value of expression is compared against exp-1 through exp-n. 3)If expression matches value exp-i, the program branches to the statement following exp-i and continues to the end of the switch 4)If no matching value is found, the program branches to the statement after default:

54 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 54 break statement Used to stop execution in the current block Also used to exit a switch statement Useful to execute a single case statement without executing the statements following it

55 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 55 Switch Statement Syntax The switch statement lets the value of a variable or expression determine where the program will branch to. switch ( integral-expression ) // includes character... { case constant-integral-expression : statement(s); [ break; ] case constant-integral-expression : statement(s); [ break; ] case constant-integral-expression : case constant-integral-expression : statement(s); [ break; ] default : statement(s); } Character literals must be enclosed in single quotes

56 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 56 Using switch with a menu switch statement is a natural choice for menu-driven program: –display a menu –get user input –use user input as expression in switch statement –use menu choices as expression in case statements

57 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 57 Program 4-20 // This program is carefully constructed to use the // "fallthrough" feature of the switch statement. #include using namespace std; int main() { int modelNum; cout << "Our TVs come in three models:\n"; cout << "The 100, 200, and 300. Which do you want? "; cin >> modelNum; cout << "That model has the following features:\n"; Program continues on next slide …

58 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 58 Program continues switch ( modelNum ) { case 300: cout << "\tPicture-in-a-picture.\n"; case 200: cout << "\tStereo sound.\n"; case 100: cout << "\tRemote control.\n"; break; default: cout << "You can only choose the 100,"; cout << "200, or 300.\n"; } return 0; }

59 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 59 Program Output with Example Input Our TVs come in three models: The 100, 200, and 300. Which do you want? 100 [Enter] That model has the following features: Remote control. Program Output with Example Input Our TVs come in three models: The 100, 200, and 300. Which do you want? 200 [Enter] That model has the following features: Stereo sound. Remote control.

60 4 th Ed. Home Page4 th Ed. Home Page Appendices AppendicesChapter 4 slide 60 4.17 Testing for File Open Errors Can test a file stream object to detect if an open operation failed: ifstream infile; infile.open("test.txt"); if ( !infile ) cout << "File open failure!"; You can also use the fail member function if ( infile.fail() ) cout << "File open failure!";


Download ppt "Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Brief Edition Chapter 4 Making Decisions."

Similar presentations


Ads by Google