Ejercicio 05 — Lee dos numeros reales y un operador
Dificultad: amarillo · Módulo 02 (Condicionales)
Enunciado
Lee dos numeros reales y un operador (+,-,*,/) e imprime el resultado; avisa si se intenta dividir por cero.
Diagrama de flujo

Cómo se resuelve
El programa es una mini-calculadora: lee dos números reales y un operador (+, -, *, /) y muestra el resultado. Es el ejercicio para practicar switch, que elige entre varios casos discretos de forma más limpia que una cadena de if-else.
scanf("%lf %c %lf", &a, &op, &b)lee los tres datos de golpe:%lflee undoubley%clee un único carácter (el operador). Al usardoubleguardamos decimales, y por eso imprimimos con%.2f(dos decimales).switch (op)compara el carácter leído contra cadacase. Cada rama calcula su operación, imprime el resultado y termina conbreak. Eldefaultrecoge cualquier operador que no reconozcamos.- El caso
'/'lleva unifextra: antes de dividir, comprueba quebno sea cero, porque dividir entre cero es una operación inválida. Es un buen ejemplo de anidar un condicional dentro de uncase.
Trampa habitual: olvidar el break al final de cada case. Sin él, la ejecución “cae” al siguiente caso (fall-through): si escribieras + sin break, además de la suma se ejecutaría también el código de la resta. El compilador no siempre avisa, así que pon break en cada rama salvo que el encadenamiento sea deliberado.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
Curso de C — Modulo 02: Condicionales
Ejercicio 05 — PRACTICA (rellena los TODO)
Enunciado: Lee dos numeros reales y un operador (+,-,*,/) e imprime el
resultado; avisa si se intenta dividir por cero.
Dificultad: amarillo
Compilar: gcc -std=c11 -Wall ej05_practica.c -o ej05 && ./ej05
*/
#include <stdio.h>
int main(void) {
double a, b;
char op;
// TODO: muestra un mensaje como "Introduce: num1 op num2 (ej: 10 / 2): "
// TODO: lee a, op y b con una sola llamada a scanf
// formato sugerido: "%lf %c %lf"
// (usa &a, &op, &b)
// TODO: escribe un switch sobre 'op' con cuatro cases: '+' '-' '*' '/'
// - Para cada operacion aritmetica, calcula e imprime "Resultado: %.2f"
// - Para '/', antes de dividir comprueba con un if que b != 0.0
// Si b es 0, imprime "Error: division por cero"
// - En el case default, imprime "Operador desconocido"
// - No olvides el break al final de cada case
return 0;
}Solución — cópiala y ejecútala
/*
Curso de C — Modulo 02: Condicionales
Ejercicio 05 — MODELO (resuelto)
Enunciado: Lee dos numeros reales y un operador (+,-,*,/) e imprime el
resultado; avisa si se intenta dividir por cero.
Dificultad: amarillo
Compilar: gcc -std=c11 -Wall ej05_modelo.c -o ej05 && ./ej05
*/
#include <stdio.h>
int main(void) {
double a, b;
char op;
printf("Introduce: num1 operador num2 (ej: 10 / 2): ");
// %lf lee double; %c lee el caracter del operador
scanf("%lf %c %lf", &a, &op, &b);
// switch sobre el caracter del operador
switch (op) {
case '+':
printf("Resultado: %.2f\n", a + b);
break;
case '-':
printf("Resultado: %.2f\n", a - b);
break;
case '*':
printf("Resultado: %.2f\n", a * b);
break;
case '/':
// Antes de dividir, comprobamos que el divisor no sea cero
if (b == 0.0) {
printf("Error: division por cero\n");
} else {
printf("Resultado: %.2f\n", a / b);
}
break;
default:
printf("Operador desconocido: %c\n", op);
break;
}
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.