Fundamentos de Informática ETSII Tema 3: Estructuras de Selección. Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Índice z z z z Introducción. Selección simple y doble: if, if...else. Instrucciones if anidadas. Detección de errores en la apertura de un fichero z Selección múltiple: switch. 1 Objetivos z z z z Entender los conceptos de la ejecución condicional Conocer funcionamiento y utilización de sentencias if, if...else empleadas de forma sencilla Combinar estructuras de selección switch – break 1. Introducción secuencia_de_instrucciones = instrucción { “;” instrucción } z z z Instrucción: acción u operación del programa que conduce a la resolución del problema. Programa: secuencia de instrucciones separadas por “;”. Bloque de instrucciones: conjunto de instrucciones encerrado entre llaves. 2 Ejemplo Orden de ejecución: secuencial. void main() { int i=25, numero; 1 printf(“Dame un número”); scanf(“%d”, &numero); 3 i = i + numero; 4 printf(“Resultado=%d\n”,i); } 2 5 Cambio de la secuencia de ejecución de instrucciones z Instrucciones de selección: se ejecutan unas instrucciones u otras según el valor de una condición. z z z Condicionales: if, if-else, switch. Incondicionales: goto Ö No usarlo. Instrucciones de repetición (bucles): repite un conjunto de instrucciones un número determinado de veces. z z Condicionales: la secuencia de instrucciones se ejecuta hasta o mientras se cumple una determinada condición. Incondicional: la secuencia de instrucciones se repite un número determinado de veces. 3 Instrucción 1 Instrucción 2 Ejecución secuencial Instrucción 3 Ejecución secuencial: las instrucciones se ejecutan en el orden en que aparecen en el programa y una sola vez. Instrucción 1 Instrucción 1 Instrucción 2 Instrucción 2 Instrucción 3 Instrucción 3 Selección Bucle Selección condicional z Determina qué conjunto de instrucciones se ejecutan de acuerdo con algún criterio definido por el programador. z Tipos: z z z Selección simple (if) Selección doble (if-else) Selección múltiple (switch) 4 2. Selección simple y doble: if, if...else z z Selección simple: if Selección doble: if-else Selección simple: if if (condición) instrucción if (condición) z Si la condición es cierta se ejecutará la instrucción. instrucción Simple if (condición) { z Instrucción: puede ser una sentencia simple, un bloque de instrucciones (entre llaves) o sentencias compuestas. instrucción 1 Bloque instrucción 2 instrucción 3 } 5 Diagrama de flujo de la instrucción if Condición if (condición) Cierto Instrucción instrucción; Falso Resto de Instrucciones; Resto de instrucciones Ejemplo X>0 if (x>0) Cierto Falso printf(“Mayor que 0\n”); printf(“Mayor que 0\n”); printf(“Adiós\n”); printf(“Adios\n”); 6 Ejemplo Identación: lo que está dentro del if se pone con varios espacios delante. Sirve únicamente para ver rápidamente que hay dentro del if. if (n>0) printf (“Mayor que cero\n”); Cuando más de una instrucción if (edad>65) está dentro del if se deben utilizar llaves { sueldo = SueldoActual*0.75+Complementos; printf(“Lo que cobras es %f\n”, sueldo); } Ejemplo int n=0; if (n>0) n++; n = n+25; printf(“n=%d\n”, n); n=25 int n=0; if (n>0) { n++; n = n+25; } printf(“n=%d\n”, n); n=0 int n=0; if (n>0); { n++; n = n+25; } printf(“n=%d\n”, n); n=26 7 Ejemplo Leer la edad de dos personas y decir cuál es la de mayor edad. #include <stdio.h> void main() { int n1, n2; El cuerpo del if contiene una única instrucción, por lo que no hace falta poner llaves. printf(“Introduce las edades: “); scanf(“%d%d”, &n1, &n2); if (n1>n2) printf(“La edad de la mayor es %d años.\n”,n1); if (n1<n2) printf(“La edad de la mayor es %d años.\n”,n2); if (n1==n2) printf(“Tienen la misma edad: %d años.\n”,n1); } Ejemplo Leer un número del fichero “valores.txt” encuentra en c:\temp y decir si es positivo. que se #include <stdio.h> void main() { int x; FILE *f; f=fopen(“c:\\temp\\valores.txt”, “r”); fscanf(f, “%d”, &x); if (x>0) printf(“El número %d es positivo”,x); fclose(f); } 8 Selección doble: if-else if (condición) instrucción_1 else instrucción_2 z z Instrucción_1, instrucción_2: pueden ser una instrucción simple, un bloque de instrucciones (entre llaves), o instrucciones compuestas. Si la condición es cierta se ejecutará instrucción_1, si es falsa se ejecutará instrucción_2. Sólo se ejecutará una sentencia, no ambas. Diagrama de flujo de la instrucción if..else if (condición) instrucción_cierto; else instrucción_falso; Resto de Instrucciones; 9 Ejemplo X>=0 Cierto printf(“Positivo\n”); if (x>=0) Falso printf(“Negativo\n”); printf(“Positivo”); else printf(“Negativo”); printf(“Adiós\n”); printf(“Adiós\n”); Ejemplo #include <stdio.h> void main() { int x; printf(“Dame un número: ”); scanf(“%d”, &x); if (x>=0) printf(“El número %d es positivo”, x); /* Bloque cierto*/ else printf(“El número %d es negativo”, x); /* Bloque falso*/ } Cuando el bloque sólo contiene una única instrucción, pueden omitirse las llaves 10 Ejemplo #include <stdio.h> void main() { int x; printf(“Dame un número”); scanf(“%d”,&x); if (x>=0) printf(“El número %d es positivo”,x); /* Bloque verdadero*/ if (x<0) printf(“El número %d es negativo”,x); /* Bloque verdadero*/ } Condiciones complementarias 3. Instrucciones if anidadas if (n >0) printf(“El número %d es mayor que 0\n”, n); else Un if con su else, es if (n == 0) una única instrucción, por eso no se ponen printf(“Es 0\n”); llaves else printf(“El número %d es menor que 0\n”,n); 11 Ejemplo El cuerpo del primer if contiene una única instrucción, por lo que no hacen falta llaves. Un if con su else correspondiente es una instrucción. int edad; printf(“Dime tu edad: ”); scanf(“%d”,&edad); El cuerpo del segundo if if (edad>=18) contiene más de una instrucción, por lo que hacen if (edad<=65) falta llaves. { printf(“Trabajador.\n”); printf(“Solicitar los datos del contrato.\n”); } else printf(“Jubilado.\n”); Ejercicio Pedir al usuario un número A. Si el número A es positivo: z z Pedir un número B. Si es positivo: z z Calcular la suma, resta, producto, división y resto de ambos. Mostrar los resultados por pantalla. 12 #include <stdio.h> void main() { int A, B; printf(“Introduce un valor: “); scanf(“%d”, &A); if (A>0) El cuerpo del if contiene { más de una instrucción, printf(“Introduce otro valor: “); por lo que hacen falta scanf(“%d”, &B); llaves. if (B>0) { printf(“%d + %d = %d\n”, A, B, A+B); printf(“%d - %d = %d\n”, A, B, A-B); printf(“%d * %d = %d\n”, A, B, A*B); printf(“%d / %d = %d\n”, A, B, A/B); printf(“%d % %d = %d\n”, A, B, A%B); } } } Diagrama de flujo Condición_1 if (condición_1) Cierto Falso sentencia_cierto_1 Sentencia_Cierto_1 else Condición_2 Cierto Falso if (condición_2) sentencia_cierto_2 Sentencia_Cierto_2 Sentencia_Falso_2 else sentencia_falso_2 Resto de Instrucciones 13 Si no hay llaves, un else siempre va con el último if escrito. if (edad>=0) if (edad>=18) printf(“Mayor de edad\n”); else printf(“Menor de edad\n”); Si se quiere variar esta situación, poner llaves. if (edad>=0) { if (edad>=18) printf(“Mayor de edad\n”); } else printf(“Edad incorrecta\n\n”); 14 Ejercicio ¿Cuál es la salida por pantalla de estos programas? int a=1; if (a==0) printf(“Es cero\n”); else printf(“No es cero\n”); printf(“a=%d\n”,a); int a=1; if (a=0) printf(“Es cero\n”); else printf(“No es cero\n”); printf(“a=%d\n”,a); No es cero a=1 No es cero a=0 Ejercicio Resolver una ecuación de primer grado ax+b=0 Análisis de las soluciones: z z Si a!=0 Ö solución x=-b/a Si a==0 z z b!=0 Ö solución imposible. b==0 Ö solución indeterminada 15 #include <stdio.h> void main() { float a, b; printf(“Dame las incógnitas de la ecuación ax+b=0: ”); scanf(“%f%f”, &a, &b); if (a!=0) printf(“El resultado es: %f”,-b/a); else if (b!=0) printf(“La solución es imposible”); else printf(“La solución es indeterminada”); } #include <stdio.h> void main() { float a,b; printf(“Dame las incógnitas de la ecuación ax+b=0: ”); scanf(“%f%f”,&a,&b); if (a!=0) printf(“El resultado es: %f”,-b/a); Versión que else no utiliza if (b!=0) identación printf(“La solución es imposible”); else printf(“La solución es indeterminada”); } 16 Ejemplo Para evitar la anidación, se desglosan las condiciones explícitamente. Resultado más complejo de escribir y más lento de ejecutar #include <stdio.h> void main() { float a,b; printf(“Déme las incógnitas a y b de la ecuación ax+b=0: ”); scanf(“%f%f”,&a,&b); 1 if (a!=0) printf(“El resultado es: %f”,-b/a); Realiza 5 2 if ((a==0) && (b!=0)) 3 comparaciones frente las 2 del printf(“La solución es imposible”); programa anterior. 4 if ((a==0) && (b==0)) 5 printf(“La solución es indeterminada”); } Ejercicio Calcular el mayor de tres números enteros introducidos por teclado. 17 #include <stdio.h> void main() { int a, b, c; printf(“Dime tres números: “); scanf(“%d%d%d”, &a, &b, &c); Versión sin anidación: 18 comparaciones if (a==b && b==c) printf(“Iguales\n”); if (a==b && b<c) printf(“El mayor es %d\n”,c); if (a==b && b>c) printf(“El mayor es %d\n”,b); if (a>b && a>=c) printf(“El mayor es %d\n”,a); if (a>b && a<c) printf(“El mayor es %d\n”,c); if (a<b && b>=c) printf(“El mayor es %d\n”,b); if (a<b && b<c) printf(“El mayor es %d\n”,c); system(“PAUSE”); } #include <stdio.h> Versión con void main() anidación: 7 { comparaciones int a, b, c; printf(“Dime tres números: “); scanf(“%d%d%d”, &a, &b, &c); if (a==b) if (b==c) printf(“Iguales\n”); else if (b<c) printf(“El mayor es %d\n”,c); else printf(“El mayor es %d\n”,b); else if (a>b) if (a>=c) printf(“El mayor es %d\n”,a); else printf(“El mayor es %d\n”,c); else if (b>=c) printf(“El mayor es %d\n”,b); else printf(“El mayor es %d\n”,c); system(“PAUSE”); } 18 #include <stdio.h> void main() { int a, b, c, mayor; printf(“Dime tres números: “); scanf(“%d%d%d”, &a, &b, &c); Otra versión con anidación: 2 comparaciones if (a>=b) mayor = a; else mayor = b; If (c>mayor) mayor = c; printf(“El mayor es %d\n”,mayor); system(“PAUSE”); } Ejercicio Se desea diseñar un programa en C que lea desde teclado una calificación alfabética: A, B, C, D, E y la convierta en la numérica: 10, 8, 6, 5, 0 19 #include <stdio.h> void main() { char nota; printf(“Déme una calificación: ”); scanf(“%c”,&nota); if ((nota<‘A’) || (nota>’E’)) printf(“Calificación desconocida”); else { if (nota==‘A’) printf(“La nota es 10”); if (nota==‘B’) printf(“La nota es 8”); if (nota==‘C’) printf(“La nota es 6”); if (nota==‘D’) printf(“La nota es 5”); if (nota==‘E’) printf(“La nota es 0”); } } Ejercicio La fecha del domingo de Pascua corresponde al primer domingo después de la primera luna llena que sigue al equinoccio de primavera. Dado un año, los cálculos que permiten conocer esta fecha son: z z z z z z A = año %19 B = año % 4 C = año % 7 D = (19 * A + 24) % 30 E = (2 * B + 4 * C + 6 * D + 5) % 7 N = (22 + D + E) Donde N indica el número del día del mes de marzo (o abril si N es superior a 31) correspondiente al domingo de Pascua. Escribir un programa que lea un año y muestre el día y el mes en el que se celebró o se celebrará el domingo de Pascua ese año. 20 Por ejemplo: si introducimos el año 2002, los cálculos son los siguientes: A = 2002 % 19 = 7 B = 2002 % 4 = 2 C = 2002 % 7 = 0 D = (19 * 7 + 24) % 30 = 157 % 30 = 7 E = (2 * 2 + 4 * 0 + 6 * 7 + 5) % 7 = 51 % 7 = 2 N = (22 + 7 + 2) = 31 Es decir, el año 2002 el domingo de Pascua fue el 31 de marzo. #include <stdio.h> void main() { int anyo, a, b, c, d, e, n; printf ("Introduce un año:"); scanf ("%d", &anyo); a = anyo % 19; b = anyo % 4; c = anyo % 7; d = (19 * a + 24) % 30; e = (2 * b + 4 * c + 6 * d + 5) % 7; n = 22 + d + e; 21 if (n<=31) printf ("El Domingo de Pascua del año %d es el %d de marzo\n", anyo, n); else printf ("El Domingo de Pascua del año %d es el %d de abril\n", anyo, n-31); system(“PAUSE”); } Ejercicio Calcular el máximo de 4 números introducidos por teclado. Nota: pensar un método diferente al problema del máximo de 3 números enteros. Entrada: Salida: 4 valores el valor máximo de los cuatro 22 Algoritmo Entrada P z Pedir los valores al usuario (valor1, valor 2, valor3, valor4) z Tomar el primer valor como el máximo actual (máximo=valor1) Si el segundo valor es mayor que el máximo actual R O z z C E z Si el tercer valor es mayor que el máximo actual z Si el cuarto valor es mayor que el máximo actual S O z z Salida El nuevo máximo es el segundo valor (máximo=valor2) z El nuevo máximo es el tercer valor (máximo=valor3) El nuevo máximo es el cuarto valor (máximo=valor4) Mostrar por pantalla el valor máximo #include <stdio.h> void main () { float a, b, c, d, maximo; /* Lectura de datos */ printf ("Introduzca los 4 números: \n"); scanf ("%f%f%f%f", &a, &b, &c, &d); /* Calculo */ maximo = a; if (b > maximo) maximo = b; if (c > maximo) maximo = c; if (d > maximo) maximo = d; /* Escritura de resultados */ printf ("El número máximo es: %f\n", maximo); } 23 4. Detección de errores en la apertura de un fichero ¿Cómo saber si el fichero se ha abierto correctamente? Si el fichero no se puede abrir, fopen retorna NULL. FILE *fichero; if ((fichero = fopen (“c:\\temp\\prueba.txt”, “r”))==NULL) printf(“Fichero no existe\n”); fichero = fopen (“c:\\temp\\prueba.txt”, “r”); If (fichero==NULL) printf(“Fichero no existe\n”); Ejercicio Abrir el fichero “pepito.txt” para lectura. Leer un valor entero y cerrarlo. Detectar si se ha abierto correctamente el fichero. void main() { int x; FILE *f; if ((f=fopen(“pepito.txt”, “r”))==NULL) printf(“No se puede abrir el fichero\n”); else { fscanf(f, “%d”, &x); fclose(f); } } 24 Ejercicio Leer la edad de 2 personas de un fichero “edad.txt”. Mostrarlas ordenadas de menor a mayor en el fichero “salida.txt”. void main () { FILE *e, *s; int edad1, edad2; if ((e=fopen(“edad.txt”, “r”))==NULL) printf(“No se puede abrir el fichero edad.txt.\n”); else { if ((s=fopen(“salida.txt”, “w”))==NULL) printf(“No se puede abrir el fichero salida.txt.\n”); else { fscanf (e, “%d%d”, &edad1, &edad2); if (edad1>=edad2) fprintf (s, “%d - %d\n”, edad2, edad1); else fprintf (s, “%d - %d\n”, edad1, edad1); fclose(s); } fclose(e); } } 25 5. Selección múltiple: switch Permite seleccionar entre múltiples caminos sin necesidad de anidar y evaluando una única expresión switch (expresión) { case valor1: instrucciones_1; break; case valor2: instrucciones_2; break; ...... default: instrucciones_n; break; } Ejemplo int opc; printf(“1. Ingreso.\n”); printf(“2. Reintegro.\n”); printf(“3. Consulta de saldo.\n”); scanf(“%d”,&opc); switch (opc) Aunque haya más de una instrucción dentro de cada case, no hay que poner llaves. { case 1: printf(“Ha elegido ingreso.\n”); break; case 2: printf(“Ha elegido reintegro.\n”); break; case 3: printf(“Ha elegido consulta.\n”); break; default: printf(“Opción incorrecta.\n”); } 26 Propiedades z z z z Sólo se puede seleccionar en base a la evaluación de una única expresión. La evaluación de la expresión de switch siempre debe generar un único valor (entero o char). Los valores de cada case debe ser constantes. No se puede utilizar nombres de variables. La ejecución de un case no para hasta que encuentra un break (o finaliza), sobrepasando incluso otros case. Ejemplo #include <stdio.h> void main() { char nota; La expresión es de printf(“Déme una calificación: ”); tipo carácter scanf(“%c”, &nota); switch (nota) { case ‘A’: printf(“La nota es 10”); break; case ‘B’: printf(“La nota es 8”); break; case ‘C’: printf(“La nota es 6”); break; case ‘D’: printf(“La nota es 5”); break; case ‘E’: printf(“La nota es 0”); break; default : printf(“Nota desconocida”); } } 27 Ejemplo char c; printf(“Opción: “); La expresión es de scanf(“%c”,&c); tipo carácter switch (c) { case ‘1’: printf(“Elegida opción 1.\n”); break; case ‘2’: printf(“Elegida opción 2.\n”); break; case ‘3’: printf(“Elegida opción 3.\n”); break; default: printf(“Opción incorrecta.\n”); } Ejemplo int c; printf(“Opción: “); La expresión es de scanf(“%d”,&c); tipo entero switch (c) { case 1: printf(“Elegida opción 1.\n”); break; case 2: printf(“Elegida opción 2.\n”); break; case 3: printf(“Elegida opción 3.\n”); break; default: printf(“Opción incorrecta.\n”); } 28 Ejemplo, NO se puede: #include <stdio.h> void main() { float nota; printf(“Déme una calificación: ”); scanf(“%f”,&nota); La expresión debe ser int o char switch (nota) { case (nota<5.0): printf(“La nota es 4”); break; case 5.0: printf(“La nota es 5”); break; case 6.0: printf(“La nota es 6”); break; El valor de case debe case 7.0: printf(“La nota es 7”); break; ser constante, no puede case 8.0: printf(“La nota es 8”); break; ser una expresión, no case 9.0: printf(“La nota es 9”); break; puede contener default : printf(“Nota desconocida”); variables } } Ejemplo ¿Qué muestra por pantalla este programa si se elige cada una de las opciones? int c; printf(“Opción: “); scanf(“%d”,&c); switch (c) { case 1: printf(“Elegida opción 1.\n”); case 2: printf(“Elegida opción 2.\n”); case 3: printf(“Elegida opción 3.\n”); default: printf(“Opción incorrecta.\n”); } Opción 1: Elegida opción 1. Elegida opción 2. Elegida opción 3. Opción incorrecta. Opción 2: Elegida opción 2. Elegida opción 3. Opción incorrecta. Opción 3: Elegida opción 3. Opción incorrecta. Otra opción: Opción incorrecta. 29 Ejercicio poner otro Mostrar al usuario un menú por pantalla con las opciones: 1. 2. 3. 4. 5. Suma Resta Producto División Salir Solicitar los valores al usuario y realizar la operación elegida. void main() { int opc, a, b; printf(“1. Suma\n”); printf(“2. Resta\n”); printf(“3. Multiplicación\n”); printf(“4. División\n”); scanf(“%d”,&opc); scanf(“%d%d”, &a,&b); switch(opc) { case 1: printf(“%d + %d = %d\n”, a, b, a+b); break; case 2: printf(“%d - %d = %d\n”, a, b, a-b); break; case 3: printf(“%d * %d = %d\n”, a, b, a*b); break; case 4: if (b!=0) printf(“%d / %d = %d\n”, a, b, a/b); break; default: printf(“Opción incorrecta\n”); } } 30 Ejercicio Convertir un valor numérico en una nota: suspendido, aprobado, 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. Hacerlo con if (anidados y no anidados) y con switch. void main() { int nota; printf(“Déme una calificación”); scanf(“%d”,&nota); if ((nota<0) || (nota>10)) printf(“Calificación desconocida”); if ((nota>0) && (nota<5)) printf(“Nota %d = Suspenso”,nota); if ((nota>=5) && (nota<7)) printf(“Nota %d = Aprobado”,nota); if ((nota>=7) && (nota<9)) printf(“Nota %d = Notable”,nota); if ((nota>=9) && (nota<10)) printf(“Nota %d = Sobresaliente”,nota); if (nota==10) printf(“Nota %d = Matricula”,nota); } Versión con if 31 void main() { int nota; printf(“Déme una calificación”); scanf(“%d”,&nota); Versión con if anidados if ((nota<0)||(nota>10)) printf(“Calificación desconocida”); else if (nota<5) printf(“Nota %d = Suspenso”,nota); else if (nota<7) printf(“Nota %d = Aprobado”,nota); else if (nota<9) printf(“Nota %d = Notable”,nota); else if (nota<10) printf(“Nota %d = Sobresaliente”,nota); else printf(“Nota %d = Matricula”,nota); } void main() { int nota; printf(“Déme una calificación”); scanf(“%d”,&nota); switch (nota) { Versión con case 0: switch case 1: case 2: case 3: case 4: printf(“Nota %d = Suspendido”,nota); break; case 5: case 6: printf(“Nota %d = Aprobado”,nota); break; case 7: case 8: printf(“Nota %d = Notable”,nota); break; case 9: printf(“Nota %d = Sobresaliente”,nota); break; case 10: printf(“Nota %d = Matricula”,nota); break; default : printf(“Nota desconocida”); } } 32 Inconvenientes de switch z z z z No se puede emplear cuando la elección está basada en una comparación de variables o expresiones de tipo float. No se puede usar cuando la variable está comprendida en un cierto rango y no es un valor concreto. Se deben usar constantes como etiquetas, no variables. En general, switch es más eficiente que if. Ejemplo if (n < 100 && n > 2) ... switch (n) { case 3: case 4: ... case 99: ... } La versión con if es más corta y más eficiente. Con switch hay que escribir todos los posibles valores. 33 Ejercicio Escribir un programa que construya una calculadora básica. Debe mostrarse un menú con las siguientes opciones: suma, resta, multiplicación, división, raíz cuadrada y potencia. Se debe de elegir una operación. Para la opción elegida se piden y validan los datos de la opción correspondiente y se realiza la operación correspondiente. Utilizar: z Función sqrt(a): obtiene la raíz cuadrada de a. z Función pow(a, b): obtiene a elevado a b. 34 Algoritmo z z z Mostrar el menú. Pedir al usuario la opción del menú. Realizar la operación según la opción: z z z z z z Pedir dos valores al usuario Restarlos Pedir dos valores al usuario Si divisor ≠ 0 z z Pedir un valor al usuario Si valor >0 z Dividirlos Si la operación es raíz cuadrada: z Pedir dos valores al usuario Sumarlos Si la operación es restar: Si la operación es dividir: z Si la operación es sumar: z z z Calcular raíz Si la operación es potencia: z z Pedir dos valores al usuario Calcular ab Si la operación es multiplicar: z z Pedir dos valores al usuario Multiplicarlos #include <stdio.h> #include <math.h> void main() { int opcion; float a, b; printf("Menú\n"); printf("1. Sumar.\n"); printf("2. Restar.\n"); printf("3. Multiplicar.\n"); printf("4. Dividir.\n"); printf("5. Raíz cuadrada.\n"); printf("6. Potencia.\n"); printf("Opción elegida: "); scanf("%d",&opcion); Menú 35 switch(opcion) { case 1: /* Sumar */ printf("Introduce los valores a sumar (a+b): "); scanf("%f%f", &a, &b); printf("%f + %f = %f\n", a, b, a+b); break; case 2: /* Restar */ printf("Introduce los valores a restar (a-b): "); scanf("%f%f", &a, &b); printf("%f - %f = %f\n", a, b, a-b); break; case 3: /* Multiplicar */ printf("Introduce los valores a multiplicar (a*b): "); scanf("%f%f", &a, &b); printf("%f * %f = %f\n", a, b, a*b); break; case 4: /* Dividir */ printf("Introduce los valores a dividir (a/b): "); scanf("%f%f", &a, &b); if (b==0) printf("Divisor 0\n"); else printf("%f / %f = %f\n", a, b, a/b); break; case 5: /* Raíz cuadrada */ printf("Introduce el valor para calcular la raíz: "); scanf("%f", &a); if (a<0) printf("No se puede calcular la raíz cuadrada.\n"); else printf("Raíz de %f = %f\n", a, sqrt(a)); break; case 6: /* Potencia */ printf("Introduce los valores para calcular la potencia (a^b): "); scanf("%f%f", &a, &b); printf("%f^%f = %f\n", a, b, pow(a,b)); break; default: printf("Opción incorrecta.\n"); } } 36