condicionales en C práctica if else switch gedit Fedora

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.

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

Publicaciones Similares

Un comentario

Deja una respuesta

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