1 Control Statements: Part I Chapter 4 Control Statements: Part I Chapter 4.

Post on 04-Jan-2016

268 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

Transcript

1

Control Statements: Part I

Chapter 4

Control Statements: Part I

Chapter 4

2

Introduction

• Three building blocks for C++ control– Sequence structure– Selection structure– Repetition structure

• Operators– Assignment operators– Increment/decrement operators

3

Algorithms

• Algorithm is a procedure of solving a problem in terms of– The actions to execute and– The order in which these actions execute

• Program control– Specify the order in which statements execute

4

Pseudocode

• Pseudocode– An artificial and informal language that helps

programmer develop algorithms– Normally describes only executable statements (not

variable declarations)

Prompt the user to enter 1st integerInput the first integer Prompt the user to enter the 2nd integerInput the 2nd integer

Add first integer and second integer, store resultsDisplay result

5

Control Structures

• Sequential execution– Execute one statement after the other in which they are written

• Transfer of control– Next one in sequence may not be next statement to execute– Indiscriminate use of transfer of control (goto statement) cause

tremendous difficulty for software developers

• Structured programming (Bohm and Jocopini)– Goto elimination– More likely to be bug free– Clear, easier to debug and modify– Reduced development time

• Control structures– Sequence structure– Selection structure– Repetition structure

6

Sequence Structure in C++

Sequence-structure activity diagram

Initial state

Final state

Action state symbol

Notes

7

Selection Statements in C++

• Single-selection statement (if)– Selects or ignores a single action

• Double-selection statement (if…else)– Selects between two different actions

• Multiple-selection statement (switch)– Selects among many different actions (groups

of actions)

8

Repetition Statements in C++

• Performs statements repeatedly as long as a condition (loop-continuation condition) remains true

• Three types of repetition statements– while

• Perform the action(s) in its body zero or more times

– For• Perform the action(s) in its body zero or more times

– do…while• Perform the action(s) in its body at least once

9

C++ keywords

auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef union unsigned voidvolatile while

and and_eq asm bitand bitorbool catch class compl const_castdelete dynamic_cast explicit export falsefriend inline mutable namespace newnot not_eq operator or or_eqprivate protected public reinterpret_cast static_casttemplate this throw true trytypeid typename using virtual wchar_txor xor_eq

C++ only keywords

Keywords common to C and C++ languages

10

Common Programming Errors Related to Keywords

• Using a keyword as an identifier is a syntax error

• Spelling a keyword with any uppercase letters is a syntax error. All of C++’s keywords contain only lowercase letters

11

Connect Control Statements

• Model each control statement as an activity diagram– Initial state represents the entry point– Final state represents the exit point

• Control-statement stacking– Control statements are attached to one another by

connecting the exit point of one to the entry point of the next

• Control-statement nesting– One control statement is contained inside another

12

if Single-selection Statement

Decision symbol

Associated guard conditionEvaluates to be true or false

Transition arrow

Single-entry /single-exit

Guard conditions can be boolean expressions or any expressions that evaluate to a number.Boolean expression: true or falseAny expression: zero (false), non-zero (true)

13

if…else Double-selection Statement

Conditional operator (?:): only ternary operator in C++

cout << (grade>=60 ? “Passed” : “Failed”);

14

Nested if…else Statements

if ( studentGrade >= 90 ) // 90 and above gets "A"

cout << "A";

else

if ( studentGrade >= 80 ) // 80-89 gets "B"

cout << "B";

else

if ( studentGrade >= 70 ) // 70-79 gets "C"

cout << "C";

else

if ( studentGrade >= 60 ) // 60-69 gets "D"

cout << "D";

else // less than 60 gets "F"

cout << "F";

15

Cont’

if ( studentGrade >= 90 ) // 90 and above gets "A"

cout << "A";

else if ( studentGrade >= 80 ) // 80-89 gets "B"

cout << "B";

else if ( studentGrade >= 70 ) // 70-79 gets "C"

cout << "C";

else if ( studentGrade >= 60 ) // 60-69 gets "D"

cout << "D";

else // less than 60 gets "F"

cout << "F";

A nested if…else statement can perform much faster than a series of single-selection if statements because of the possible early exit

In a nested if…else statement, test the most likely condition first to maximize the chance of early exit

Programming Tips

16

Dangling-else Problem

The C++ compiler always associates an else with the immediately preceding if unless told to do otherwise by the placements of braces. This behavior can lead to dangling-else problem.

if ( x > 5 )

if ( y > 5 )

cout << "x and y are > 5";

else

cout << "x is <= 5";

if ( x > 5 )

{

if ( y > 5 )

cout << "x and y are > 5";

}

else

cout << "x is <= 5";

Dangling-else

Correct

17

Blocks

• if selection statement and if…else statement normally expect only one body statement

• Enclose several statements in the body of an if or in either part of an if…else with a pair of curly braces

• A set of statements contained in a pair of braces is called compound statement or a block

– A block can be placed anywhere in a program that a single statement can be placed– Forgetting one or both of the braces that delimit a block can lead to syntax errors or logic

errors– Always putting the braces in an if…else statement helps prevent their accidental omission

• Null Statement (Empty statement)– Placing a semicolon (;) where a statement would normally be– Placing a semicolon after the condition in an if statement leads to a logic error in single-

