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

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", &nota);

    /* 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.

Siguiente paso: ejerciciosCondicionales en C — ejercicios para dominar if, else y switch

¿Te ha servido este artículo? Así puedes apoyar SergioLearns →

Sigue aprendiendo

2 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *