Las estructuras de control determinan la secuencia en la que se ejecutarán las instrucciones de un programa.
Las estructuras de control se dividen en tres categorías en función del flujo de ejecución:
Estructura secuencial.
Estructura alternativa o condicional.
Estructura iterativa o repetitiva.
1. ESTRUCTURA SECUENCIAL
La estructura secuencial está formada por una secuencia de instrucciones que se ejecutan en orden una a continuación de la otra.
Cada una de las instrucciones están separadas por el carácter punto y coma (;). No obstante, en algunos casos nos interesará agrupar en un bloque una serie de instrucciones, como veremos al explicar las estructuras de selección y de iteración. El bloque de sentencias se define por el carácter llave de apertura ({) para marcar el inicio del mismo, y el carácter llave de cierre (}) para marcar el final.
Ejemplo:
{
instrucción 1;
instrucción 2;
instrucción 3;
.....
instrucción N;
}
Sin embargo, en caso de que el bloque de sentencias este constituido por una única sentencia no es obligatorio el uso de las llaves de apertura y cierre ({ }).
2. ESTRUCTURA CONDICIONAL, SELECTIVA O ALTERNATIVA.
Las estructuras condicionales controlan si una sentencia o bloque de sentencias se ejecutan, en función del cumplimiento o no de una condición o expresión lógica.
C++ tiene dos estructuras de control para la selección, if switch.
2. 1 Instrucción IF
Esta instrucción hace que se ejecuten unas sentencias u otras dependiendo del valor que toma una condición.
La instrucción if puede ser simple o doble:
Alternativa simple:
if (condicion)
    instrucción1;

if (condicion)
{
instrucción 1;
instrucción 2;
instrucción 3;
}
Alternativa doble.
if (condicion)
    instrucción1;
else
    instrucción2;

if (condicion)
{
Instrucción 1;
instrucción 2;
}
else
{
instrucción 3;
instrucción 4;
}
Ejemplo de estructura condicional en C++. Programa que lee un número entero por teclado y muestra si es par o impar.
#include <iostream>
using namespace std;
int main(void)
{
  int num;
  cout <<"Introduzca numero:";
  cin >> num;
  if ((num%2)==0)
      cout << "PAR" << endl;
  else
      cout << "IMPAR" << endl;
  system("pause");
}


Las instrucciones if-else se pueden anidar obteniéndose una estructura condicional múltiple:
if(condicion1)
   instrucción1;
else if(condicion2)    
        instrucción2;
      else if(condicion3)
              instrucción3;
             else if(condicion4)
                     instruccion4;
                    else
                     instrucción5;

instrucción 6;
instrucción 7;
......

En este caso se evalúa la condicion1; si es cierta, se ejecuta la instrucción1 y se continúa por la instrucción 6 después del bloque de if-else anidados. Si la condición1 es falsa, se evalúa la condicion2, y así sucesivamente.
En caso de no ser cierta ninguna de las condiciones, la sentencia que se ejecuta es la del último else, es decir, la instrucción 5.
Ejemplo de estructura condicional múltiple en C++. Programa que lee un número entero que corresponde a una hora y muestra un mensaje según la hora que se haya leído.
#include <iostream>
using namespace std;
int main(void)
{
   int hora;
   cout << "\nIntroduzca una hora (entre 0 y 24): ";
   cin >> hora;
   if ((hora >= 0) and (hora < 12))
        cout << "\nBuenos dias\n";
   else if ((hora >= 12) and (hora < 18))
             cout << "\nBuenas tardes\n";
        else if ((hora >= 18) and (hora < 24))
                  cout << "\nBuenas noches\n";
             else
                  cout << "\nHora no válida\n";
   system("pause");
}
Otro ejemplo de estructura condicional múltiple en C++. Programa que lee la calificación numérica obtenida por un alumno en un examen y muestra la nota equivalente en texto.
#include <iostream>
using namespace std;
int main(void)
{
    unsigned int nota;
    cout << "Introduzca una calificacion numerica entre 0 y 10:";
    cin >> nota;
    cout << "La calificacion del alumno es" << endl;
    if (nota == 10)
    {
       cout << "Matricula de Honor" << endl;
    }
    else if (nota >= 9)
         {
            cout << "Sobresaliente" << endl;
         }
         else if (nota >= 7)
              {
                  cout << "Notable" << endl;
              }
              else if (nota >= 5)
                   {
                       cout << "Aprobado" << endl;
                   }
                   else
                   {
                       cout << "Suspenso" << endl;
                   }
    system("pause");
}

