Versión 3.0

800x600 mínimo
En esta lección:

instrucción while
-----
instrucción do-while
-----
instrucción for
-----
instrucción if
-----
break Y continue
-----
instrucción switch
-----
instrucción goto
-----


Otras secciones:

Conceptos básicos
-----
Programando en C
-----
Programando en C++
-----
Programando Windows 9x.
-----
Teoría electrónica
-----
Circuitos electrónicos
-----
Actividades adicionales
-----
Hipervínculos
-----


Contácteme:

Dudas y comentarios
-----


Hola mundo

EL BUCLE while

El lenguaje de programación C contiene varias instrucciones condicionales y de bucle, en este capítulo las trataremos todas ellas empezando con el bucle while. El bucle while se ejecuta mientras una condición es cierta. Cuando esta condición se torna falsa, el bucle termina su operación. Veamos el siguiente ejemplo:


/* Este es un ejemplo del bucle while. */
# include <stdio.h>
int main()
{
    int contador;
 
    contador = 0;
    while (contador < 6) 
    {
        printf ("El valor de contador es %d\n", contador);
        contador = contador + 1;
    }
    return 0 ;
}
 

/ * Resultado de la ejecución del programa
El valor de contador es 0
El valor de contador es 1
El valor de contador es 2
El valor de contador es 3
El valor de contador es 4
El valor de contador es 5
* /

En este programa empezamos con un comentario y el punto de entrada main ( ), después definimos una variable de tipo entero a la que llamamos contador dentro del cuerpo del programa, esta variable es inicializada a cero para después entrar en el bucle while. La sintaxis del bucle while es justamente como se muestra en el programa. A la palabra clave while le sigue una expresión de algo entre paréntesis y luego una serie de enunciados encerrados entre llaves. Tan pronto como la expresión entre paréntesis es verdadera todos los enunciados entre las llaves se ejecutarán repetidamente. En este caso, debido a que la variable contador es incrementada en 1 cada que los enunciados entre llaves son ejecutados, eventualmente se alcanzará el valor de 6. En este punto los enunciados no se ejecutarán mas porque contador ya no es menor que 6 finalizando así el bucle. El programa continuará entonces con los enunciados que siguen a las llaves. La expresión de comparación entre paréntesis de la instrucción while la trataremos en el siguiente capítulo, antes debemos hacer algunas observaciones respecto al bucle. Primero, si la variable contador fuera inicializada a un valor mayor de 5, los enunciados dentro de las llaves podrían no ejecutarse por lo que es posible tener un bucle que jamás se ejecute. Segundo, si la variable no se incrementa dentro del bucle este jamás terminaría y por ende el programa. Finalmente, en el caso de existir un solo enunciado por ejecutar entonces no es necesario el uso de llaves. A partir de este programa veremos el resultado de la ejecución del mismo en forma de comentarios y en algunas veces mostraremos imágenes del programa ejecutado al final del código. También continuaremos ignorando el significado de los enunciados #include y return ya que se explicarán posteriormente.

Volver al principio

Hola mundo

EL BUCLE do-while

Tenemos ahora una variación del bucle while en nuestro siguiente ejemplo, este programa es casi idéntico al ejemplo anterior excepto que el bucle inicia con la palabra clave do, seguida por una serie de enunciados compuestos entre llaves, después viene la palabra clave while y finalmente la expresión de evaluación entre paréntesis.


/* Este es un ejemplo del bucle do-while */
# include <stdio.h>

int main()
{
    int i;

    i = 0;
    do 
    {
        printf ( "El valor de i es ahora %d\n", i );
        i = i + 1;
    }
    while (i < 5);
    return 0;
}
Pantalla 3

Los enunciados entre llaves se ejecutan repetidamente en tanto que la expresión entre paréntesis sea verdadera. Cuando la expresión es falsa, la ejecución del bucle termina y el control del programa pasa a los enunciados siguientes. Respecto al bucle do-while debemos apuntar lo siguiente. En primer lugar, debido a que la prueba verdadero-falso se hace al final del bucle, los enunciados dentro de las llaves se ejecutan al menos una vez. En segundo, si la variable i no cambia dentro del bucle entonces el programa jamás terminaría. Observe además que los bucles pueden anidarse, esto es, un bucle puede contener dentro de sus enunciados otro bucle. El nivel de anidamiento no tiene límite y esto lo ilustraremos mas adelante.