selection if statements and a syntax error in double selection if…else statements (when the if part contains an actual body statement)

18

while Repetition Statement

Joins the transitions from the initial state and the action state

19

Infinite Loop

Cause:No action in the while body to cause the condition to become false.

Results:Repetition statement never terminatesProgram appears to “hang” or “freeze”

int i = 1;int factorial = 1;while(i>0){

factorial = factorial*i;i++;

}

Infinite Loop

20

Formulating Algorithms: Counter-Controlled RepetitionDefinite Repetition

Problem statement:A class of ten students took a quiz. The grades for the quiz are available to you. Calculate and display the total of all student grades and the class average on the quiz.

Set total to zeroSet grade counter to one

While grade counter is less than or equal to tenPrompt the user to enter the next gradeInput the next gradeAdd the grade into the totalAdd one to the grade counter

Set the class average to the total divided by tenPrint the total of the grades for all students in the classPrint the class average

Pseudocode

Repetition terminates when counter exceeds 10

Update the counter

21

Off-by-one-error

Cause:Use a loop’s counter-control variable in a

calculation after the loopResult:

The loop terminates when the counter’s value is one higher than its last legitimate value (i.e., 11 in the case of counting from 1 to 10)

22

Formulating Algorithms: Sentinel-Controlled Repetition

Problem statement:Develop a class average algorithm that process grades for an arbitrary number of students each time it is run.

Initialize total to zeroInitialize counter to zero //avoid off-by-one-error

Prompt the user to enter the first gradeInput the first grade (possibly the sentinel)

While the user has not yet entered the sentinelAdd this grade into the running totalAdd one to the grade counterPrompt the user to enter the next gradeInput the next grade (possibly the sentinel)

If the counter is not equal to zeroSet the average to the total divided by the counterPrint the total of the grades for all students in the classPrint the class average

ElsePrint “No grades were entered”

Sentinel value is -1

Proper message with information on sentinel value

23

Sentinel-Controlled Repetition vs Counter-Controlled Repetition

• Counter-controlled repetition– Each iteration of the while statement reads a

value from the user, for the specified number of iterations

• Sentinel-controlled repetition– The program reads the first value before

reaching the while– The body of while may never execute (e.g.,

no grades were entered)

24

Explicit and Implicit Conversion between Fundamental Types

double average;average = static_cast<double> (total)/gradeCounter;

Explicit conversion is done by unary cast operator

gradeCounter is promoted to double (implicit conversion)

25

Formatting for Floating-Point Numbers

• Nonparameterized stream manipulator– endl, fixed, showpoint, left, right(default)

– Do not require <iomanip> header file

• Parameterized stream manipulator– Require #include <iomanip>– cout << “Class average is “ << setprecision(2) << fixed << average << endl;

Round number to 2 decimal places

26

Formulating Algorithms: Nested Control Statements

Problem statement:You have been given a list of these 10 students. Next to each name is written a 1 if the student passed or a 2 if the student failed. You have been asked to summarized the results in terms of number of passes and fails.

Initialize passes to zeroInitialize failures to zeroInitialize student counter to one

While student counter is less than or equal to 10Prompt the user to enter the next exam resultInput the next exam resultIf the student passed

Add one to passesElse

Add one to failuresAdd one to student counter

Print the number of passesPrint the number of failures

If more than eight students passedPrint “Raise tuition”

If…else is nested in

while body

27

Arithmetic Assignment Operators

Assignment operator

Sample expression

Explanation Assigns

Assume: int c=3, d=5, e=4, f=6, g=12;

+= c += 7 c = c + 7 10 to c

-= d -= 4 d = d - 4 1 to d

*= e *= 5 e = e * 5 20 to e

/= f /= 3 f = f / 3 2 to f

%= g %= 9 g = g % 9 3 to g

28

Increment and Decrement Operators

Operator Called Sample expression

Explanation

++ Preincrement ++a Increment a by 1, then use the new value of a in the expression in which it resides

++ Postincrement a++ Use the current value of a in the expression in which a resides, then increment a by 1

-- Predecrement --b Decrement b by 1, then use the new value of b in the expression in which it resides

-- Postdecrement b-- Use the current value of b in the expression in which b resides, then decrement b by 1

29

Example: Preimcrementing and Postincrementing

int main()

{

int c;

// demonstrate postincrement

c = 5; // assign 5 to c

cout << c << endl; // print 5

cout << c++ << endl; // print 5 then postincrement

cout << c << endl; // print 6

cout << endl; // skip a line

// demonstrate preincrement

c = 5; // assign 5 to c

cout << c << endl; // print 5

cout << ++c << endl; // preincrement then print 6

cout << c << endl; // print 6

return 0; // indicate successful termination

} // end main

30

Operator Precedence

Operators Associativity Type

() Left to right Parenthesis

++ -- static_cast<type>() Left to right Unary (postfix)

++ -- + - Right to left Unary (prefix)

* / % Left to right Multiplicative

+ - Left to right Additive

<< >> Left to right Insertion/extraction

< <= > >= Left to right Relational

== != Left to right Equality

?: Right to left Conditional

= += -= *= /= %= Right to left Assignment

top related