2.2 Instrucción switch
La sentencia switch selecciona una de entre múltiples alternativas.
La forma general de esta expresión es la siguiente:
switch (expresión)
{
     case constante1:
              instrucciones;
              break;
     case constante 2:
              instrucciones;
              break;
     · · ·
     default:
              instrucciones;
}
En una instrucción switch, expresión debe ser una expresión con un valor entero, y constante1, constante2, ..., deben ser constantes enteras, constantes de tipo carácter o una expresión constante de valor entero. Expresión también puede ser de tipo char, ya que los caracteres individuales tienen valores enteros
Dentro de un case puede aparecer una sola instrucción o un bloque de instrucciones.
La instrucción switch evalúa la expresión entre paréntesis y compara su valor con las constantes de cada case. Se ejecutarán las instrucciones de aquel case cuya constante coincida con el valor de la expresión, y continúa hasta el final del bloque o hasta una instrucción que transfiera el control fuera del bloque del switch (una instrucción break, o return). Si no existe una constante igual al valor de la expresión, entonces se ejecutan las sentencias que están a continuación de default si existe (no es obligatorio que exista, y no tiene porqué ponerse siempre al final).
Ejemplo de uso de la instrucción switch en C++. Programa que lee dos números y una operación y realiza la operación entre esos números.
#include <iostream>
using namespace std;
int main(void)
{
    int A,B, Resultado;
    char operador;
    cout << "Introduzca un numero:";
    cin >> A;
    cout << "Introduzca otro numero:";
    cin >> B;
    cout <<"Introduzca un operador (+,-,*,/):";
    cin >> operador;
    Resultado = 0;
    switch (operador)
    {
           case '-' : Resultado = A - B;
                      break;
           case '+' : Resultado = A + B;
                      break;
           case '*' : Resultado = A * B;
                      break;
           case '/' : Resultado = A / B; //suponemos B!=0
                      break;
           default : cout << "Operador no valido"<< endl;
    }
    cout << "El resultado es: ";
    cout << Resultado << endl;
    system("pause");
}
Otro ejemplo de uso de switch en C++. Programa que determina si un carácter leído es o no una vocal. En ese caso como la sentencia a ejecutar por todas las etiquetas case es la misma, esta sentencia se pone una única vez al final:
#include <iostream>
using namespace std;
int main(void)
{
    char car;
    cout << "Introduzca un caracter: ";
    cin >> car;
    switch (car)
    {
           case 'a':
           case 'A':
           case 'e':
           case 'E':
           case 'i':
           case 'I':
           case 'o':
           case 'O':
           case 'u':
           case 'U': cout << car << " es una vocal" << endl;
                     break;
           default : cout << car << " no es una vocal" << endl;
    }
    system("pause");
}

3. ESTRUCTURAS REPETITIVAS O ITERATIVAS.
C++ dispone de tres estructuras repetitivas:
while
do-while
for.
3.1 Instrucción while.
while (condicion)
{
instrucción 1;
..............
instrucción N;
}
Ejecuta una instrucción o un bloque de instrucciones cero o más veces, dependiendo del valor de la condición.
Se evalúa la condición, y si es cierta, se ejecuta la instrucción o bloque de instrucciones y se vuelve a evaluar la condición; pero si la condición es falsa, se pasa a ejecutar la siguiente instrucción después del while.

Ejemplo de instrucción while en C++. Programa que lee números enteros hasta que se lee un número negativo. Se muestra la suma de todos los números leidos excepto el número negativo.
/*Programa que lee números hasta que se lee un negativo y muestra la
  suma de los números leídos */
#include <iostream>
using namespace std;
int main(void)
{
    int suma, num;
    suma = 0;
    cout << "Introduzca un numero: ";
    cin >> num;
    while (num >= 0)
    {
        suma = suma + num; 
        cout << "Introduzca un numero: ";
        cin >> num;
    }
    cout << endl << "La suma es: " << suma << endl;
    system("pause");
}

