Publicado el 14 de Enero del 2017
2.518 visualizaciones desde el 14 de Enero del 2017
173,5 KB
30 paginas
Estructuras de control
Estructuras de control
Estructuras de control
Estructuras de control
Programación estructurada
Estructuras condicionales
La sentencia if
La cláusula else
Encadenamiento y anidamiento
El operador condicional ?:
La sentencia switch
Estructuras repetitivas/iterativas
El bucle while
El bucle for
El bucle do…while
Bucles anidados
Cuestiones de estilo
Algoritmos de ordenación
Algoritmos de búsqueda
Vectores y matrices
Las estructuras de control
controlan la ejecución de las instrucciones de un programa
Programación estructurada
Programación estructurada
Programación estructurada
Programación estructurada
IDEA CENTRAL:
Las estructuras de control de un programa
sólo deben tener un punto de entrada y un punto de salida.
La programación estructurada...
mejora la productividad de los programadores.
mejora la legibilidad del código resultante.
La ejecución de un programa estructurado progresa
disciplinadamente,
en vez de saltar de un sitio a otro de forma impredecible
Gracias a ello, los programas…
resultan más fáciles de probar
se pueden depurar más fácilmente
se pueden modificar con mayor comodidad
Estructuras de control - C
- 1 -
© Fernando Berzal
En programación estructurada sólo se emplean tres construcciones:
Secuencia
Conjunto de sentencias que se ejecutan en orden
Ejemplos:
Sentencias de asignación y llamadas a rutinas.
Selección
Elige qué sentencias se ejecutan en función de una condición.
Ejemplos:
Estructuras de control condicional if-then-else y case/switch
Iteración
Las estructuras de control repetitivas repiten conjuntos de
instrucciones.
Ejemplos:
Bucles while, do...while y for.
Teorema de Böhm y Jacopini (1966):
Cualquier programa de ordenador
puede diseñarse e implementarse
utilizando únicamente las tres construcciones estructuradas
(secuencia, selección e iteración; esto es, sin sentencias goto).
Böhm, C. & Jacopini, G.: “Flow diagrams, Turing machines, and languages only with
two formation rules”. Communications of the ACM, 1966, Vol. 9, No. 5, pp. 366-371
Dijkstra, E.W.: “Goto statement considered harmful”. Communications of the ACM,
1968, Vol. 11, No. 3, pp. 147-148
Estructuras de control - C
- 2 -
© Fernando Berzal
Estructuras de control
Estructuras
de control
Estructuras
Estructuras
de control
de control
condicionales
condicionales
condicionales
condicionales
Por defecto,
las instrucciones de un programa se ejecutan secuencialmente:
El orden secuencial de ejecución no altera el flujo de control
del programa respecto al orden de escritura de las instrucciones.
Sin embargo, al describir la resolución de un problema, es normal
que tengamos que tener en cuenta condiciones que influyen sobre
la secuencia de pasos que hay que dar para resolver el problema:
Según se cumplan o no determinadas condiciones,
la secuencia de pasos involucrada en la realización de una tarea
será diferente
Las estructuras de control condicionales o selectivas nos permiten
decidir qué ejecutar y qué no en un programa.
Ejemplo típico
Realizar una división sólo si el divisor es distinto de cero.
Estructuras de control - C
- 3 -
© Fernando Berzal
La estructura de control condicional if
La sentencia if nos permite elegir
si se ejecuta o no un bloque de instrucciones.
Condición_1
Cierta
Cierta
Condición_2
Falsa
l
a
s
a
F
Bloque_1
Bloque_3
Bloque_4
Bloque_2
SI−ENTONCES
Bloque_5
SI−ENTONCES−SINO
if (condición)
sentencia;
if (condición) {
bloque
}
Sintaxis
donde bloque representa un bloque de instrucciones.
Bloque de instrucciones:
Secuencia de instrucciones encerradas entre dos llaves {....}
Estructuras de control - C
- 4 -
© Fernando Berzal
Consideraciones acerca del uso de la sentencia if
- Olvidar los paréntesis al poner la condición del if es un
error sintáctico (los paréntesis son necesarios)
- Confundir el operador de comparación == con el operador
de asignación = puede producir errores inesperados
- Los operadores de comparación ==, !=, <= y >= han de
escribirse sin espacios.
- => y =< no son operadores válidos en C.
- El fragmento de código afectado por la condición del if
debe sangrarse para que visualmente se interprete
correctamente el ámbito de la sentencia if:
if (condición) {
// Aquí se incluye el código
// que ha de ejecutarse sólo
// si se cumple la condición del if
// (sangrado para que se vea dónde
// empieza y dónde acaba el if)
}
Error común:
if (condición);
sentencia;
es interpretado como
if (condición)
; // Sentencia vacía
sentencia;
Estructuras de control - C
¡¡¡La sentencia siempre se ejecutaría!!!
- 5 -
© Fernando Berzal
Ejemplo
Decir si un número es positivo
#include <stdio.h>
int main (int argc, char *argv[])
{
int x;
printf(“Déme un numero”);
scanf(“%d”,&x);
if (x>0) {
printf(“El numero %d es positivo”,x);
}
return 0;
}
Estructuras de control - C
- 6 -
© Fernando Berzal
La cláusula else
Una sentencia if, cuando incluye la cláusula else,
permite ejecutar un bloque de código si se cumple la condición
y otro bloque de código diferente si la condición no se cumple.
Condición_1
Cierta
Cierta
Condición_2
Falsa
l
a
s
a
F
Bloque_1
Bloque_3
Bloque_4
Bloque_2
SI−ENTONCES
Sintaxis
Bloque_5
SI−ENTONCES−SINO
if (condición)
sentencia1;
else
sentencia2;
if (condición) {
bloque1
} else {
bloque2
}
Los bloques de código especificados
representan dos alternativas complementarias y excluyentes
Estructuras de control - C
- 7 -
© Fernando Berzal
Ejemplo
Decir si un número es positivo o negativo
#include <stdio.h>
void main ()
{
int x;
printf(“Déme un numero: ”);
scanf(“%d”,&x);
if (x>=0) {
printf(“El numero %d es positivo”, x);
} else {
printf(“El numero %d es negativo”, x);
}
}
La sentencia if anterior es equivalente a
if (x>=0) {
printf(“El numero %d es positivo”, x);
}
if (x<0) { // Condición complementaria a x>=0
printf(“El numero %d es negativo”, x);
}
si bien nos ahorramos comprobar una condición al usar else.
Estructuras de control - C
- 8 -
© Fernando Berzal
Encadenamiento
Las sentencias if se suelen encadenar:
if … else if …
#include <stdio.h>
void main ()
{
float nota;
printf(“Déme una nota: ”);
scanf(“%f”,¬a);
if (nota>=9) {
printf(“Sobresaliente”);
} else if (nota>=7) {
printf(“Notable”);
} else if (nota>=5) {
printf(“Aprobado”);
} else {
printf(“Suspenso”);
}
}
El if encadenado anterior equivale a:
if (nota>=9) {
printf(“Sobresaliente”);
}
if ((nota>=7) && (nota<9)) {
printf(“Notable”);
}
if ((nota>=5) && (nota<7)) {
printf(“Aprobado”);
}
if (nota<5) {
printf(“Suspenso”);
}
Estructuras de control - C
- 9 -
© Fernando Berzal
Anidamiento
Las sentencias if también se pueden anidar unas dentro de otras.
Ejemplo
Resolución de una ecuación de primer grado ax+b = 0
#include <stdio.h>
void main()
{
float a,b;
printf(“Coeficientes de la ecuación ax+b=0:”);
scanf (“%f %f”,&a,&b);
if (a!=0) {
printf(“La solución es %f”, -b/a);
} else {
if (b!=0) {
printf(“La ecuación no tiene solución.”);
} else {
printf(“Solución indeterminada.”);
}
}
}
El if anidado anterior equivale a …
if (a!=0) {
printf(“La solución es %f”, -b/a);
}
if ((a==0) && (b!=0)) {
printf(“La ecuación no tiene solución.”);
}
if ((a==0) && (b==0)) {
printf(“Solución indeterminada.”);
}
En este caso, se realizarían 5 comparaciones en vez de 2.
Estructuras de control - C
- 10 -
© Fernando Berzal
El operador condicional ?:
C proporciona una forma de abreviar una sentencia if
El operador condicional ?:
permite incluir una condición dentro de una expresión.
Sintaxis
condición? expresión1: expresión2
if (condición)
expresión1
else
expresión2
“equivale” a
Sólo se evalúa una de las sentencias,
por lo que deberemos ser cuidadosos con los efectos colaterales.
Ejemplos
max = (x>y)? x : y;
min = (x<y)? x : y;
med = (x<y)? ((y<z)? y: ((z<x)? x: z)):
((x<z)? x: ((z<y)? y: z));
Estructuras de control - C
- 11 -
© Fernando Berzal
Selección múltiple con la sentencia switch
Permite seleccionar entre varias alternativas posibles
switch (expresión) {
case expr_cte1:
sentencia1;
case expr_cte2:
sentencia2;
...
case expr_cteN:
sentenciaN;
Sintaxis
• Se selecciona a partir de la evaluación de una única expresión.
• La expresión del switch ha de ser de tipo entero.
• Los valores de cada caso del switch han de ser constantes.
• La etiqueta default marca el bloque de código que se ejecuta
por defecto (cuando al evaluar la expresión se obtiene un valor
no especificado por los casos del switch).
default:
}
sentencia;
• En C, se ejecutan todas las sentencias incluidas a partir del
caso correspondiente, salvo que explícitamente usemos break:
switch (expresión) {
case expr_cte1:
sentencia1;
case expr_cte2:
case expr_cte3:
break;
sentenciaN;
}
Comentarios de: Estructuras de control - C (0)
No hay comentarios