Volver al principio

Hola mundo

EL BUCLE for


/* Este es un ejemplo del bucle for */

#include <stdio.h>

int main()
{
    int indice;

    for(indice = 0 ; indice < 6 ; indice = indice + 1)
    printf ( "El valor de indice es %d\n", indice);
    return 0;
}


/* Resultado de la ejecución:
El valor de indice es 0
El valor de indice es 1
El valor de indice es 2
El valor de indice es 3
El valor de indice es 4
El valor de indice es 5
*/

El bucle for consiste de la palabra clave for seguida de una expresión entre paréntesis. Esta expresión se compone realmente de tres campos cada uno separado por un punto y coma. El primer campo contiene la expresión "indice = 0" y se le llama campo de inicialización. Cualquier expresión en este campo se ejecuta antes del inicio del bucle, en términos generales se puede decir que no existe límite en el contenido del primer campo ya que es posible contener varios enunciados separados por comas sin embargo es buena práctica de programación mantener las cosas simples. El segundo campo, que en este caso contiene "indice < 6 " es la prueba que se hace al principio de cada ciclo del bucle y puede ser cualquier expresión que pueda evaluarse a verdadero ó falso. La expresión del tercer campo se ejecuta en cada ciclo del bucle pero solo hasta que se hayan ejecutado todas las instrucciones contenidas dentro del cuerpo principal del bucle, en este campo, como en el primero es posible contener varias expresiones separadas por comas.

En seguida de la expresión for ( ) están uno o varios enunciados que conforman el cuerpo ejecutable del bucle. Un enunciado compuesto es cualquier grupo de instrucciones válidas en C encerradas entre llaves.

Un bucle while es útil cuando se desconoce cuantas veces será ejecutado un bucle, en tanto que la instrucción for se usa generalmente en aquellos casos en donde debe existir un número fijo de interacciones, además, el bucle for es conveniente porque contiene toda la información del control del bucle en un solo lugar, dentro de un paréntesis. Es de su elección utilizar uno u otro bucle y dependiendo de cómo sean utilizados cabe la posibilidad con cada uno de estos bucles de no ejecutar las instrucciones dentro del cuerpo del bucle, esto es porque la prueba se hace al principio del bucle y en la primera interacción puede fallar, sin embargo con la instrucción do-while tenemos la seguridad de ejecutar el cuerpo del bucle al menos una sola vez porque la prueba en este bucle se hace al final del ciclo.

Volver al principio

Hola mundo

EL ENUNCIADO if

Con la instrucción if tenemos el primer ejemplo de un enunciado condicional. Observe en primera instancia la presencia de un bucle for con un enunciado compuesto que contiene dos instrucciones if. Este es a su vez un ejemplo de instrucciones anidadas, está claro que cada una de las instrucciones if será ejecutada 8 veces.


/* Ejemplo de los enunciados if e if-else */
# include <stdio.h>

int main()
{
    int valor;
    for(valor = 0 ; valor < 8 ; valor = valor + 1) 
    {
        if(valor == 2)
        printf("Este mensaje se muestra solo cuando"
          "valor es igual a 2 \n");
        if(valor < 5)
        printf("Este mensaje se muestra cuando"
          "valor que es %d es menor que 5\n", valor);
        else
        printf("Este mensaje se muestra cuando"
          "valor que es %d es mayor que 4\n", valor);
    } /* Fin del bucle */
    printf("Este mensaje se mostrara solo cuando finalice el bucle \n");
    return 0;
}
Pantalla 4

Veamos el primer enunciado if, este empieza con la palabra clave if seguida de una expresión entre paréntesis, si esta es evaluada a verdadero se ejecuta la instrucción que le sigue, pero si es falso se brinca esta instrucción y continúa la ejecución en los siguientes enunciados. La expresión "valor == 2" está simplemente preguntando si el valor de valor es igual a 2, observe que se está utilizando un doble signo de igual para evaluar a verdadero cuando valor vale 2, utilizar "valor == 2" tiene un significado completamente diferente que explicaremos mas adelante.