3. 2 Instrucción do .. while.
do
{
instrucción 1;
..............
instrucción N;
} while (condicion);
Ejecuta una instrucción o un bloque de instrucciones, una o más veces, dependiendo del valor de la condición.
Se ejecuta la instrucción o bloque de instrucciones y a continuación se evalúa la condición. Si la condición es cierta, se vuelve a ejecutar la instrucción o bloque de instrucciones, y si es falsa, pasa a ejecutarse la siguiente instrucción después del do-while. 
Cuando se utiliza una instrucción do-while el bloque de instrucciones se ejecuta al menos una vez, ya que la condición se evalúa al final. En cambio, con una instrucción while, puede suceder que el bloque de instrucciones no llegue a ejecutarse nunca si la condición inicialmente es falsa.

Ejemplo de instrucción do while en C++. Programa que lee un número entero. El número debe estar comprendido entre 1 y 100.
/* lee un número entre 1 y 10 */
#include <iostream>
using namespace std;
int main(void)
{
    int numero;
    do
    {
        cout << "Introduzca un numero entre 1 y 100: ";
        cin >> numero;
    }
    while (numero < 1 || numero > 100);
}

3.3 Instrucción for.
Un bucle for hace que una instrucción o bloque de instrucciones se repitan un número determinado de veces mientras se cumpla la condición.

for(inicialización; condicion; incremento/decremento)
{
 instrucción 1;
 ...........
 instrucción N;     
}
A continuación de la palabra for y entre paréntesis debe haber siempre tres zonas separadas por punto y coma:
zona de inicialización
zona de condición
zona de incremento ó decremento.
En alguna ocasión puede no ser necesario escribir alguna de ellas. En ese caso se pueden dejar en blanco, pero los punto y coma deben aparecer.
El funcionamiento de un bucle for el siguiente:
1.      Se inicializa  la variable o variables de control.
2.      Se evalúa la condición.
3.      Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la ejecución del bucle y continúa el programa en la siguiente instrucción después del for
4.      Se actualiza la variable o variables de control (incremento/decremento)
5.      Se pasa al punto 2).
Esta instrucción es especialmente indicada para bucles donde se conozca el número de repeticiones que se van a hacer.
Como regla práctica podríamos decir que las instrucciones while y do-while se utilizan generalmente cuando no se conoce a priori el número de pasadas, y la instrucción for se utiliza generalmente cuando sí se conoce el número de pasadas.
Ejemplo de instrucción for en C++. Programa que muestra los números del 1 al 10.

/* muestra los números de 1 a 10 */
#include <iostream>
using namespace std;
int main(void)
{
    int n;
    for (n = 1; n <= 10; n++)
    {
        cout << n << endl;
    }
    system("pause");
}
Ejemplo de instrucción for en C++. Programa que muestra los números del 10 al 1:
/* muestra los números de 10 a 1 */
#include <iostream>
using namespace std;
int main(void)
{
    int n;
    for (n = 10; n >=1; n--)
    {
        cout << n << endl;
    }
    system("pause");
}
Se ha de tener cuidado y al escribir el punto y coma (;) después del paréntesis final del bucle for.
Por ejemplo el bucle:
#include <iostream>
using namespace std;
int main(void)
{
int i;
for (i = 1i <= 100i++);    
{
           cout << "Hola" << endl;
}
      system("pause");
}
no muestra "Hola" 100 veces. En realidad se muestra una vez "Hola", ya que la sentencia for es una sentencia vacía al terminar con un punto y coma (;).
La sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas iteraciones, se ejecuta la sentencia cout.
BUCLES ANIDADOS.
Hablamos de bucles anidados cuando se incluyen instrucciones for, while o do-while unas dentro de otras.
Ejemplo de bucles anidados en C++. Programa que muestra el primer número perfecto mayor que 100. Un número es perfecto cuando la suma de sus divisores excepto él mismo es igual al propio número. Por ejemplo 6 es perfecto ya que sus divisores son 1, 2 ,3 y suman 6
#include <iostream>
using namespace std;
int main(void)
{
    int numero, cont, suma;
    bool encontrado;
    encontrado = false;
    numero = 101;
    while (!encontrado)
    {
          suma = 1;
          for (cont = 2; cont < numero; cont++)
          {
              if (numero % cont == 0)
              {
                 suma = suma + cont;
              }
          }
          if (suma == numero)
          {
             encontrado = true;
          }
          else
          {
              numero++;
          }
    }
    cout << "El primero numero perfecto mayor que 100 = " << numero << endl;
    system("pause");
}