|
|
| Contenidos > 4.1
Instrucción break |
|
En
lenguaje C,
para escribir una instrucción
de salto break
(interrumpir),
se utiliza la sintaxis:
La instrucción de salto break se
usa para interrumpir (romper) la ejecución normal
de un bucle,
es decir, la instrucción break
finaliza (termina) la ejecución de un bucle y, por tanto, el
control del programa
se transfiere (salta) a la primera
instrucción después del bucle.
Ejemplo
1: Estúdiese
el siguiente código
fuente:
|
#include
<stdio.h>
int
main()
{
int
n, a;
a = 0;
do
{
printf( "Introduzca un numero entero:
" );
scanf( "%d", &n
);
if ( n == 0 )
{
printf( "ERROR: El
cero no tiene opuesto.\n" );
break;
/* En el caso de que n sea
un cero,
el bucle se interrumpe. */
}
printf( "El opuesto es: %d\n",
-n );
a += n;
} while
( n >= -10
&& n <= 10 );
printf( "Suma:
%d", a );
return 0;
}
|
El programa puede ser la solución del problema siguiente:
Escriba un
programa que:
1º)
Pida por teclado un número (dato entero).
2º) Si el
número introducido por el usuario es distinto de cero,
muestre por pantalla el mensaje:
- "El opuesto
es: <-número>".
3º) Repita los
pasos 1º y 2º, mientras que, el usuario
introduzca un
número mayor o igual que -10 y menor o igual que 10.
Pero, si el usuario
introduce un cero, el bucle también finaliza,
mostrándose por pantalla el mensaje:
- "ERROR: El cero
no tiene opuesto.".
4º) Muestre
por pantalla la suma de los números introducidos por el
usuario.
En pantalla:
Introduzca un número entero: 15
El opuesto es: -15
Suma: 15
|
La traza
del programa es:
Secuencia: |
Acción
(instrucción): |
Valor
de:
|
|
|
a |
n |
| 1 |
a
=
0 |
0 |
? |
|
Inicio
de la iteración 1. |
|
|
| 2 |
printf( "Introduzca
un número entero:"
) |
0 |
? |
| 3 |
scanf( "%d",n ) |
0 |
15 |
| 4 |
(Comprobar
si n == 0) |
0 |
15 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 5 |
printf( "El
opuesto es: %d\n", -n
) |
0 |
15 |
| 6 |
a
+= n |
15 |
15 |
|
Fin
de la iteración 1. |
|
|
| 7 |
(Comprobar
si n >= -10 && n
<=
10) |
15 |
15 |
|
La
condición del bucle (do...while)
es falsa.
El bucle finaliza después de 1 iteración. |
|
|
| 8 |
printf( "Suma: %d", a ) |
15 |
15 |
Figura. Traza
del ejemplo 1.
El bucle ha finalizado porque la condición
( n >= -10 && n
<=
10
) es falsa,
ya que, 15
no es mayor o igual que -10
y menor o igual que 10.
Sin embargo, el bucle también puede finalizar, no porque sea
falsa
la condición ( n >= -10 && n
<=
10
), sino, porque se ejecute la instrucción break. Esto
ocurrirá cuando el usuario introduzca un cero. Por ejemplo:
Introduzca un número entero: 8
El opuesto es: -8
Introduzca
un número entero: -7
El opuesto es: 7
Introduzca
un número entero: 0
ERROR: El cero no tiene opuesto.
Suma: 1
|
La traza en este caso es:
Secuencia: |
Acción
(instrucción): |
Valor
de:
|
|
|
a |
n |
| 1 |
a
=
0 |
0 |
? |
|
Inicio
de la iteración 1. |
|
|
| 2 |
printf( "Introduzca
un número entero:"
) |
0 |
? |
| 3 |
scanf( "%d",n ) |
0 |
8 |
| 4 |
(Comprobar
si n == 0) |
0 |
8 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 5 |
printf( "El
opuesto es: %d\n", -n
) |
0 |
8 |
| 6 |
a
+= n |
8 |
8 |
|
Fin
de la iteración 1. |
|
|
| 7 |
(Comprobar
si n >= -10 && n
<=
10) |
8 |
8 |
|
La
condición del bucle (do...while)
es verdadera.
Inicio de la iteración 2. |
|
|
| 8 |
printf( "Introduzca
un número entero:"
) |
8 |
8 |
| 9 |
scanf( "%d",n ) |
8 |
-7 |
| 10 |
(Comprobar
si n == 0) |
8 |
-7 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 11 |
printf( "El
opuesto es: %d\n", -n
) |
8 |
-7 |
| 12 |
a
+= n |
1 |
-7 |
|
Fin
de la iteración 2. |
|
|
| 13 |
(Comprobar
si n >= -10 && n
<=
10) |
1 |
-7 |
|
La
condición del bucle (do...while) es verdadera.
Inicio de la iteración 3. |
|
|
| 14 |
printf( "Introduzca
un número entero:"
) |
1 |
-7 |
| 15 |
scanf( "%d",n ) |
1 |
0 |
| 16 |
(Comprobar
si n == 0) |
1 |
0 |
|
La
condición de la alternativa simple (if)
es verdadera. |
|
|
| 17 |
printf( "ERROR: El
cero no tiene opuesto."
) |
1 |
0 |
| 18 |
break |
1 |
0 |
|
El
bucle (do...while)
se
interrumpe en la 3ª iteración.
El control del programa se transfiere (salta)
a la primera instrucción después del
bucle. |
|
|
| 19 |
printf( "Suma: %d", a ) |
1 |
0 |
Figura. Traza
del ejemplo 1.
Normalmente, cuando en un bucle se utiliza una
instrucción break,
la ejecución de ésta se condiciona.
En el ejemplo 1, el bucle se interrumpe si la condición
( n == 0
) es verdadera.
Nótese que, dicha condición no está
contemplada en la condición de salida estándar
del bucle, por lo que, a la condición ( n == 0
) se le considera condición
de salida interna del bucle.
Ejemplo 2: No
obstante, el problema también se puede resolver sin hacer
uso de la instrucción break:
|
#include
<stdio.h>
int
main()
{
int
numero, acumulador;
acumulador = 0;
do
{
printf( "Introduzca un numero entero:
" );
scanf( "%d",
&numero
);
if ( numero == 0 )
{
printf( "ERROR: El
cero no tiene opuesto.\n" );
}
else
{
printf( "El opuesto
es: %d\n", -numero );
acumulador += numero;
}
} while
( numero >= -10
&& numero <= 10 &&
numero != 0
);
printf( "Suma:
%d", acumulador );
return 0;
}
|
Obsérvese que, en este programa, sí se contempla
en la
condición de salida del bucle la posibilidad de que el
usuario
teclee un cero, en cuyo caso, el bucle deja de iterar de forma natural.
Los resultados por pantalla de este código fuente son
idénticos
a los del código anterior.
Por otra parte, en lenguaje C, como ya vimos en el apartado 2.3 Alternativa
múltiple (la instrucción switch),
la instrucción break
también se usa para interrumpir (salir de) una alternativa
múltiple.
|
|
|
|
|