La segunda instrucción if es similar a la primera excepto por la adición de la palabra clave else en la línea 14, esto significa que si el enunciado entre paréntesis se evalúa a verdadero se ejecuta la primera expresión, de lo contrario la instrucción que sigue a else será ejecutada, por lo que una de las dos instrucciones será siempre ejecutada. Observe además que el programa imprime dos mensajes diferentes cuando valor vale 2, esto es así porque tenemos dos condiciones verdaderas cuando valor es 2, esto es, cuando valor es exactamente 2 y a la vez es menor que 5. Compile este programa y observe su funcionamiento.

Volver al principio

Hola mundo

LOS ENUNCIADOS break Y continue

Para ver un ejemplo de estas dos instrucciones, estudiemos el siguiente código:


# include < stdio.h >
int main()
{
    int xx;

    for(xx = 5 ; xx < 15 ; xx = xx + 1)
    {
        if(xx == 8)
        break;
        printf("Este bucle se ejecuta cuando xx es menor de 8,"
          "ahora xx es %d\n", xx);
    }
    for(xx = 5 ; xx < 15 ; xx = xx + 1)
    {
        if(xx == 8)
        continue;
        printf("Ahora xx es diferente de 8, xx tiene el valor de %d\n", xx);
    }
    return 0;
}

/* Resultado de la ejecución:
Este bucle se ejecuta cuando xx es menor de 8, ahora xx es 5
Este bucle se ejecuta cuando xx es menor de 8, ahora xx es 6
Este bucle se ejecuta cuando xx es menor de 8, ahora xx es 7
Ahora xx es diferente de 8, xx tiene el valor de 5
Ahora xx es diferente de 8, xx tiene el valor de 6
Ahora xx es diferente de 8, xx tiene el valor de 7
Ahora xx es diferente de 8, xx tiene el valor de 9
Ahora xx es diferente de 8, xx tiene el valor de 10
Ahora xx es diferente de 8, xx tiene el valor de 11
Ahora xx es diferente de 8, xx tiene el valor de 12
Ahora xx es diferente de 8, xx tiene el valor de 13
Ahora xx es diferente de 8, xx tiene el valor de 14
*/

Observe que en el primer bucle for, existe una instrucción if que llama a un break si xx es igual a 8. La instrucción break lleva al programa a salirse del bucle que se estaba ejecutando para continuar con los enunciados inmediatos al bucle, terminando éste en forma efectiva. Se trata de una instrucción muy útil cuando se desea salir del bucle dependiendo de los resultados que se obtengan dentro del bucle. En este caso, cuando xx alcanza el valor de 8, el bucle termina imprimiendo el último valor válido, 7. La instrucción break brinca inmediatamente después de la llave que cierra el bucle.

En el siguiente bucle for que empieza en la línea 12, contiene un enunciado continue el cual no finaliza el bucle pero suspende el presente ciclo. Cuando el valor de xx alcanza como en este caso, el valor de 8, el programa brincará al final del bucle para continuar la ejecución del mismo, eliminando así la instrucción printf ( ) cuando en el bucle xx alcanza el valor de 8. El enunciado continue siempre brinca al final del bucle, justo antes de la llave que indica el fin del bucle.

Volver al principio

Hola mundo

LA INSTRUCCIÓN switch

Estudiaremos ahora una de las instrucciones mas importantes del lenguaje C, el enunciado switch, ésta no es difícil así que no permita que lo intimide. Empieza con la palabra clave switch seguida por una variable entre paréntesis la cual es la variable de conmutación, en este ejemplo truck. Las condiciones de conmutación se encierran entre llaves. La palabra reservada case se utiliza para empezar cada condición, le sigue el valor de la variable para la condición seleccionada, después un símbolo de colon (dos puntos) y por último los enunciados a ser ejecutados.


