Home Previous Next

CSC100 :: Lecture Note :: Week 06
Assignments | Code | Handouts | Resources | Email Thurman {Twitter::@compufoo Facebook::CSzero}
{GDT::Bits:: Time  |  Weather  |  Populations  |  Special Dates}

Overview

Assignment(s):

Code: DoAdder.cpp | f10do.cpp | ForAdder.cpp | f10for.cpp | narcissistic.cpp | narcissistic2.cpp | Elevator.cpp | GoToElevator.cpp


The for Statement

The for statement supports iteration (i.e. it is a repetition control statement). Iteration is the process of repeating an operation.

The for statement repeatedly executes a simple statement or block (i.e. compound statement) until a control-EXPR becomes false (i.e. 0). Each loop iteration is called a cycle.

   for ([initialization-step]; [conditional-step]; [increment-step])
      statement;

   The optional "initialization-step" is executed once before the loop 
   is ever executed (and before the "conditional-step" is evaluated
   for the first time).

   The optional "conditional-step" is an EXPR that is evaluated at
   the top of the loop.  If it is true, then the body of the
   for  statement is executed; otherwise, flow control jumps to
   the first executable statement after the  for  loop body.  If
   no conditional-step is specified, then  it is taken as
   permanently true.

   After the body of a  for  loop has been executed, the optional
   "increment-step" is executed.

   After the increment-step is executed; the conditional-step
   is re-evaluated.

   Example:

      //print the numbers 1 through 3

      int i;
      for (i = 1; i <= 3; i = i + 1)
         cout << i << endl;

If the body of the for contains multiple statements, then a compound statement is needed.

All three steps for a for loop are EXPRs. Most commonly, the initialization-step and the increment-step are assignments or functions calls, and the conditional-step is a relational EXPR.

The for is frequently used when there are simple initialization and increment steps because it keeps the loop control statements close together and visible at the top of the loop.

The initialization and increment steps often take advantage of the sequence operator.

   for (i = 0, j = 99; i < n; i = i + 1, j = j - 1)
      do_something;

{TopOfPage} {Tutorial} {CodingGround (online IDE)} {CPP.sh (online IDE)} {C at MIT} {GDT::C/C++ Resource}


The break Statement

The break statement is a jump control statement that is used inside of repetition control statements and the switch selection control statement.

The break statement causes an immediate exit from the innermost enclosing switch or loop statement.

The break statement allows a loop to be exited from some point other than at the top or bottom of the loop.

Structured programming purist are not overly fond of the break statement.

   //
   // enter into an infinite loop reading integers entered by
   // the user... the loop terminates when a sentinel value of
   // -1 is entered... 
   //
   int cnt = 0;
   const int SENTINEL = -1;
   while (1) {
      cout << "Enter an integer (" << SENTINEL << " to exit): ";
      cin >> input;
      if (SENTINEL == input)
         break;  //flow control jumps to the statement A
      cnt = cnt + 1;
      ...
   }
   /*A*/ cout << cnt << " numbers entered" << endl;

You must be careful when you use the break.

   while (...) {
      ...
      if (...) {
         ...
         if (...) 
            break;  // the programmer wants to  break  out of the
                    // body of the enclosing  if  statement,
                    // but instead the  break  will cause the
                    // flow control of the program to jump to
                    // the 1st executable statement after the
                    // body of the  while  statement (/*B*/)
         ...
      }
      /*A*/ ...
   }
   /*B*/ ...

{TopOfPage} {Tutorial} {CodingGround (online IDE)} {CPP.sh (online IDE)} {C at MIT} {GDT::C/C++ Resource}


The continue Statement

The continue statement is a jump control statement that is used inside of repetition control statements.

The continue statement causes the next iteration of the enclosing loop statement to begin. In the while and do this means that the control-EXPR is executed immediately; in the for control passes to the step-EXPR.

The continue statement is often used when the part of the loop that follows is complicated, so that reversing a test and indenting another level would nest the program too deeply.

Structured programming purist are not overly fond of the continue statement.

   while (input != SENTINEL) {
      /* Part A */
      ...

      if (EXPR)
         continue;

      /* Part B */
      ...
   }

      When  if (EXPR)  evaluates to  true,  the  continue  statement
      is executed and the flow control of the program jumps to 
      control expression of the  while  (i.e.  input != SENTINEL)
      is re-evaluated.

Here is the same loop written without using a continue statement.

   while (input != SENTINEL) {
      /* Part A */
      ...

      if (!EXPR) {
         /* Part B */
         ...
      }
   }

{TopOfPage} {Tutorial} {CodingGround (online IDE)} {CPP.sh (online IDE)} {C at MIT} {GDT::C/C++ Resource}


The goto Statement

The goto statement is a jump control statement that is used to alter the flow control of a program.

Statements can labeled. Label names conform to the naming syntax that is applied to variables. Syntax of a labeled statement.

   some_label_name:  statement;

Statement labels are used with the goto statement.

   goto some_label_name;

When a goto is executed, the flow control of the program immediately jumps to the labeled statement.

Although use of the goto should be minimized, there are a few situations where they may be useful.

   for (EXPR) {
      ...
      for (EXPR) {
         ...
         if (EXPR)
            goto end_of_loops;  /*want to break from both loops*/
         ...
      }
      ...
   }
   end_of_loops:
   ...

An aside: In Java, goto is not a keyword, but it is a reserved word. In addition, to handle the aforementioned example, Java supports labeled break statements.

The goto statement is frequently found in code that is generated by other programs.

If you want to go somewhere, goto is the best way to get there.
-- Ken Thompson (creator of Unix)

Edsger Dijkstra (01930-02002) was a Dutch computer scientist. Dijkstra won the ACM Turing Award in 01972. According to the Wikipedia, Dijkstra was also known for his "low opinion of the GOTO statement in computer programming, culminating in the 1968 article 'A Case against the GO TO Statement', regarded as a major step towards the widespread deprecation of the GOTO statement and its effective replacement by structured control constructs such as the while loop. This methodology was also called structured programming." {Wikipedia.org::Edsger W. Dijkstra}

Update::2016.12.19

{TopOfPage} {Tutorial} {CodingGround (online IDE)} {CPP.sh (online IDE)} {C at MIT} {GDT::C/C++ Resource}


Home Previous Next