Estructuras de datos (Prof. Edgardo A. Franco)
1
Tema 17: Estructuras de control para la programación estructurada en C
M. en C. Edgardo Adrián Franco Martínez http://[email protected]@edfrancom edgardoadrianfrancom
Contenido
• Estructuras secuenciales
• Estructuras selectivas
• Selectiva simple (si)
• Selectiva doble (si-sino)
• Selectiva múltiple (si-sino si-sino)
• Switch
• Estructuras iterativas o repetitivas
• Mientras
• Repetir
• Para 2
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
La programación estructurada y el lenguaje C• C es un lenguaje de programación que permite programar de manera
estructurada ya que establece una sintaxis y semántica propia paraexpresar computaciones, ofreciendo sentencias de control paradescribir secuencias, selecciones e iteraciones.
SECUENCIA SELECCIÓNif ..elseswitch
ITERACIÓN while
do...whilefor
3
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Estructuras secuenciales
• Son las sentencias (asignaciones e invocaciones afunciones) escritas en el código fuente, cada una de estasserá ejecutada de manera secuencial (en orden deaparición) una vez compilado el fuente.
Instrucciónn
Instrucción1
Instrucción2
Instrucción3
Instrucción4
Diagrama de flujo Pseudocódigo
#include<stdio.h>
int main(void)
{
int byte=0xFF;
printf("\nEl valor de byte es: %4X H",byte);
byte&=0x00;
printf("\nEl valor de byte es: %4X H",byte);
byte|=0xFF;
printf("\nEl valor de byte es: %4X H",byte);
byte>>=1;
printf("\nEl valor de byte es: %4X H",byte);
byte<<=2;
printf("\nEl valor de byte es: %4X H",byte);
return 0;
}
Código en C
4
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Estructuras selectivas (if)
• Las estructuras selectivas se utilizan para tomar decisionescon bases en la evaluación de una condición.
Diagrama de flujo Pseudocódigo Código en C
condición
no
si
Instrucciones
if(condición)
{
Instrucciones;
};
Selectiva simple
5
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Diagrama de flujo Pseudocódigo Código en C
if(condición)
{
Instrucciones1;
}
else
{
Instrucciones2;
};
Selectiva doble
condición
si
no
Instrucciones2
Instrucciones1
6
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Diagrama de flujo Pseudocódigo Código en C
if(condición1)
{
Instrucciones1;
}
else if (condición2)
{
Instrucciones2;
}
else if (condición3)
{
Instrucciones3;
}
…
else
{
Instruccionesn;
};
Selectiva múltiple
condición1
si
no
Instrucciones1
condición2
Instrucciones2
no
si
condición3
si
no
7
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• La preposición de control de flujo if se utiliza para expresardecisiones, formalmente la sintaxis es:
if(expresión1)
{
sentencias1;
}
else if(expresión2)
{
sentencias2;
}
else if(expresión3)
{
sentencias3;
}
else
{
sentencias4;
}
*Las preposiciones else if(sino si) y else (sino)pueden omitirse.
Si la expresión1 se evaluá y si esta esverdadera (diferente de 0) entonces se lleva acabo el código inmediato entre llaves.Sino si (else if) la expresión2 se evaluá y siesta es verdadera (diferente de 0) entonces selleva a cabo el código inmediato entre llaves.Sino si (else if) la expresión3 se evaluá y siesta es verdadera (diferente de 0) entonces selleva a cabo el código inmediato entre llaves.…Sino (else) si ninguna condición ha sidoverdadera entonces se lleva a cabo el códigoinmediato entre llaves.
8
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo (if-else)#include<stdio.h>
int main(void)
{
float a,b;
printf("\nIntroduce dos números reales separados por una coma: ");
scanf("%f,%f",&a,&b);
if(a<0&&b<0)
{
printf("\nAmbos numeros son negativos");
}
else if(a>0&&b>0)
{
printf("\nLos dos numeros son positivo");
}
else if(a>0||b>0)
{
printf("\nUno de los dos numeros es positivo");
}
else if(a==0&&b==0)
{
printf("\nAmbos numeros son igual a cero");
}
else
{
printf("\n...");
}
return 0;
}
9
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Estructura selectiva (switch)• Una estructura selectiva del lenguaje c, que facilita
implementar algunas decisiones múltiples cuando sepresentan todas con base en la evaluación de una expresiónes switch-case.
switch(expresión)
{
case exp-constante1: <acción 1>;
break;
case exp-constante2: <acción 1>;
break;
...
case exp-constanteN: <acción N>;
break;
default: <acción M>;
}
*El uso de switch es valido si se utiliza apropiadamente bajo la teoría de laprogramación estructurada, ya que incluye una sentencia de salto que no deberíade ser utilizada indiscriminadamente (break)
10
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo (switch)
#include<stdio.h>
int main(void)
{
short opcion;
printf("\nOpción 1");
printf("\nOpción 2");
printf("\nOpción 3");
printf("\nOpción 4");
printf("\nOpción 5");
printf("\nSelecciona una opción...");
scanf("%d",&opcion);
switch(opcion)
{
case 1: printf("\nOpción 1 seleccionada");
break;
case 2: printf("\nOpción 2 seleccionada");
break;
case 3: printf("\nOpción 3 seleccionada");
break;
case 4: printf("\nOpción 4 seleccionada");
break;
case 5: printf("\nOpción 5 seleccionada");
break;
default:printf("\nOpción no valida");
}
}
11
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Estructuras iterativas o repetitivas• Las estructuras repetitivas se utilizan para realizar varias veces
el mismo conjunto de operaciones con base en una condición.
Diagrama de flujo Pseudocódigo Código en C
while(condición)
{
Instrucciones;
};
Iterativa "mientras"
condición
no
si
instrucciones
12
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Con "repetir" se asegura que las instrucciones de dentro delciclo se ejecutan al menos una vez.
Diagrama de flujo Pseudocódigo Código en C
do
{
Instrucciones;
}while(!(condición));
Iterativa "repetir"
condición
si
no
instrucciones
13
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• La estructura de control while evaluá la expresión antes decomenzar cada iteración, si esta es verdadera (diferente de 0)se realizan las sentencias de dentro de las llaves.
• La estructura de control do-while se utiliza cuando se quiereasegurar que las sentencias de dentro del ciclo se ejecuta almenos una vez puesto que la evaluación de la expresiónlógica se hace al final de este.
while(expresión)
{
Sentencias;
};
do
{
Sentencias;
}
while(expresión);
Estructura while & do-while
14
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• La estructura for permite definir un bucle controlado por uncontador, denominado variable de control o de inducción.
Diagrama de flujo Pseudocódigo Código en C
for(i=x;i<=n;i++)
{
instrucciones;
}
Iterativa "para"
i ≤ n
no
si
instrucciones
i ← i+1
i ← x
15
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Estructura iterativa para (for)• El encabezado de un bucle for tiene tres partes separadas
por ";". En la primera se inicializan las variable de control ysólo se ejecuta una vez, antes de la primera iteración, lasegunda es una expresión que indica la condición lógica quedebe cumplirse para que la próxima iteración se ejecute;esta condición se evaluá antes de cada iteración y, cuandodeja de satisfacerse, el bucle for termina. La tercera partedel encabezado es la actualización de las variables de controly se ejecuta después de cada iteración.
for(. . . ; . . .;. . .)
{
sentencias;
}
16
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo (for)
#include<stdio.h>
int main(void)
{
int i,n;
for(i=0,n=10000;i<n;i++,n=n-i){
printf("\t%3d",i);
}
return 0;
}
17
17
Est
ruct
ura
s d
e co
ntr
ol p
ara
la p
rogr
amac
ión
est
ruct
ura
da
en C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez