General form of for-loop:
for (init-statement; check; step-statement)
{
  statement;
  statement;
  ...
}
Show the flowchart: first init-statement executes, followed by check, and so on.  If the check is false at the first entry to the loop, the body is never executed. The init-statement or the step-statement could be empty. Also, point out that the init-statement could be anything, e.g., declaration, assignment, function call, another for-loop, etc. Same for step-statement.
Why do we need the for-loop when we already have the while loop? More structure, better readability. e.g., if we just want to count, for loop has much better readability than the while loop.
Example: add up the first 100 numbers
int sum = 0;
for (int i = 0; i < 100; i++)
{
  sum = sum + i;
}
cout << "The sum is " << sum << endl;
Show the correspondence of the for-loop with the while loop.
sum = sum + i can also be written as sum += i.
While without braces:
while (condition) statement;If only one statement in body, can omit left and right braces (just like if statement). Similarly for for loop.
for (int i = 10; i >= 1; i--)
{
  cout << i << endl;
}
cout << "Blast off!" << endl;
Output:
10 9 8 7 6 5 4 3 2 1 Blast off!
Discuss that any (or all) of init-stmt, check, or step-stmt could be empty.
Introducing the break statement: You can use a special statement called break;. It simply breaks out of the loop at that point and transfers control to the first statement following the end of the for the block.
Example:
#include <iostream>
#include "simpio.h"
using namespace std;
int main() {
  int sum = 0; //sum must be declared outside of the loop! Otherwise it will be redeclared many times
  int num = getInteger("Enter a number: "); //num must be declared outside of the loop! Otherwise, the loop condition makes no sense.
  while (true)
  {
    sum += num;
    num = getInteger("Enter a number: ");
    if (num == -1)
      break;
  }
  cout << "Sum is " << sum << endl;
  return 0;
}
for (int i = 0; i < 5; i++)
{
  for (int j = 0; j < 10; j++)
  {
    cout << "*";
  }
  cout << endl;
}
Could we have ommitted the braces in the for loop here?
Output:
********** ********** ********** ********** **********The outer loop repeats five times; the inner loop repeats ten times
for (int i = 0; i < 5; i++)
{
  for (int j = 0; j < i + 1; j++)
  {
    cout << "*";
  }
  cout << endl;
}
Pattern 1
******* ****** ***** **** *** ** *
Pattern 2
* ** *** **** ***** ****** *******
Pattern 3
1 22 333 4444 55555 666666 7777777
Pattern 4
......1 .....22 ....333 ...4444 ..55555 .666666 7777777
Pattern 5
......1 .....21 ....321 ...4321 ..54321 .654321 7654321
type name()
{
  statement1;
  statement2;
  ...
}
Example:
int printGreeting()
{
  cout << "Hello, world!" << endl;
  cout << "I hope you had a great day.";
  return 0;
}
int main()
{
  string name = readLine("Next name? ");
  while (name != "")
  {
    printGreeting();
    name = readLine("Next name? ");
  }
  return 0;
}
Introduce the void type. Replace return type of printGreeting with void.