informática tema5- estructuras de control en c: estructuras selectivas o condicionales
TRANSCRIPT
![Page 1: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/1.jpg)
Informática
Tema5- Estructuras de Control en C:
Estructuras selectivas o condicionales
![Page 2: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/2.jpg)
Estructuras de control
• Van a controlar la ejecución de las instrucciones:
• Tipos:– Selectivas (Eligen las instrucciones ejecutar).– Repetitivas (Repiten un cjto de instrucciones).
![Page 3: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/3.jpg)
Estructuras selectivas
• Selección simple. (if)
• Selección complementaria (if-else)
• Anidamiento
• Selección múltiple (switch)
![Page 4: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/4.jpg)
Selectivas: Elegir qué hacer!!
• ¿Cómo se ejecuta un programa?• ¿Podemos alterar el orden de ejecución?• ¿Podemos decidir qué ejecutar y qué no?Ejemplo:
Decir si un número es positivo o negativo
Solución: emplear instrucciones que nos permitan hacer una
cosa u otra
![Page 5: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/5.jpg)
Conceptos previos
• Bloque de instrucciones: Conjunto de instrucciones que se encuentra encerradas entre dos llaves {....}
• p.e.{
printf(“Deme un numero”); /* mensaje de cortesia*/
scanf(“%d”,&numero); /* se introduce el numero*/
}
Comentarios
![Page 6: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/6.jpg)
Selección simple: if
• La instrucción if permite elegir si se ejecuta o no un bloque de instrucciones.
• Sintaxis:if (exp_condicional) bloque_instrucciones
• Ejemplo: Decir si un número introducido por teclado es positivo.
![Page 7: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/7.jpg)
Ejemplo 1
main(){int x;printf(“Deme un numero”); /* mensaje indicando lo que se pide */
scanf(“%d”,&x); /* se introduce el número */
if (x>=0) /* expresión condicional del if */
{printf(“El numero %d es positivo”,x); /* bloque */
}}
Indentación
![Page 8: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/8.jpg)
Esquema del if
x>0
Bloque
Resto de instrucciones
Cierto(1)
Falso(0)
if
![Page 9: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/9.jpg)
• Ampliemos el problema:– Decir si un número introducido por teclado es
positivo o negativo.
• Este problema plantea dos alternativas que además son complementarias y excluyentes:– O el número es positivo o es negativo
• En estos casos se emplea el if...else
![Page 10: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/10.jpg)
Selección complementaria:if..else
• Un if..else permite ejecutar un bloque si se cumple la condición y otro si no se cumple.
• Sintaxis:if (exp_condicional) bloque1
else bloque2
![Page 11: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/11.jpg)
main(){int x;printf(“Deme un numero”); /* mensaje indicando lo que se pide*/scanf(“%d”,&x); /* se introduce el número */if (x>=0) /* expresión condicional del if */{
printf(“El numero %d es positivo”,x); /* bloque1*/}else{
printf(“El numero %d es negativo”,x); /* bloque2*/}
}
![Page 12: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/12.jpg)
Otra posibilidadmain(){
int x;printf(“Deme un numero”); /* mensaje indicando lo que se pide */scanf(“%d”,&x); /* se introduce el número */if (x>=0) /* expresión condicional del if */{
printf(“El numero %d es positivo”,x); /* bloque1*/}if (x<0){
printf(“El numero %d es negativo”,x); /* bloque2*/}
}
![Page 13: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/13.jpg)
Esquema if...else
x>0
Bloque1
Resto de instrucciones
Cierto(1)
Falso(0)
if...else
Bloque2
![Page 14: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/14.jpg)
Instrucciones de selección anidadas
• Supongamos el siguiente problema:– Resolver una ecuación de primer grado
ax+b=0
• Análisis de las soluciones:– Si a distinto de 0 entonces x=-b/a– Si a=0 b distinto de 0 entonces solución imposible.
b=0 entonces “solución indeterminada”
![Page 15: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/15.jpg)
main(){double a,b;printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */
scanf(“%lf%lf”,&a,&b); /* se introduce el número */
if (a!=0) {printf(“El resultado es: %lf”,-b/a);
}else {
if (b!=0) { printf(“La solución es imposible”);
}else {
printf(“La solución es indeterminada”); }
}
}
![Page 16: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/16.jpg)
main(){double a,b;printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */
scanf(“%lf%lf”,&a,&b); /* se introduce el número */
if (a!=0) printf(“El resultado es: %lf”,-b/a);
else if (b!=0)
printf(“La solución es imposible”); else
printf(“La solución es indeterminada”);
}
![Page 17: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/17.jpg)
main(){double a,b;printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */
scanf(“%lf%lf”,&a,&b); /* se introduce el número */
if (a!=0) /*sin identación*/
printf(“El resultado es: %lf”,-b/a);elseif (b!=0) printf(“La solución es imposible”); else printf(“La solución es indeterminada”); }
![Page 18: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/18.jpg)
Esquema anidado
a!=0
Bloque1
Resto de instrucciones
Cierto(1)
Falso(0)
if...else
anidadob!=0
Bloque2
Cierto(1)
Falso(0)
Bloque3
![Page 19: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/19.jpg)
Otra solución, condiciones compuestas
main(){double a,b;printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */
scanf(“%lf%lf”,&a,&b); /* se introduce el número */
if (a!=0) printf(“El resultado es: %lf”,-b/a);
if ((a==0) && (b!=0))printf(“La solución es imposible”);
if ((a==0) && (b==0))printf(“La solución es indeterminada”);
}
Realiza 5 comparacionesFrente las dos del programa anterior.
![Page 20: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/20.jpg)
• Problema:– Se desea diseñar un programa en C que lea
desde teclado una calificación alfabética A,B,C,D,E y las convierta en las numéricas 9,7,5,3,1 respectivamente.
![Page 21: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/21.jpg)
Posible soluciónmain(){
char nota;printf(“Deme una calificación”); /* mensaje indicando lo que se pide */
scanf(“%c”,¬a); /* se introduce el número */
if ((nota<‘A’) || (nota>’E’)) printf(“Calificación desconocida”);else {
if (nota==‘A’) printf(“La nota es 9”);if (nota==‘B’) printf(“La nota es 7”);if (nota==‘C’) printf(“La nota es 5”);if (nota==‘D’) printf(“La nota es 3”);if (nota==‘E’) printf(“La nota es 1”);
}}
![Page 22: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/22.jpg)
La selección múltiple con switch
• Permite seleccionar entre infinitos caminos sin necesidad de anidar y evaluando una única expresión.
• Sintaxis:switch (expresion){
case valor1 : bloque1 break;case valor2 : bloque2 break;......
}
Estos bloques no precisan de llaves pues van precedidos
por “:” y acaban con un break;
![Page 23: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/23.jpg)
main(){char nota;printf(“Deme una calificación”); /* mensaje indicando lo que se pide */
scanf(“%c”,¬a); /* se introduce el número */
switch (nota) {case ‘A’: printf(“La nota es 9”); break;case ‘B’: printf(“La nota es 7”); break;case ‘C’: printf(“La nota es 5”); break;case ‘D’: printf(“La nota es 3”); break;case ‘E’: printf(“La nota es 1”); break;default : printf(“Nota desconocida”);
}}
![Page 24: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/24.jpg)
Propiedades del break
• Problema: Supongamos que deseamos saber la calificación de un alumno (Aprobado, Suspendido, Notable, Sobresaliente, Matricula, etc...)– Valores: [0-5[ corresponde a Suspendido
[5-7[ corresponde a Aprobado
[7-9[ corresponde a Notable
[9-10[ corresponde a Sobresaliente
10 corresponde a matricula.
![Page 25: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/25.jpg)
main(){int nota;printf(“Deme una calificación”); scanf(“%d”,¬a); /* se introduce el número */switch (nota) {
case 1:case 2:case 3:case 4: printf(“La nota %d = Suspendido”,nota); break;case 5:case 6: printf(“La nota %d = Aprobado”,nota); break; case 7:case 8: printf(“La nota %d = Notable”,nota); break;case 9: printf(“La nota %d = Sobresaliente”,nota); break;case 10: printf(“La nota %d = Matricula”,nota); break;default : printf(“Nota desconocida”);
}}
![Page 26: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/26.jpg)
Inconvenientes del switch• Sólo se selecciona en base a la evaluación de
una única expresión.
• Los valores de cada case (caso) del switch pueden ser resultado de una expresión, en ese caso debe estar formada por ctes, por lo tanto no se puede utilizar nombres de variables.
• El resultado de las expresiones de cada case deben ser números enteros.
![Page 27: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/27.jpg)
main(){double nota;printf(“Deme una calificación”); scanf(“%lf”,¬a); /* se introduce el número */if ((nota<0)||(nota>10))
printf(“Calificación desconocida”);else {
if ((nota>0) && (nota<5)) printf(“La nota %lf es Suspenso”,nota);
if ((nota>=5) && (nota<7)) printf(“La nota %lf es Aprobado”,nota);
if ((nota>=7) && (nota<9))printf(“La nota %lf es Notable”,nota);
if ((nota>=9) && (nota<10)) printf(“La nota %lf es Sobresaliente”,nota);if (nota==10)
printf(“La nota %lf es Matricula”,nota);}
}
}
/* Con reales */
![Page 28: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/28.jpg)
Menú con un switch
• Hacer un programa que construya una calculadora básica.– Debe pedirse que se introduzcan dos números.– Se debe de elegir una operación a través de un
menú de opciones: suma, resta, multiplicación, división.
– Realizar la operación correspondiente.– Nota: (No se puede dividir un número por cero)
![Page 29: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/29.jpg)
/* ejemplo de menu de opciones */.....printf(“Menu de opciones\n\t1-suma\n\t2-resta\n\t3-multiplicación\
n\t4-division\n”);printf(“deme una opción de 1-4”);scanf(“%d”,&opc);switch(opc){
case 1: .....case 2: .....case 3: .....case 4: .....default: printf(“opción incorrecta”);
}....
![Page 30: Informática Tema5- Estructuras de Control en C: Estructuras selectivas o condicionales](https://reader033.vdocuments.net/reader033/viewer/2022061612/5665b4781a28abb57c91bd33/html5/thumbnails/30.jpg)
main() {int opc;double a,b;printf(“Deme el primer numero”);scanf(“%lf”,&a);printf(“Deme el segundo numero”);scanf(“%lf”,&b);printf(“Menu de opciones\n\t1-Sumar\n\t2-Restar\n\t3-Multiplicar\n\t4-dividir\nDeme una opcion de 1-4: ”);switch(opc){
case 1: printf(“el resultado es %f”,a+b);break;case 2: printf(“el resultado es %f,a-b);break;case 3: printf(“el resultado es %f”,a*b);break;case 4: if (b!=0)
printf(“el resultado es%f,a/b); else
printf(“el resultado es indefinido”); break;default: printf(“opción incorrecta”);
}}