Condicionales en C — 3 programas reales en gedit y Fedora
Los condicionales en C práctica real es lo que toca ahora. En el artículo anterior vimos la teoría de if/else if/else y switch/case. Ahora abre gedit en Fedora y escribe el código mientras lees. Tres programas progresivos con capturas reales de mi terminal.
Recuerda el flujo:
gedit programa.c & gcc programa.c -o programa ./programa
Tabla de Contenidos
Condicionales en C práctica — Programa 1: Clasificador de notas con if/else if
Este programa es el uso más natural de if/else if/else, clasificar un valor en rangos. Crea el archivo:
gedit clasificador.c &
#include <stdio.h>
int main() {
float nota;
int aprobado;
printf("=== CLASIFICADOR DE NOTAS ===\n\n");
printf("Introduce tu nota (0-10): ");
scanf("%f", ¬a);
/* Validación del rango */
if (nota < 0 || nota > 10) {
printf("Error: la nota debe estar entre 0 y 10\n");
return 1;
}
/* Clasificación */
if (nota >= 9.0) {
printf("Calificación: Sobresaliente\n");
} else if (nota >= 7.0) {
printf("Calificación: Notable\n");
} else if (nota >= 6.0) {
printf("Calificación: Bien\n");
} else if (nota >= 5.0) {
printf("Calificación: Aprobado\n");
} else if (nota >= 3.0) {
printf("Calificación: Suspenso\n");
} else {
printf("Calificación: Muy deficiente\n");
}
/* No hay booleano — usamos int */
aprobado = (nota >= 5.0);
printf("¿Aprobado? (1=sí, 0=no): %d\n", aprobado);
/* Puntos para aprobar o sobre el aprobado */
if (aprobado) {
printf("Tienes %.2f puntos sobre el aprobado\n", nota - 5.0);
} else {
printf("Te faltan %.2f puntos para aprobar\n", 5.0 - nota);
}
return 0;
}
Compila y ejecuta:
gcc clasificador.c -o clasificador ./clasificador
Resultado con nota 7.5:
=== CLASIFICADOR DE NOTAS === Introduce tu nota (0-10): 7.5 Calificación: Notable ¿Aprobado? (1=sí, 0=no): 1 Tienes 2.50 puntos sobre el aprobado
Fíjate en tres cosas importantes:
Primero — validamos el rango antes de clasificar con return 1. Cuando main devuelve un valor distinto de 0 indica al sistema que hubo un error. Es buena práctica en C.
Segundo — usamos || para el OR lógico (en Python sería or). La condición nota < 0 || nota > 10 es verdadera si cualquiera de las dos se cumple.
Tercero — aprobado es int que vale 1 o 0 — no hay booleano en C.
Condicionales en C práctica — Programa 2: Juego de adivinar el número con if
Este programa usa if/else para dar pistas al jugador. Sin bucles todavía, solo un intento. Los bucles los veremos en el siguiente artículo y entonces haremos la versión completa.
gedit adivina.c &
#include <stdio.h>
int main() {
int secreto = 42; /* número a adivinar */
int intento;
int diferencia;
printf("=== ADIVINA EL NÚMERO ===\n");
printf("Tengo un número entre 1 y 100\n\n");
printf("Tu intento: ");
scanf("%d", &intento);
/* Calcular diferencia absoluta */
if (intento > secreto) {
diferencia = intento - secreto;
} else {
diferencia = secreto - intento;
}
/* Resultado */
if (intento == secreto) {
printf("¡Correcto! El número era %d\n", secreto);
} else if (intento > secreto) {
printf("Demasiado alto\n");
} else {
printf("Demasiado bajo\n");
}
/* Pista de proximidad */
if (diferencia == 0) {
printf("Puntuación: perfecta\n");
} else if (diferencia <= 5) {
printf("Muy cerca — diferencia de %d\n", diferencia);
} else if (diferencia <= 15) {
printf("Cerca — diferencia de %d\n", diferencia);
} else if (diferencia <= 30) {
printf("Lejos — diferencia de %d\n", diferencia);
} else {
printf("Muy lejos — diferencia de %d\n", diferencia);
}
return 0;
}
gcc adivina.c -o adivina ./adivina
Resultado con intento 55:
=== ADIVINA EL NÚMERO === Tengo un número entre 1 y 100 Tu intento: 55 Demasiado alto Cerca — diferencia de 13
El valor diferencia se calcula manualmente con if/else porque en C no hay función abs() disponible sin incluir <stdlib.h>. Cuando veamos las bibliotecas lo haremos con abs(), por ahora la lógica manual es perfecta para practicar condicionales.
Condicionales en C práctica — Programa 3: Calculadora con menú usando switch
Este es el programa más completo, usa switch para el menú e if para la validación. Es exactamente el tipo de programa que aparece en las prácticas de IC2.
gedit calculadora_menu.c &
#include <stdio.h>
int main() {
int opcion;
float a, b;
/* Menú */
printf("=== CALCULADORA ===\n");
printf("1. Suma\n");
printf("2. Resta\n");
printf("3. Multiplicación\n");
printf("4. División\n");
printf("5. Módulo (enteros)\n");
printf("\nElige operación (1-5): ");
scanf("%d", &opcion);
/* Validación de opción */
if (opcion < 1 || opcion > 5) {
printf("Error: opción no válida\n");
return 1;
}
/* Entrada de números */
printf("Número A: ");
scanf("%f", &a);
printf("Número B: ");
scanf("%f", &b);
/* Operación con switch */
printf("\n--- Resultado ---\n");
switch (opcion) {
case 1:
printf("%.2f + %.2f = %.2f\n", a, b, a + b);
break;
case 2:
printf("%.2f - %.2f = %.2f\n", a, b, a - b);
break;
case 3:
printf("%.2f * %.2f = %.2f\n", a, b, a * b);
break;
case 4:
if (b == 0) {
printf("Error: no se puede dividir entre cero\n");
} else {
printf("%.2f / %.2f = %.4f\n", a, b, a / b);
}
break;
case 5:
if (b == 0) {
printf("Error: no se puede dividir entre cero\n");
} else {
printf("%d %% %d = %d\n", (int)a, (int)b, (int)a % (int)b);
}
break;
default:
printf("Opción no válida\n");
break;
}
return 0;
}
gcc calculadora_menu.c -o calculadora_menu ./calculadora_menu
Resultado con opción 4 (división):
=== CALCULADORA === 1. Suma 2. Resta 3. Multiplicación 4. División 5. Módulo (enteros) Elige operación (1-5): 4 Número A: 7 Número B: 3 --- Resultado --- 7.00 / 3.00 = 2.3333
Tres detalles importantes de este programa:
Primero — validamos la opción con if antes del switch. Es mejor validar fuera que dentro del default — así el código queda más limpio.
Segundo — dentro del case 4 usamos un if anidado para comprobar división por cero. En C puedes anidar estructuras de control sin límite.
Tercero — para el módulo casteamos a (int) porque % en C solo funciona con enteros. El %% en printf imprime un % literal — si usas solo uno lo interpreta como especificador de formato.
Visualízalo con Python Tutor
Copia este programa simplificado en pythontutor.com seleccionando C:
#include <stdio.h>
int main() {
int opcion = 2;
float a = 10.0, b = 3.0;
switch (opcion) {
case 1:
printf("%.2f\n", a + b);
break;
case 2:
printf("%.2f\n", a - b);
break;
default:
printf("invalido\n");
break;
}
return 0;
}
Observa cómo el switch salta directamente al case 2 ignorando el case 1 — y cómo el break detiene la ejecución antes del default.
Los errores más comunes en estos programas
Error 1 — Olvidar las llaves en if:
/* MAL — solo la primera línea es del if */
if (nota < 0)
printf("Error\n");
return 1; /* siempre se ejecuta */
/* BIEN */
if (nota < 0) {
printf("Error\n");
return 1;
}
Error 2 — Olvidar el break en switch:
switch (opcion) {
case 1:
printf("uno\n");
/* sin break — cae al case 2 */
case 2:
printf("dos\n"); /* se ejecuta aunque opcion sea 1 */
break;
}
Error 3 — Usar float en switch:
float nota = 7.5;
switch (nota) { /* error de compilación — switch no acepta float */
Resumen y siguiente paso
En este artículo practicaste los condicionales en C con tres programas reales. Viste if/else if para rangos con validación, if anidado dentro de switch para casos especiales, || para condiciones compuestas y el operador ternario implícito en las pistas de proximidad.
En el siguiente artículo encontrarás ejercicios propuestos con solución para practicar por tu cuenta, incluyendo un clasificador de triángulos y un sistema de login con intentos limitados.
Conditionals in C — 3 real programs in gedit and Fedora
In the previous article we covered if/else if/else and switch/case theory. Now open gedit on Fedora and write the code as you read. Three progressive programs with real terminal screenshots.
Program 1 — Grade classifier with if/else if
gedit classifier.c &
#include <stdio.h>
int main() {
float grade;
int passed;
printf("=== GRADE CLASSIFIER ===\n\n");
printf("Enter your grade (0-10): ");
scanf("%f", &grade);
if (grade < 0 || grade > 10) {
printf("Error: grade must be between 0 and 10\n");
return 1;
}
if (grade >= 9.0) {
printf("Grade: Outstanding\n");
} else if (grade >= 7.0) {
printf("Grade: Good\n");
} else if (grade >= 6.0) {
printf("Grade: Above average\n");
} else if (grade >= 5.0) {
printf("Grade: Passed\n");
} else if (grade >= 3.0) {
printf("Grade: Failed\n");
} else {
printf("Grade: Very poor\n");
}
passed = (grade >= 5.0);
printf("Passed? (1=yes, 0=no): %d\n", passed);
if (passed) {
printf("%.2f points above pass mark\n", grade - 5.0);
} else {
printf("%.2f points needed to pass\n", 5.0 - grade);
}
return 0;
}
Three important things: return 1 signals an error to the system, || is OR (like or in Python), passed is int with value 1 or 0 — no boolean in C.
Program 2 — Number guessing game with if
One attempt only, no loops yet. We’ll build the full version when we cover loops.
#include <stdio.h>
int main() {
int secret = 42;
int guess, difference;
printf("=== GUESS THE NUMBER ===\n");
printf("I have a number between 1 and 100\n\n");
printf("Your guess: ");
scanf("%d", &guess);
if (guess > secret) {
difference = guess - secret;
} else {
difference = secret - guess;
}
if (guess == secret) {
printf("Correct! The number was %d\n", secret);
} else if (guess > secret) {
printf("Too high\n");
} else {
printf("Too low\n");
}
if (difference == 0) {
printf("Score: perfect\n");
} else if (difference <= 5) {
printf("Very close — difference of %d\n", difference);
} else if (difference <= 15) {
printf("Close — difference of %d\n", difference);
} else if (difference <= 30) {
printf("Far — difference of %d\n", difference);
} else {
printf("Very far — difference of %d\n", difference);
}
return 0;
}
Program 3 — Calculator with switch menu
#include <stdio.h>
int main() {
int option;
float a, b;
printf("=== CALCULATOR ===\n");
printf("1. Addition\n2. Subtraction\n");
printf("3. Multiplication\n4. Division\n5. Modulo\n");
printf("\nChoose operation (1-5): ");
scanf("%d", &option);
if (option < 1 || option > 5) {
printf("Error: invalid option\n");
return 1;
}
printf("Number A: "); scanf("%f", &a);
printf("Number B: "); scanf("%f", &b);
printf("\n--- Result ---\n");
switch (option) {
case 1:
printf("%.2f + %.2f = %.2f\n", a, b, a + b);
break;
case 2:
printf("%.2f - %.2f = %.2f\n", a, b, a - b);
break;
case 3:
printf("%.2f * %.2f = %.2f\n", a, b, a * b);
break;
case 4:
if (b == 0) {
printf("Error: cannot divide by zero\n");
} else {
printf("%.2f / %.2f = %.4f\n", a, b, a / b);
}
break;
case 5:
if (b == 0) {
printf("Error: cannot divide by zero\n");
} else {
printf("%d %% %d = %d\n", (int)a, (int)b, (int)a % (int)b);
}
break;
default:
printf("Invalid option\n");
break;
}
return 0;
}
Three important details: validate with if before switch, nest if inside case for special cases, use %% to print a literal % in printf.
Common mistakes
/* Mistake 1 — missing braces */
if (grade < 0)
printf("Error\n");
return 1; /* always executes — NOT inside if */
/* Mistake 2 — missing break in switch */
case 1:
printf("one\n");
/* falls through to case 2 */
/* Mistake 3 — float in switch */
float grade = 7.5;
switch (grade) { /* compile error */

Un comentario