Académique Documents
Professionnel Documents
Culture Documents
Contenido
■ 1 La estructura condicional if ... else
■ 1.1 Operadores de Comparación
■ 1.2 Agrupación de operadores
■ 1.3 Evaluación de corto circuito
■ 2 La estructura condicional switch ... case
■ 3 El bucle while
■ 4 El bucle for
■ 5 El bucle do...while
■ 6 El goto
La estructura condicional if ... else es la que nos permite tomar ese tipo de decisiones. Traducida
literalmente del inglés, se la podría llamar la estructura "si...si no", es decir, "si se cumple la condición,
haz esto, y si no, haz esto otro".
Un ejemplo sencillo sería el siguiente (no se trata de un programa completo, sino tan sólo una porción de
código):
Este código de ejemplo dice que si edad es menor que 18 se imprimirá "No puedes
acceder.\n", mientras que en caso contrario se imprimirá "Bienvenido.\n".
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 2 de 9
if (condición) {
sentencias_si_verdadero;
} else {
sentencias_si_falso;
}
Cuando la condición sea verdadera, se ejecutarán las sentencias dentro del primer bloque de código,
cuando la condición sea falsa, se ejecutarán las sentencias del segundo bloque de código.
La indentación (los espacios al comienzo de las líneas) no es necesaria, pero ayuda a la claridad del
código. La utilización de las llaves {... } es obligatoria cuando se quiere utilizar más de una instrucción
por bloque, y optativa cuando sólo se quiere escribir una instrucción. Por claridad, sin embargo, es
recomendable utilizarlas aún cuando sólo vaya a haber una instrucción.
A continuación, un ejemplo con una función, que devuelve el mayor de dos números:
Operadores de Comparación
Las condiciones son expresiones que utilizan operadores para tomar la decisión apropiada. Son los
operadores de comparación, y su resultado puede ser 1 (equivalente a verdadero) o 0 (equivalente a
falso). Este resultado provocará que se ejecute el código del bloque if o el del bloque else, según
corresponda.
Operadores de Comparación
Operador Significado
< estrictamente menor que
> estrictamente mayor que
<= menor o igual que
>= mayor o igual que
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 3 de 9
== igual a
!= distinto de
Por otro lado, en C se toma como falso el valor 0, y como verdadero cualquier otro valor. Esto nos
permite utilizar condiciones sin operador:
Agrupación de operadores
Además, es posible utilizar varios de estos operadores a la vez, mediante los operadores lógicos "y", "o"
y "no"; los operadores correspondientes en C son &&, || y !, respectivamente. Para realizar
combinaciones de operadores, se utilizan paréntesis que agrupan las condiciones.
Hay que notar que el operador ! es unario, es decir, no lleva ningún operando a su izquierda, afecta sólo
al operando que hay a su derecha.
Un ejemplo donde se ven agrupaciones de operadores puede ser la decisión de si un año es bisiesto o no.
Los años son bisiestos si son divisibles por 4, pero no si son divisibles por 100, a menos que también
sean divisibles por 400.
En este caso, se utiliza la operación módulo, que obtiene el resto de la división entera de un número por
otro. Cuando un número es divisible por otro, el resto de su división entera será cero. Siendo que cero es
equivalente a falso, y cualquier valor distinto de cero es equivalente a verdadero, podemos usar el
operador ! para verificar si el número es múltiplo de 4, de 100 o de 400.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 4 de 9
La evaluación en corto circuito es una característica del lenguaje C que se utiliza para optimizar la
ejecución de programas. Consiste en que el programa puede verificar si una expresión es verdadera o
falsa antes de haber evaluado toda condición.
En este caso, si no se cumple que a > 2, no se evaluará la siguiente condición, ya que el resultado será
falso de todos modos.
Esta característica no tiene demasiada importancia al comenzar a programar, pero facilitará ciertas
operaciones y optimizaciones en programas avanzados.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 5 de 9
case 1:
slanuevo=salario+(salario*.035);
printf("tu salario es:%f\n",slanuevo);
break;
case 2:
slanuevo=salario+(salario*.041);
printf("tu salario es:%f\n",slanuevo);
break;
case 3:
slanuevo=salario+(salario*.048);
printf("tu salario es:%f\n",slanuevo);
break;
case 4:
slanuevo=salario+(salario*.053);
printf("tu salario es:%f\n",slanuevo);
break;
default:
printf("tu salario es:%f\n",salario);
}
return 0;
}
Otro ejemplo:
#include <stdio.h>
int main(void) {
int dia;
switch(dia) {
case 1 :
printf("Lun, Luna");
break;
case 2 :
printf("Mar, Marte");
break;
case 3 :
printf("Mier, Mercurio");
break;
case 4 :
printf("Jue, Jupiter");
break;
case 5 :
printf("Vie, Venus");
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 6 de 9
break;
case 6 :
printf("Sab, Saturno");
break;
case 7 :
printf("Dom, Sol");
break;
default :
printf("No existe");
}
return 0;
}
La estructura anterior, de realizarse con sentencias if, necesitaría cuatro de ellas, resultando un enorme
bloque muy difícil de leer. En la mayoría de los casos, además, la sentencia switch proporciona una
ganancia en velocidad del código, pues permite al compilador trabajar en base a que se trata de una
decisión múltiple para una única variable, cosa que con sentencias if el compilador no tiene por qué
detectar.
Como vemos, para cada valor de la variable se ejecuta un bloque de sentencias distinto, en el que no
necesitamos llaves. Hay un caso especial, default, que se ejecuta si ningún otro corresponde, y que
no es necesario poner. Es, en todo, equivalente al bloque else de una sentencia if.
Las sentencias break son muy importantes, ya que el comportamiento normal de un bloque switch
es ejecutarlo todo desde la etiqueta case que corresponda hasta el final. Por ello, si no queremos que se
nos ejecute más de un bloque, pondremos sentencias break al final de cada bloque excepto el último.
Es decir, las etiquetas case son puntos de entrada de la ejecución, y no implican que al acabarse el
bloque case la ejecución salte al final del bloque switch. Las etiquetas case siguientes a la que
hemos utilizado para entrar son, sencillamente, ignoradas.
El bucle while
El bucle while sirve para ejecutar código reiteradas veces.
La condición ha de ser una sentencia que devuelva un valor booleano, y esta puede ser el valor booleano
en sí, verdadero (true o 1) si la condición se cumple, o falso si esta no se cumple (false o 0). También
puede ser el nombre de una variable, y el valor de la expresión dependerá de su contenido. Aunque sea
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 7 de 9
una variable no booleana, siempre se podrá usar, si vale 0 será como si la condición no se cumpliera, y
siempre que sea diferente de 0, se considerará que la condición se cumple.
La forma más obvia tal vez, y la más usada sin duda, son las sentencias comparativas, que usan los
operandos ==, !=, <=, >=, <, >. Su uso sería así:
Tened en cuenta que además de las variables y los valores inmediatos, también se pueden poner allí
llamadas a funciones que devuelvan un valor.
int tecla = 0;
while (tecla == 0) {
tecla = readkey(); /* Intentamos leer una pulsación de tecla *
}
En este ejemplo lo que hacemos es que el programa se detenga hasta que el usuario pulse una tecla, con
lo que cambiará el valor de la variable "tecla".
El bucle for
El bucle for es un bucle muy flexible y la vez muy potente ya que tiene varias formas interesantes de
implementarlo, su forma más tradicional es la siguiente:
Inicialización: en esta parte se inicia la variable que controla el bucle y es la primera setencia que ejecuta
el bucle, solo se ejecuta una vez ya que solo se necesita al principio del bucle.
Sentencia condicional: es la segunda sentencia que ejecuta el bucle, es una sentencia condicional válida,
que determina si el bucle se ejecutará o no. incremento o decremento: es la ultima sentencia que ejecuta
el bucle por lo general incrementar la variable con que se inicio el ciclo, después de eso el bucle revisa
nuevamente la condición, si es verdadera tiene lugar una ejecución más del cuerpo del ciclo, si es falsa
se termina el ciclo y así la repetición. Aquí muestro un ejemplo de un bucle que se ejecuta 100 veces:
No es necesaria por ejemplo en la primera la sentencia iniciar la variable que utilizara el bucle si ya ha
sido inicializada en otra parte del bloque de sentencias donde se encuentra el bucle.
Por lo general la sentencia condicional se compone de la variable que se utilizó para la inicialización del
bucle a la cual se le aplica alguno de los operadodores relacionales <, <=, >, >=; junto con otro
valor; esta parte del bucle también se puede implementar con una variable de tipo bool.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 8 de 9
NOTA: recuerde que en cualquier sentencia donde se evalúa una expresión válida, un valor de retorno=0
se considera falso y cualquier valor distinto de cero es verdadero, así false=0 y true=1.
Creo que es importante comentar que esos tres "parámetros" que se le pasan a la sentencia for se pueden
omitir, pero los punto-y-coma entre ellos sí se han de dejar. También cabe destacar que si no se pone la
condición de ejecución del bucle, este se ejecutará indefinidamente hasta que se ejecute una sentencia
break o se termine la función o el programa mediante un return.
El bucle do...while
El bucle do...while es un bucle que, por lo menos, se ejecuta una vez. While significa "mientras"
Su forma es esta:
do {
/* CODIGO */
} while (/* Condición de ejecución del bucle */)
int aleatorio;
do {
aleatorio = rand();
} while (aleatorio != 25);
La verdad es que este ejemplo puede resultar un poco absurdo, pero es bastante intuitivo. El código del
bucle asigna un valor aleatorio a la variable definida anteriormente, y mientras esa variable no tenga el
valor 25, el bucle sigue ejecutándose.
El goto
La sentencia goto sirve para indicar al programa que continue ejecutándose desde la línea de código
indicada. La verdad es que es una sentencia poco aceptada por la comunidad de programadores, pues
puede provocar que se hagan programas un poco "sucios" y confusos.
/* Código */
ETIQUETA:
/* Código */
goto ETIQUETA;
/* Código */
Así, cuando se ejecute la sentencia goto, el programa continuará su ejecución a partir de la etiqueta
marcada. Como se puede observar se puede usar para crear un bucle, o para ir a una parte del código u
otra si se combina con una sentencia if...else. pero para los bucles ya hay estructuras definidas, y
para la ejecución opcional de bloques de código, ya existen las Funciones.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010
Programación en C/Instrucciones de control - Wikilibros Página 9 de 9
Sólo en ocasiones muy excepcionales será recomendado el uso del goto al crear iteraciones muy
complejas.
Obtenido de "http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control"
Categoría: Programación en C
■ Esta página fue modificada por última vez el 25 jul 2010, a las 06:59.
■ El texto está disponible bajo la Licencia Creative Commons Atribución/Compartir-Igual 3.0;
cláusulas adicionales pueden aplicar. Véase los términos de uso para más detalles.
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control 12/09/2010