Tema 3.1.3.

Anuncio
Técnicas de Programación
3.1.- Lenguaje de programación C
Tema 3.1.3.- Sentencias de control de programa
Introducción
Son sentencias que permiten romper el orden de ejecución del programa. Sin este tipo de sentencias la
ejecución se realiza en el orden en que se han escrito. Así mismo, en muchas ocasiones es necesario
ejecutar un conjunto de sentencias un número determinado de veces, o bien hasta que se cumpla una
determinada condición. Este tipo de sentencias son las repetitivas. Estas instrucciones o sentencias se
dividen en tres categorías:
0.- Instrucciones condicionales: if() y switch()
1.- Instrucciones repetitivas: for, while, do-while
2.- Instrucción de salto incondicional: goto
En este tema aprenderemos a utilizar estas sentencias para que los programas tomen decisiones y
para que sean capaces de ejecutar bloques de sentencias repetitivas.
1.- Instrucciones condicionales
Una característica muy poderosa de cualquier ordenador es la capacidad que tiene de tomar
decisiones, es decir, que al comparar dos alternativas diferentes pueda tomar una decisión basada en
la evaluación de alguna condición impuesta por el programador. Es por tanto necesario que un
lenguaje de programación tenga instrucciones que permitan formar estas condiciones e instrucciones
que pueden evaluarlas.
Tema 3.1.3.- Sentencias de control de programa
1
1.- Instrucciones condicionales
El formato general de una instrucción condicional genérica es:
Instrucción condicional (condición)
si condición cierta
{grupo de instrucciones para verdadero}
si condición falsa
{grupo de instrucciones para falso}
Observamos cuatro partes bien diferenciadas:
1. La propia instrucción condicional;
2. La condición;
3. El grupo de instrucciones para verdadero; y
4. El grupo de instrucciones para falso.
Cuando el ordenador evalúa una condición solo puede hacerlo de dos maneras: o la condición es
cierta o verdadera (true) o la condición es falsa (false), lo que dependerá del valor que tenga asignado o
que se haya capturado para la variable que está en la condición, y dependiendo del resultado de la
evaluación se ejecutarán las instrucciones de la parte cierta o las de la parte falsa de la condición.
En general todas las condiciones simples se forman con variables, operadores de relación o
relacionales, constantes o variable. Una condición simple se define como el conjunto de variables y/o
constantes unidas por los llamados operadores relacionales.
Debemos tener especial cuidado con el operador de igualdad (=) y el operador relacional de
comparación por igualdad (==), es decir:
dato = 10: se carga o asigna el valor 10 a la variable dato.
dato == 10: se compara el valor de la variable dato con el numero 10.
Solo este ultimo formato es valido dentro de una condición, en una instrucción condicional.
Tema 3.1.3.- Sentencias de control de programa
2
1.- Instrucciones condicionales
La instrucción if. La instrucción condicional más usada es la sentencia if, que vamos a analizar
seguidamente. Su sintaxis es la siguiente:
if (condición)
{grupo de instrucciones para verdadero;}
else
{grupo de instrucciones para falso;};
Debemos tener muy presentes las siguiente observaciones:
1ª. Obsérvese donde van y donde no van los puntos y comas
2ª. La condición va entre paréntesis
3ª. Si un if no tiene un grupo de instrucciones para falso se omite el else, y la llave antes de else si
terminaría con punto y coma.
El proceso de ejecución de una sentencia if es el siguiente:
1º. Se evalúa la condición, que puede ser una expresión numérica, relacional o lógica.
2º. Si el resultado de evaluar la condición es verdadero (resultado distinto de cero) se ejecutará lo
indicado por la sentencia de grupo de instrucciones para verdadero.
3º. Si el resultado de evaluar la condición es falso (resultado cero) se ejecutará lo indicado por la
sentencia de grupo de instrucciones para falso, siempre que se haya especificado la clausula else.
4º. Si el resultado de evaluar la condición es falso y se ha omitido la clausula else se ignora la
sentencia de grupo de instrucciones para verdadero.
5º. En cualquiera de los casos la ejecución del programa continúa por la siguiente sentencia
ejecutable.
if (condicion)
Ejemplo de sentencia if simple.
Veamos algunos ejemplos
{
Se evalúa condicion. Si el resultado es true se
de sentencias if que nos
sentencia1;
ejecuta el grupo sentencia1, sentencia2, ...; y si
aclaren lo descrito:
sentencia2;
el resultado es false se salta el grupo y se
...
prosigue en la línea sentencia.
}
sentencia;
Tema 3.1.3.- Sentencias de control de programa
3
1.- Instrucciones condicionales
if (condicion)
sentencia1;
else
sentencia2;
sentencia;
Ejemplo de sentencia if con else.
Se evalúa condicion. Si el resultado es true se ejecuta sentencia1 y se
prosigue en la línea sentencia y si el resultado es false se ejecuta sentencia2 y
se prosigue en la línea siguiente (sentencia). Tanto sentencia1 como
sentencia2 pueden ser grupos.
Existe una forma especial de sentencia if ... else que podemos denominar múltiple y que permite
realizar una ramificación múltiple del programa según se cumpla una condición entre muchas
condiciones. La forma general de esta es:
if (condicion1)
sentencia o grupos de sentencias 1; Se evalúa condicion1. Si el resultado es true, se ejecuta
else if (condicion2)
sentencia o grupo 1. Si el resultado es false, se salta sentencia
sentencia o grupos de sentencias 2; o grupo 1 y se evalúa condicion2. Si el resultado es true se
else if (condicion3)
ejecuta sentencia o grupo 2, mientras que si es false se evalúa
sentencia o grupos de sentencias 3; condicion3 y así sucesivamente. Si ninguna de las
else if (...)
expresiones o condiciones es true se ejecuta sentenciaN que
...
es la opción por defecto (puede ser una sentencia nula, y en
[else
ese caso puede eliminarse junto con el else que la precede.
sentenciaN;]
Veamos otro ejemplo:
if (x) // Es lo mismo que if (x!= 0)
b=a/x;
b=b+1;
La sentencia b=a/x se ejecutará si la expresión es verdadera (x ≠ 0) y no se ejecutará si es falsa (x=0).
En cualquier caso la ejecución continua por la sentencia b=b+1.
Tema 3.1.3.- Sentencias de control de programa
4
1.- Instrucciones condicionales
Es posible crear una situación del siguiente tipo: En cualquiera de los grupos de instrucciones para
verdadero o falso se puede escribir otra sentencia if...else. Si esto es así, es decir que se ejecuta una
sentencia if...else dentro de otra hablamos de sentencias anidadas if...else. Su sintaxis general es la
siguiente:
if (condición 1)
{
If (condición 2)
grupo de instrucciones 1;
}
else
{grupo de instrucciones 2;};
La forma de evaluación de este anidamiento es como sigue:
● Si condición 1 es falso se pasa a ejecutar el grupo de instrucciones 2, aunque el resultado de evaluar
condición 2 sea verdadero.
● Si condición 1 es verdadero y condición 2 es falso no se ejecutan ni grupo de instrucciones 1 ni
grupo de instrucciones 2, luego se continúa por la siguiente sentencia ejecutable del programa.
● Si condición 1 es verdadero y condición 2 es verdadero se ejecuta grupo de instrucciones 1
continuando el flujo del programa en función de este grupo de instrucciones, que a su vez pueden
contener otro anidamiento de sentencias if...else.
Veamos un sencillo ejemplo que se puede resolver, entre otras formas, anidando sentencias if.
Ejemplo 10.- Cual es el menor de tres números con if anidados
Realizar un programa que sea capaz de decidir cual es el menor de tres números reales que
introduzcamos por teclado. Llamamos a los números datoA, datoB y datoC y declaramos otra variable
que llamamos Resultado, de forma que el siguiente fragmento de código nos resuelve el problema:
Tema 3.1.3.- Sentencias de control de programa
5
1.- Instrucciones condicionales
Ejemplo 10.- Cual es el menor de tres números con if anidados
if (datoA < datoB)
{
if (datoA < datoC) //if anidado para opción true del primer if
Resultado = datoA;
else
Resultado = datoC;
}
else
{
if (datoB < datoC) //if anidado para opción false del primer if
Resultado = datoB;
else
Resultado = datoC;
}
Un posible resultado en tiempo de ejecución es:
Tema 3.1.3.- Sentencias de control de programa
6
1.- Instrucciones condicionales
Condiciones compuestas
En muchas ocasiones es necesario presentar mas de una condición para su
evaluación hablando entonces de condición compuesta, que se define como dos o más condiciones
simples unidas por operadores lógicos.
Para que una condición compuesta que contiene el operador lógico "AND" se evalúe como cierta las
dos condiciones simples deben ser ciertas.
Para que una condición compuesta que contiene el operador lógico "OR" se evalúe como cierta basta
con que una de las condiciones simples sea cierta.
La cantidad total de casos posibles cuando se unen dos o más condiciones simples es de 2n, donde n
es la cantidad de condiciones. Una condición compuesta formada por dos condiciones simples unidas
por los operadores lógicos AND u OR originan 22 = 4 casos posibles según las tablas de verdad de las
operaciones lógicas correspondientes.
Vamos a construir una tabla de verdad para una condición compuesta de tres condiciones simples,
recordando que:
1.- La cantidad posible de casos es 23 = 8 casos posibles.
2.- Para evaluar una condición triple, primero se evalúan las dos primeras incluyendo su operador, bajo
las reglas ya descritas y luego se evalúa, el resultado parcial contra la ultima condición, y ultimo
operador, para obtener la evaluación final.
Por ejemplo: sea una condición compuesta de tres condiciones simples, donde el primer operador
lógico es el "AND" y el segundo operador lógico es el "OR". Es decir, se trata de evaluar una condición
compuesta como:
1ª Cond.Simple AND 2ª Cond.Simple OR 3ª Cond.Simple
La tabla de verdad la vemos en la página siguiente.
Tema 3.1.3.- Sentencias de control de programa
7
1.- Instrucciones condicionales
Condiciones compuestas
1ª Cond.Simple AND 2ª Cond.Simple OR 3ª Cond.Simple
1ª Cond.Simple
2ª Cond.Simple
Eval. Parcial AND
true
true
true
true
false
false
false
true
false
false
false
false
3ª Cond.Simple
Eval. Final OR
true
true
false
true
true
true
false
false
true
true
false
false
true
true
false
false
Instrucción switch
La instrucción switch() es una instrucción de decisión múltiple que permite ejecutar una de varias
acciones en función del valor de una expresión. Se trata de comparar el valor contenido en una variable
contra una lista de constantes tipo int o char, de forma que al encontrar la igualdad entre variable y
constante, se ejecuta el grupo de instrucciones asociados a dicha constante. Si no se encuentra
igualdad entre variable y constante, entonces se ejecuta un grupo de instrucciones asociados a default,
aunque este ultimo es opcional.
Tema 3.1.3.- Sentencias de control de programa
8
1.- Instrucciones condicionales
Instrucción switch
La sintaxis de esta instrucción es la siguiente:
switch (expresion) // variable int o char
{
case constante 1:
grupo de instrucciones 1;
break;
case constante 2:
grupo de instrucciones 2;
break;
case constante 3:
grupo de instrucciones 3;
break;
…
default:
grupo de instrucciones n;
};
Los grupos de instrucciones pueden ser sentencias simples o compuestas.
La instrucción switch evalúa la expresión entre paréntesis comparando su valor con las constantes de
cada case, ejecutándose el grupo de instrucciones del case cuya constante coincida con el valor de
expresión, continuando hasta el final del bloque o hasta una instrucción que transfiera el control fuera
del bloque switch, como por ejemplo break.
Si no existe ninguna contante igual al valor de la expresión se ejecuta el grupo de instrucciones a
continuación de default, si ha sido especificado.
Si eliminamos los break y el resultado de la evaluación de expresión coincide, por ejemplo, con
constante 2 se ejecuta grupo de instrucciones 2 seguido de grupo de instrucciones 3, y así
sucesivamente hasta que se llegue al final o se encuentre una sentencia de ruptura como break.
Tema 3.1.3.- Sentencias de control de programa
9
1.- Instrucciones condicionales
Instrucción switch
Ejemplo 11.- Ejemplo de sentencia switch.
Queremos escribir un programa que nos pida el número (como dato tipo entero) correspondiente
a un día de la semana (consideraremos el Lunes como primer día y el Domingo como el último) y que
nos presente en pantalla el nombre en forma de texto (como dato tipo cadena) que se corresponda con
el día introducido. Además si introducimos un número menor que 1 o mayor que siete debe
mostrarnos un mensaje de error como por ejemplo “Numero de día incorrecto”.
Para resultado correcto
Para resultado incorrecto
Ejemplo 12.- Analizar un ejemplo de sentencia switch. Analizar el siguiente código de programa
{
case 'a':printf("Opcion A\n"); break;
#include <stdio.h>
case 'b':printf("Opcion B\n"); break;
#include <conio.h>
case 'c':
int main ()
case 'd':printf("Opcion C o D\n"); break;
{
default: printf("Opcion ?\n");
char c;
}
printf( "\nIntroducir un caracter a,b,c o d o cualquier otro: " );
}
scanf( "%s", &c );
printf("\nUna tecla para salir");
{
getch();
switch(c)
return 0;
}
Tema 3.1.3.- Sentencias de control de programa
10
1.- Instrucciones condicionales
Instrucción switch
Podemos obtener resultados similares a:
Al introducir una opción cualquiera
Opción con break
Opción sin break
2.- Instrucciones repetitivas: for, while, do-while
En lenguaje C existen también sentencias que permiten repetir una serie de veces la ejecución de unas
líneas de código. Esta repetición se puede realizar:
● Un número determinado de veces
● Hasta que se cumpla una determinada condición lógica o aritmética.
De una forma genérica, a estas instrucciones o sentencias repetitivas o cíclicas se les denomina
bucles.
La instrucción for. Permite repetir una cantidad conocida y exacta de veces la ejecución de una
instrucción simple o compuesta. Su sintaxis general es:
for ([<inicializacion>] ; [<condicion>] ; [<incremento>])
{
instrucción o instrucciones simples o compuestas;
};
Pudiendo en inicializacion representar varias variables de control iniciadas con sus correspondientes
valores y separadas por comas.
Condición representa una expresión booleana que si se omite se supone verdadera.
Incremento es una o más expresiones separadas por comas cuyos valores evolucionan en el sentido
que se cumpla la condición.
Tema 3.1.3.- Sentencias de control de programa
11
2.- Instrucciones repetitivas: for, while, do-while
Probablemente la forma más sencilla de explicar esta sentencia sea con un sencillo ejemplo. Sea la
instrucción:
for(x=1 ; x<=10 ; x=x+1)
Vemos la sintaxis:
1.- Se inicializa la variable x, implicando la carga de la variable de control con un valor inicial.
2.- La condición es una expresión relacional que evalúa la variable de control contra un valor final o de
parada que determina cuando debe acabar el bucle.
3.- El incremento define la manera en que la variable de control debe cambiar cada vez que el computador
repite un bucle.
4.- Los tres argumentos se deben separar con punto y coma.
Se ejecuta de la siguiente forma: Una vez inicializado el bucle (x=1) se evalúa la condición (x<=10) que resulta
ser true por lo que se pasa a incrementar la variable (x=x+1, x=1+1=2). Se vuelve a evaluar la condición
(x<=10) que resulta ser nuevamente true por lo que se pasa a incrementar la variable (x=x+1, x=2+1=3).De
esta forma se sigue evaluando la condición hasta que sea false, momento en el que la ejecución del
programa prosigue en la sentencia siguiente a la construcción for.
Casos Particulares de sentencias for
1º. Caso general: El ciclo comienza en uno y se incrementa de uno en uno.
2º. Valor inicial diferente de uno, por ejemplo:
for(x=6 ; x<=25 ; x=x+1)
3º. Valor inicial negativo, por ejemplo:
for (x=-8 ; x=8 ; x=x+1)
4º. Incrementos diferentes de uno, por ejemplo:
for (x=1 ; x<=20 ; x=x+3)
5º. Decrementos, por ejemplo:
for (x=50 ; x >= 10; x= x - 4)
En este caso el valor inicial de la variable debe ser mayor que el valor final y debemos cambiar el
sentido de la condición.
6º. Solamente en los casos de incrementos o decrementos de una en una unidad podemos sustituir en
el for el x=x+1 por x++ y el x=x-1 por x --.
Tema 3.1.3.- Sentencias de control de programa
12
2.- Instrucciones repetitivas: for, while, do-while
Ejemplos de sentencia for
int i;
for (i = 1 ; i <= 100 ; i++)
{
grupo de instrucciones simples o compuestas;
};
int m;
for (m = 5 ; m <= 125 ; m += 5)
{
grupo de instrucciones simples o compuestas;
};
int j, k;
for (j = 3, k = 6 ; j+k < 40 ; j++,k +=2)
{
grupo de instrucciones simples o compuestas;
};
char caracter;
for (caracter = ‘z’ ; caracter >= ‘a’ ; caracter --)
{
grupo de instrucciones simples o compuestas;
};
Tema 3.1.3.- Sentencias de control de programa
13
2.- Instrucciones repetitivas: for, while, do-while
Sentencia for
Ejemplo 13.- Sentencia for
Realizar un programa que muestre por pantalla los 10 primeros números naturales para obtener
un resultado similar a:
Ejemplo 14.- Pares e impares con sentencia for
Realizar un programa que muestre por pantalla en dos columnas los números pares e impares
comprendidos 0 y 20 para obtener un resultado como:
Tema 3.1.3.- Sentencias de control de programa
14
2.- Instrucciones repetitivas: for, while, do-while
Sentencia for
Para finalizar con la sentencia for vamos a exponer un ejemplo comentado de como realizar la misma
tarea de formas diferentes. Se trata realizar la operación 4! = 4x3x2x1 = 24 para lo que el código puede
ser el siguiente:
#include <stdio.h>
#include <conio.h>
int main () {
int i=1, fact=1; /*********** Primera forma ***********/
for (;i<=4;)/*La instrucción for contiene sólo el chequeo de la variable*/
{
fact *= i;
++i;
}
printf("Factorial de 4 con la primera forma = %d\n", fact);
/*********** Segunda forma ***********/
fact=1; /* Inicializamos la variable */
for (i=1; i<=4; ++i) /*Forma más habitual de expresar un bucle*/
fact*=i;
printf("Factorial de 4 con la segunda forma = %d\n", fact);
/*********** Tercera forma ***********/
for(i=1, fact=1; i<=4 ; ++i, fact*=i)
/*Se ejecuta antes el incremento de la variable que el chequeo y la
operación se ejecuta en lugar de 4 veces 5 dando como resultado 120 en lugar de 24.*/
;
printf("Factorial de 4 con la tercera forma = %d\n", fact);
/*********** Cuarta forma ***********/
for(i=1, fact=1; i<=4 ; fact*=i, ++i)
/*Forma muy parecida a la tercera pero con las operaciones en el orden correcto*/
;
printf("Factorial de 4 con la cuarta forma = %d\n", fact);
printf("\n\nUna tecla para salir");
getch();
return 0; }
Tema 3.1.3.- Sentencias de control de programa
15
2.- Instrucciones repetitivas: for, while, do-while
Instrucción o sentencia while
La instrucción while se ejecuta mientras una condición permanezca como verdadera terminando el
ciclo o bucle en el momento en que la condición se convierte en falsa. Su sintaxis es la siguiente:
Inicializamos la variable para la condición;
while(condicion) //Condicion es una expresión numérica, relacional o lógica.
{
grupo de instrucciones;
};
La instrucción while se ejecuta según el siguiente proceso:
Ejemplo de sentencia while:
1º. Se evalúa condicion.
int x=1;
2º. Si el resultado es falso (cero) no se ejecuta grupo
while(x<=10)
de instrucciones pasando el control a la siguiente
{
sentencia del programa.
printf("%d\tCadena de caracteres\n",x);
Si el resultado es verdadero (distinto de cero) se
x++;
ejecuta grupo de instrucciones repitiéndose el
};
proceso desde el primer punto.
Ejemplo 15.- Tablas de multiplicar
Realizar un programa en el que se solicite al
usuario el número del que desea obtener la tabla de
multiplicar y el número de items que quiere obtener
de la misma. El resultado puede ser:
Tema 3.1.3.- Sentencias de control de programa
16
2.- Instrucciones repetitivas: for, while, do-while
Bucles anidados con while
Cuando incluimos una sentencia while dentro de otra sentencia while estamos hablando de lo que se
conoce como bucle anidado. En general se habla de anidamiento tanto en sentencia while como en
sentencias do o for. La estructura general de un anidamiento con while es la siguiente:
Se inicializan las variables
while(condicion)
{
grupo de instrucciones externas;
while(condicion)
{
grupo de instrucciones internas;
}
};
Se ejecuta la sentencia while externa y por cada vez que se ejecuta lo hará el interno tantas veces
como imponga su condición.
Ejemplo 16.- Pitagoras
Se trata de realizar mediante sentencias while anidadas un programa que resuelva el teorema de
Pitagoras calculando la hipotenusa para valores enteros positivos comprendidos entre +1 y +50
presentando por pantalla solamente los resultados exactos.
El código del programa es el siguiente:
#include <stdio.h>
#include <conio.h>
#include <math.h> //Necesario para calcular raíces cuadradas
int main ()
{
unsigned int Cc = 1, Co = 1, h = 0; //Declaramos variables y las inicializamos
printf("h\tCc\tCo\n"); //Mostramos por pantalla una cabecera con tres columnas usando tabuladores
printf("-------------------");
Tema 3.1.3.- Sentencias de control de programa
17
2.- Instrucciones repetitivas: for, while, do-while
Bucles anidados con while
Ejemplo 16.- Pitagoras -- continuación
while (Cc <= 50) //Primer bucle que dará valor de 1 a 50 a Cc
{
// Calculamos la hipotenusa h.
h = (int)sqrt(Cc * Cc + Co * Co); //Usamos el operador cast para asegurar tipo int
//Como h es un entero se almacena la parte entera de la raíz cuadrada.
while (Co <= 50 && h <= 50) //bucle anidado con condición compuesta AND.
{
/* Si la raíz cuadrada anterior es exacta imprimimos resultado */
if (h * h == Cc * Cc + Co * Co)
{
printf("\n%d\t%d\t%d",h,Cc,Co);
};
Co = Co + 1; //incrementamos bucle interno hasta que valga 50
h = (int)sqrt(Cc * Cc + Co * Co);
} //Fin bucle anidado
Cc = Cc + 1; //Incrementamos bucle externo
Co = Cc; //Incializamos bucle interno
}
printf("\n\nUna tecla para salir");
getch();
return 0;
}
El bucle interno se ejecutará hasta que Co alcance el valor 50 para cada
incremento del bucle externo que a su vez se ejecutará hasta alcanzar el
mismo valor.
Tema 3.1.3.- Sentencias de control de programa
18
2.- Instrucciones repetitivas: for, while, do-while
Instrucción o sentencia do while
La diferencia con el bucle while es que la prueba de condición se realiza al finalizar el ciclo, es decir:
las instrucciones se ejecutan al menos una vez, porque primero se ejecutan las instrucciones y al final
se evalúa la condición. Su formato general es :
Definimos e inicializamos la variable de condicion;
do {
grupo de instrucciones para cierto;
Instrucción(es) de ruptura de ciclo;
} while (condicion);
Por ejemplo, el código:
int x=1;
do {
printf("%d lineas\n",x);
x++;
}while (x<=10);
mostrará 10 líneas por pantalla, como vemos:
Si cambiamos la condición para que sea falsa (x<1) el bucle se ejecuta una vez, como observamos
abajo.
Decidir que tipo de bucle debemos usar es decidir que opciones de las siguientes se ajusta a las necesidades
de nuestro problema:
• Si conocemos la cantidad exacta de veces que se debe que se ejecute el bucle, o el programa puede
calcularla ese número de veces, usaremos for.
• Si desconocemos la cantidad de veces a repetir el bucle o se quiere mayor control sobre la salida o
terminación del mismo entonces usaremos while.
• Si queremos que el bucle se ejecute al menos una vez usaremos do-while.
Tema 3.1.3.- Sentencias de control de programa
19
2.- Instrucciones repetitivas: for, while, do-while
Instrucción o sentencia do while
Si por ejemplo, tenemos el código:
#include <stdio.h>
#include <conio.h>
int main ()
{
int Numero, Entrada, Suma=0;
do {
printf("Introducir un numero entero: ");
scanf("%d", &Entrada);
Numero = Entrada;
fflush(stdin);
Suma += Numero;
printf("\nSuma = %d\n",Suma);
}while (Entrada !=0);
printf("\nUna tecla para salir");
getch();
return 0;
}
Su ejecución nos estará solicitando datos hasta
introducir el número. Cada vez se muestra el
resultado de la suma tanto con números
positivos como negativos. En la figura vemos
un resultado posible:
Tema 3.1.3.- Sentencias de control de programa
20
2.- Instrucciones repetitivas: for, while, do-while
Finalizacíon de un bucle
De forma natural se sale de un bucle cuando se completan todos los ciclos o cuando lo indica la
instrucción condicional.
A veces, en el interior de la estructura de un bucle, pueden darse condiciones que precisen su
terminación, bien saliendo del bucle o pasando a ejecutar un nuevo ciclo.
La tarea descrita la realiza la sentencia continue, y para ver como se aplica recurriremos al código del
ejemplo anterior. Reformamos el código en los apartados destacados.
#include <stdio.h>
#include <conio.h>
int main ()
{
int Numero, Entrada, Suma=0;
do {
printf("Introducir un numero entero: ");
scanf("%d", &Entrada);
Numero = Entrada;
if (Numero < 0)
continue;
Las nuevas líneas de código implican que se ignoren los
fflush(stdin);
números negativos y la terminación del ciclo se sigue
Suma += Numero;
produciendo cuando se introduce un cero. Es decir, la sentencia
printf("\nSuma = %d\n",Suma);
continue nos ha permitido saltar parte del bucle saltando al ciclo
}while (Entrada !=0);
siguiente sin ejecutar las sentencias que hay a continuación,
printf("\nUna tecla para salir");
pero sin que se interrumpa el proceso repetitivo.
getch();
Si lo que necesitamos es romper el proceso utilizaremos la
return 0;
sentencia break, asociado a una sentencia condicional como lo
}
está continue. Si en el ejemplo anterior sustituimos una por otra
conseguiremos
también
salir
del
introduzcamos un número negativo.
Tema 3.1.3.- Sentencias de control de programa
programa
cuando
21
3.- Instrucción de salto incondicional: goto
En C existe una sentencia llamada goto que sirve para realizar una transferencia de control de
ejecución a un punto distinto del programa.
El uso principal que tiene, acompañada de una instrucción if, es la de simular bucles condicionales.
La instrucción realiza una llamada a una etiqueta, que es un identificador valido de lenguaje C seguida
de dos puntos.
Un ejemplo de esta sentencia podría ser:
#include <stdio.h>
#include <conio.h>
int main ()
{
int x=1;
Etiqueta:
printf("%d lineas\n",x);
x++;
if(x<=10)
goto Etiqueta;
printf("\nUna tecla para salir");
getch();
return 0;
}
Este ejemplo producirá exactamente el mismo resultado que el que hemos empleado para el ejemplo
de do-while.
No parece muy apropiado usar esta sentencia cuando C permite crear bucles condicionales.
Relación de ejercicios para resolver:
Ejemplo 17.- Restar dos números
Realizar un programa en C capaz de restar dos números de tipo float estableciendo un
determinado número de decimales.
Tema 3.1.3.- Sentencias de control de programa
22
Relación de ejercicios para resolver:
Ejemplo 18.- Suma y media aritmética
Realizar un programa en C para realizar la suma y calcular la media aritmética de tres números
de tipo float estableciendo un determinado número de decimales.
Ejemplo 19.- Ecuación de segundo grado completa
Realizar un programa en C para resolver la ecuación de segundo grado haciendo el cálculo del
discriminante y obtener mediante sentencias if ... else las raíces reales, las complejas o las raíces
iguales. Probar con los siguientes valores:
a=1, b=12 y c=35; a=1, b=6 y c=5; a=1, b=-6 y c=13; a=-1, b=6 y c=-9;
Ejemplo 20.- Conversión de temperaturas
Sabiendo que (Tª en ºF) = 32 + 1.8 * (Tª en ºC) realizar
un programa en C que nos presente un menú como el
siguiente:
1 - Grados Fahrenheit a centigrados
2 - Grados centigrados a Fahrenheit
3 - Salir
Escoger opcion:
Las opciones las solucionaremos con una sentencia
switch y en cada caso nos debe preguntar por un dato
denominado incremento. Se trata de presentar a modo de
tabla las equivalencias entre ambas temperaturas para
grupos de valores comprendidos entre 0 y 300 variando
según ese incremento. Una de las opciones la
resolveremos con while y la otra con for. Cada vez que se
ejecute una opción debemos limpiar la pantalla (función
clrscr();) y mostrar de nuevo el menú. Debemos ver algo
similar a la figura.
Tema 3.1.3.- Sentencias de control de programa
23
a
l
e
d
Fin
s
e
r
p
n
ó
i
c
a
t
en
Tema 3.1.3.- Sentencias de control de programa
24
Descargar