# include <stdio.h>
int main()
{
    int pato;
    for (pato = 3 ; pato < 13 ; pato = pato + 1)
    {
        switch (pato)
        {
            case 3 : printf("pato vale tres\n"); break;
            case 4 : printf("pato vale cuatro\n"); break;
            case 5 :
            case 6 :
            case 7 :
            case 8 :
            printf("El valor de pato esta entre 5 y 8\n");
            break;
            case 12 :
            printf("pato vale doce\n");
            break;
            default : printf("Valor indefinido en una instrucción"
              "case\n"); break;
        } /* Fin de la instrucción switch */
    } /* Fin del bucle */
    return 0;
}
Pantalla 5

La mejor manera de entender el funcionamiento de la instrucción switch es compilando y ejecutando el programa de este ejemplo, cuando la variable pato vale 3 la instrucción switch causa que el programa brinque directamente a la línea 9 donde printf ( ) despliega "pato vale tres" y el enunciado break hace brincar la ejecución del programa fuera del bucle de instrucciones de switch.

Cuando el valor de la variable pato está especificado en una instrucción case dentro del bucle de instrucciones de switch, los enunciados del programa serán ejecutados en orden hasta encontrar una instrucción break cuyo funcionamiento se explicó en el párrafo anterior. En el ejemplo que presentamos, cuando pato vale 5, este valor está asociado a una instrucción case pero como no está asociada ninguna instrucción para ejecutar, el programa continúa hasta encontrar una instrucción ejecutable, que en el ejemplo es printf ( ) de la línea 15. En el caso en que el valor de pato no esté asociado con una instrucción case se ejecuta el enunciado especificado en la instrucción default.
La instrucción switch no se usa con la misma frecuencia que el bucle o el enunciado if, de hecho se usa muy poco, sin embargo debe ser comprendida completamente por el programador C serio.

Volver al principio

Hola mundo

EL ENUNCIADO goto

Para utilizar este enunciado simplemente use la palabra clave goto seguida por el nombre simbólico a donde se quiera hacer el salto, este nombre se coloca en cualquier parte del código seguido de un símbolo de colon (dos puntos). Usted puede brincar a donde quiera, pero no está permitido hacerlo hacia el interior de un bucle, aunque si esta permitido brincar fuera del bucle.


# include <stdio.h>
int main ()
{
    int uno, dos, tres;

    casa_del_lobo:
    {
        printf("Auuuuuuuuuuu \n");
        if(uno==1)
        if(dos==2)
        if(tres==3)
        {
            printf("Este es el ultimo mensaje... \n");
            printf("La suma de uno, dos y tres es %d \n", (uno+dos+tres));
            goto fin_del_programa;
        }
        printf("Todavia no termina el programa... \n");
    }
    goto inicio;
    otro_lugar:
    {
        printf("Estamos perdidos... \n");
        tres=3;
        printf("tres vale %d \n", tres);
        goto un_lugar_mas;
    }
    un_lugar_desconocido:
    {
        dos=2;
        printf("Este no es el inicio del programa... \n");
        printf("Con goto se puede brincar fuera de un bucle... \n");
        goto casa_del_lobo;
    }
    goto fin_del_programa;
    inicio:
    {
        uno=1;
        printf("Ahora uno vale %d \n", uno);
    }
    goto otro_lugar;
    un_lugar_mas:
    printf("Este lugar es solo para brincar a otro lado... \n");
    goto un_lugar_desconocido;
    fin_del_programa:
    return 0;
}
Pantalla 6

Este programa en particular es un verdadero embrollo pero es un buen ejemplo de porque los desarrolladores de software están tratando de eliminar el uso del enunciado goto tanto como sea posible. Algunas personas opinan que goto no debería utilizarse nunca, esto es un criterio reducido pues si Usted se llegara a encontrar en una situación donde el uso de goto facilita la ejecución del programa sienta plena libertad de utilizar la sentencia goto. A los códigos escritos sin sentencias goto se les suele conocer con el nombre de "Programación Estructurada". Un buen ejercicio podría consistir en re-escribir el código para ver en que manera se vuelven los enunciados mas legibles cuando están enlistados en orden.

Volver al principio

Hola mundo

© 1998, 1999 Virgilio Gómez Negrete, Derechos Reservados