Por lo regular, en un programa los enunciados son ejecutados uno después del otro, en el orden en que aparecen escritos. Esto se conoce como ejecución secuencial. Varios enunciados de C, que pronto analizaremos, le permiten al programador especificar que el enunciado siguiente a ejecutar pueda ser otro diferente del que sigue en secuencia. Esto se conoce como transferencia de control.
Durante los años 60, se hizo claro que el uso indiscriminado de transferencias de control era la causa de gran cantidad de dificultades experimentadas por los grupos de desarrollo de software. El problema era causada por el enunciado goto, que le permite al programador especificar una transferencia de control a uno de una amplia gama de destinos posibles, dentro de un programa. Lo que se conoce como programación estructurada se convirtió prácticamente en sinónimo de "eliminación de goto”.
Las investigaciones de Bohm y de Jacopini hablan demostrado que los programas podían ser escritos sin ningún enunciado goto. Para los programadores el reto se convirtió en modificar sus estilos a "programación sin goto". Y no fue sino hasta entrados los años 70 que la profesión de la programación en general empezó a tomar en serio la programación estructurada. Los resultados han sido impresionantes, ya que los grupos de desarrollo de software han informado reducciones en tiempos de desarrollo, entrega a tiempo más frecuente de sistemas y terminación dentro del presupuesto del software. La clave de estos éxitos es simplemente que los programas producidos con las técnicas estructuradas, son más claros, más fáciles de depurar y de modificar, y tal vez más libres de fallas desde el primer momento.
El trabajo de Bohm y Jacopini demostró que todos los programas podrían ser escritos en términos de sólo tres estructuras de control:
- La estructura de secuencia,
- La estructura de selección
- La estructura de repetición.