C

C

Tutorial C: Control condicional

Aprende control condicional en C con if, if-else y else if. Domina decisiones y estructuras para programas claros y eficientes.

Aprende C y certifícate

if simple

El control de flujo es una parte fundamental de cualquier lenguaje de programación, ya que nos permite tomar decisiones en nuestros programas. En C, la estructura más básica para tomar decisiones es la sentencia if.

La sentencia if nos permite ejecutar un bloque de código solo cuando una condición específica se cumple. Podemos imaginarla como una pregunta que nuestro programa se hace a sí mismo: "¿Esta condición es verdadera?". Si la respuesta es sí, entonces se ejecuta el código dentro del bloque if.

Sintaxis básica

La estructura básica de un if simple en C es:

if (condición) {
    // Código que se ejecuta si la condición es verdadera
}

Elementos importantes:

  • La palabra clave if siempre va en minúsculas
  • La condición debe ir entre paréntesis
  • El bloque de código a ejecutar va entre llaves {}

Evaluación de condiciones

En C, cualquier valor diferente de cero se considera verdadero, mientras que el valor cero se considera falso. Esto es importante recordarlo cuando trabajamos con condiciones.

Veamos un ejemplo sencillo:

#include <stdio.h>

int main() {
    int edad = 15;
    
    if (edad >= 18) {
        printf("Eres mayor de edad.\n");
    }
    
    printf("Programa finalizado.\n");
    
    return 0;
}

En este ejemplo, la condición edad >= 18 se evalúa como falsa (ya que 15 no es mayor o igual a 18), por lo que el mensaje "Eres mayor de edad" no se mostrará. El programa solo imprimirá "Programa finalizado".

Operadores de comparación

Para crear condiciones efectivas, necesitamos usar operadores de comparación:

  • == : Igual a
  • != : Diferente de
  • > : Mayor que
  • < : Menor que
  • >= : Mayor o igual que
  • <= : Menor o igual que

Un error común es confundir el operador de asignación = con el operador de igualdad ==. Veamos un ejemplo:

#include <stdio.h>

int main() {
    int numero = 10;
    
    // Correcto: compara si numero es igual a 10
    if (numero == 10) {
        printf("El número es 10.\n");
    }
    
    // Incorrecto: asigna 20 a numero y evalúa como verdadero
    if (numero = 20) {
        printf("Esta línea siempre se ejecutará.\n");
    }
    
    printf("Ahora numero vale: %d\n", numero);
    
    return 0;
}

En el segundo if, estamos asignando el valor 20 a numero (no comparando), y como 20 es diferente de cero, la condición se evalúa como verdadera.

Operadores lógicos

Podemos crear condiciones más complejas usando operadores lógicos:

  • && : AND lógico (ambas condiciones deben ser verdaderas)
  • || : OR lógico (al menos una condición debe ser verdadera)
  • ! : NOT lógico (invierte el valor de la condición)

Ejemplo con operadores lógicos:

#include <stdio.h>

int main() {
    int edad = 25;
    int saldo = 1000;
    
    // Se cumplen ambas condiciones
    if (edad >= 18 && saldo > 500) {
        printf("Puedes solicitar el préstamo.\n");
    }
    
    // Verificamos si NO es menor de edad
    if (!(edad < 18)) {
        printf("No eres menor de edad.\n");
    }
    
    return 0;
}

Bloques de una sola línea

Cuando el bloque de código a ejecutar consiste en una sola instrucción, técnicamente podemos omitir las llaves:

if (edad >= 18)
    printf("Eres mayor de edad.\n");

Sin embargo, por claridad y para evitar errores, se recomienda siempre usar llaves, incluso para bloques de una sola línea:

if (edad >= 18) {
    printf("Eres mayor de edad.\n");
}

Ejemplo práctico: Verificar si un número es par

Veamos un ejemplo práctico donde verificamos si un número es par:

#include <stdio.h>

int main() {
    int numero;
    
    printf("Introduce un número entero: ");
    scanf("%d", &numero);
    
    if (numero % 2 == 0) {
        printf("%d es un número par.\n", numero);
    }
    
    printf("Fin del programa.\n");
    
    return 0;
}

En este ejemplo:

  1. Solicitamos al usuario que introduzca un número
  2. Usamos el operador módulo (%) para verificar si el número es divisible por 2
  3. Si el resto de la división es 0, entonces el número es par y mostramos el mensaje correspondiente

Anidación de sentencias if

Podemos colocar una sentencia if dentro de otra, lo que se conoce como anidación:

#include <stdio.h>

int main() {
    int numero;
    
    printf("Introduce un número: ");
    scanf("%d", &numero);
    
    if (numero > 0) {
        printf("%d es positivo.\n", numero);
        
        if (numero % 2 == 0) {
            printf("Además, %d es par.\n", numero);
        }
    }
    
    return 0;
}

En este ejemplo, primero verificamos si el número es positivo, y solo si lo es, comprobamos si también es par. La indentación (espacios al inicio de cada línea) es crucial para mantener el código legible cuando anidamos estructuras.

Buenas prácticas

Al trabajar con sentencias if simples, considera estas recomendaciones:

  • Siempre usa llaves {} para delimitar los bloques de código, incluso si solo contienen una línea
  • Mantén una indentación consistente para mejorar la legibilidad
  • Ten cuidado de no confundir el operador de asignación = con el de igualdad ==
  • Evita condiciones demasiado complejas; si es necesario, divídelas en múltiples condiciones o usa variables intermedias para mayor claridad

if-else

Después de aprender a ejecutar código cuando una condición es verdadera con la sentencia if simple, el siguiente paso es manejar situaciones donde necesitamos ejecutar un bloque de código alternativo cuando la condición es falsa. Para esto utilizamos la estructura if-else.

La estructura if-else nos permite crear bifurcaciones en nuestro programa, definiendo dos caminos posibles de ejecución: uno para cuando la condición se cumple y otro para cuando no se cumple. Esto es como tener un plan B siempre preparado.

Sintaxis básica

La estructura básica de un if-else en C es:

if (condición) {
    // Código que se ejecuta si la condición es verdadera
} else {
    // Código que se ejecuta si la condición es falsa
}

Elementos importantes:

  • La palabra clave else va después del bloque de código del if
  • No se coloca ninguna condición después del else
  • Cada bloque de código va entre sus propias llaves {}

Ejemplo básico

Veamos un ejemplo sencillo que determina si un número es positivo o no:

#include <stdio.h>

int main() {
    int numero = -5;
    
    if (numero > 0) {
        printf("El número es positivo.\n");
    } else {
        printf("El número no es positivo.\n");
    }
    
    return 0;
}

En este ejemplo, como numero vale -5, la condición numero > 0 es falsa, por lo que se ejecutará el bloque de código dentro del else, mostrando el mensaje "El número no es positivo".

Verificación de edad con if-else

Un ejemplo clásico es verificar si una persona es mayor de edad:

#include <stdio.h>

int main() {
    int edad;
    
    printf("Por favor, introduce tu edad: ");
    scanf("%d", &edad);
    
    if (edad >= 18) {
        printf("Eres mayor de edad. Puedes acceder al contenido.\n");
    } else {
        printf("Eres menor de edad. Acceso denegado.\n");
    }
    
    return 0;
}

Este programa solicita la edad al usuario y muestra un mensaje diferente dependiendo de si es mayor de edad o no.

Bloques de una sola línea con if-else

Al igual que con el if simple, cuando los bloques de código contienen una sola instrucción, técnicamente podríamos omitir las llaves:

if (edad >= 18)
    printf("Eres mayor de edad.\n");
else
    printf("Eres menor de edad.\n");

Sin embargo, como buena práctica, se recomienda siempre usar llaves para evitar errores y mejorar la legibilidad:

if (edad >= 18) {
    printf("Eres mayor de edad.\n");
} else {
    printf("Eres menor de edad.\n");
}

Ejemplo práctico: Verificar si un número es par o impar

Podemos usar if-else para determinar si un número es par o impar:

#include <stdio.h>

int main() {
    int numero;
    
    printf("Introduce un número entero: ");
    scanf("%d", &numero);
    
    if (numero % 2 == 0) {
        printf("%d es un número par.\n", numero);
    } else {
        printf("%d es un número impar.\n", numero);
    }
    
    return 0;
}

Este programa verifica si el resto de dividir el número entre 2 es igual a 0. Si es así, el número es par; de lo contrario, es impar.

Calculadora simple con if-else

Veamos un ejemplo más elaborado donde implementamos una calculadora simple que maneja operaciones básicas:

#include <stdio.h>

int main() {
    float num1, num2;
    char operador;
    
    printf("Introduce una operación (ejemplo: 5 + 3): ");
    scanf("%f %c %f", &num1, &operador, &num2);
    
    if (operador == '+') {
        printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
    } else {
        printf("Solo puedo sumar por ahora.\n");
    }
    
    return 0;
}

En este ejemplo, el programa solo puede realizar sumas. Si el usuario introduce cualquier otro operador, se muestra un mensaje indicando que solo se pueden realizar sumas.

Anidación de if-else

Podemos anidar estructuras if-else dentro de otras, lo que nos permite manejar múltiples condiciones:

#include <stdio.h>

int main() {
    int numero;
    
    printf("Introduce un número: ");
    scanf("%d", &numero);
    
    if (numero > 0) {
        if (numero % 2 == 0) {
            printf("%d es positivo y par.\n", numero);
        } else {
            printf("%d es positivo e impar.\n", numero);
        }
    } else {
        printf("%d no es positivo.\n", numero);
    }
    
    return 0;
}

En este ejemplo, primero verificamos si el número es positivo. Si lo es, entonces verificamos si es par o impar y mostramos el mensaje correspondiente. Si no es positivo, mostramos un mensaje indicando que no es positivo.

Ejemplo de calificaciones con if-else

Veamos un ejemplo donde evaluamos una calificación numérica:

#include <stdio.h>

int main() {
    int calificacion;
    
    printf("Introduce tu calificación (0-100): ");
    scanf("%d", &calificacion);
    
    if (calificacion >= 60) {
        printf("¡Felicidades! Has aprobado el examen.\n");
    } else {
        printf("Lo siento, has reprobado el examen.\n");
    }
    
    return 0;
}

Este programa determina si un estudiante ha aprobado o reprobado un examen basándose en su calificación.

Uso de operadores lógicos con if-else

Podemos combinar múltiples condiciones usando operadores lógicos:

#include <stdio.h>

int main() {
    int edad;
    char respuesta;
    
    printf("¿Cuál es tu edad? ");
    scanf("%d", &edad);
    
    printf("¿Tienes identificación? (s/n): ");
    scanf(" %c", &respuesta);  // Nota el espacio antes de %c para consumir el salto de línea
    
    if (edad >= 18 && (respuesta == 's' || respuesta == 'S')) {
        printf("Puedes entrar al club nocturno.\n");
    } else {
        printf("No puedes entrar al club nocturno.\n");
    }
    
    return 0;
}

En este ejemplo, una persona solo puede entrar al club nocturno si tiene al menos 18 años Y tiene identificación.

Buenas prácticas con if-else

Al trabajar con estructuras if-else, considera estas recomendaciones:

  • Mantén el código balanceado: intenta que los bloques if y else tengan una complejidad similar
  • Usa comentarios para explicar la lógica de condiciones complejas
  • Considera el orden de las condiciones: coloca primero las más probables o las más simples
  • Evita anidar demasiados niveles de if-else, ya que puede hacer que el código sea difícil de leer
  • Usa variables con nombres descriptivos para que las condiciones sean más legibles

La estructura if-else es una herramienta fundamental en la programación que te permitirá crear programas que tomen decisiones basadas en diferentes condiciones, haciendo que tus aplicaciones sean más interactivas y útiles.

else if para múltiples condiciones

Hasta ahora hemos visto cómo tomar decisiones con if simple y cómo manejar dos alternativas con if-else. Sin embargo, en muchas situaciones necesitamos evaluar más de dos posibilidades. Para estos casos, C nos ofrece la estructura else if, que nos permite encadenar múltiples condiciones de forma clara y eficiente.

La estructura else if nos permite evaluar varias condiciones en secuencia, ejecutando el código del primer bloque cuya condición sea verdadera. Es como tener un sistema de "si no se cumple esto, entonces verifica esto otro".

Sintaxis básica

La estructura básica de else if en C es:

if (condición1) {
    // Código que se ejecuta si condición1 es verdadera
} else if (condición2) {
    // Código que se ejecuta si condición1 es falsa y condición2 es verdadera
} else if (condición3) {
    // Código que se ejecuta si condición1 y condición2 son falsas y condición3 es verdadera
} else {
    // Código que se ejecuta si todas las condiciones anteriores son falsas
}

El bloque else final es opcional y actúa como un caso por defecto cuando ninguna de las condiciones anteriores se cumple.

Evaluación de calificaciones

Un ejemplo clásico es la asignación de calificaciones con letras según un puntaje numérico:

#include <stdio.h>

int main() {
    int calificacion;
    
    printf("Introduce tu calificación (0-100): ");
    scanf("%d", &calificacion);
    
    if (calificacion >= 90) {
        printf("Tu calificación es A - Excelente\n");
    } else if (calificacion >= 80) {
        printf("Tu calificación es B - Muy bien\n");
    } else if (calificacion >= 70) {
        printf("Tu calificación es C - Bien\n");
    } else if (calificacion >= 60) {
        printf("Tu calificación es D - Suficiente\n");
    } else {
        printf("Tu calificación es F - Reprobado\n");
    }
    
    return 0;
}

En este ejemplo:

  1. Primero se verifica si la calificación es 90 o superior (A)
  2. Si no, se verifica si es 80 o superior (B)
  3. Si no, se verifica si es 70 o superior (C)
  4. Si no, se verifica si es 60 o superior (D)
  5. Si ninguna de las condiciones anteriores se cumple, la calificación es F

Orden de evaluación

El orden de las condiciones es crucial en una estructura else if. Las condiciones se evalúan de arriba hacia abajo, y se ejecuta el bloque de código correspondiente a la primera condición que sea verdadera.

Veamos qué sucede si cambiamos el orden de las condiciones:

#include <stdio.h>

int main() {
    int calificacion = 85;
    
    // Orden incorrecto de condiciones
    if (calificacion >= 60) {
        printf("Tu calificación es D - Suficiente\n");
    } else if (calificacion >= 70) {
        printf("Tu calificación es C - Bien\n");
    } else if (calificacion >= 80) {
        printf("Tu calificación es B - Muy bien\n");
    } else if (calificacion >= 90) {
        printf("Tu calificación es A - Excelente\n");
    } else {
        printf("Tu calificación es F - Reprobado\n");
    }
    
    return 0;
}

Con una calificación de 85, este programa mostraría "Tu calificación es D - Suficiente", lo cual es incorrecto. Esto ocurre porque la primera condición (calificacion >= 60) ya es verdadera, por lo que se ejecuta ese bloque y se ignoran las demás condiciones.

Categorías de edad

Otro ejemplo práctico es categorizar a las personas según su edad:

#include <stdio.h>

int main() {
    int edad;
    
    printf("Introduce tu edad: ");
    scanf("%d", &edad);
    
    if (edad < 0) {
        printf("Edad no válida\n");
    } else if (edad < 13) {
        printf("Eres un niño\n");
    } else if (edad < 18) {
        printf("Eres un adolescente\n");
    } else if (edad < 65) {
        printf("Eres un adulto\n");
    } else {
        printf("Eres un adulto mayor\n");
    }
    
    return 0;
}

Este programa clasifica a una persona en diferentes categorías de edad, verificando primero si la edad es válida.

Calculadora con múltiples operaciones

Podemos mejorar nuestra calculadora simple para manejar varias operaciones:

#include <stdio.h>

int main() {
    float num1, num2, resultado;
    char operador;
    
    printf("Introduce una operación (ejemplo: 5 + 3): ");
    scanf("%f %c %f", &num1, &operador, &num2);
    
    if (operador == '+') {
        resultado = num1 + num2;
        printf("%.2f + %.2f = %.2f\n", num1, num2, resultado);
    } else if (operador == '-') {
        resultado = num1 - num2;
        printf("%.2f - %.2f = %.2f\n", num1, num2, resultado);
    } else if (operador == '*') {
        resultado = num1 * num2;
        printf("%.2f * %.2f = %.2f\n", num1, num2, resultado);
    } else if (operador == '/') {
        if (num2 != 0) {
            resultado = num1 / num2;
            printf("%.2f / %.2f = %.2f\n", num1, num2, resultado);
        } else {
            printf("Error: No se puede dividir por cero\n");
        }
    } else {
        printf("Operador no válido. Use +, -, * o /\n");
    }
    
    return 0;
}

En este ejemplo:

  1. Evaluamos qué operación quiere realizar el usuario
  2. Para cada operador, realizamos el cálculo correspondiente
  3. En el caso de la división, añadimos una verificación adicional para evitar la división por cero
  4. Si el operador no es reconocido, mostramos un mensaje de error

Días de la semana

Podemos usar else if para convertir un número en el nombre del día de la semana:

#include <stdio.h>

int main() {
    int dia;
    
    printf("Introduce un número del 1 al 7: ");
    scanf("%d", &dia);
    
    if (dia == 1) {
        printf("Lunes\n");
    } else if (dia == 2) {
        printf("Martes\n");
    } else if (dia == 3) {
        printf("Miércoles\n");
    } else if (dia == 4) {
        printf("Jueves\n");
    } else if (dia == 5) {
        printf("Viernes\n");
    } else if (dia == 6) {
        printf("Sábado\n");
    } else if (dia == 7) {
        printf("Domingo\n");
    } else {
        printf("Número no válido. Debe estar entre 1 y 7.\n");
    }
    
    return 0;
}

Este programa muestra el nombre del día de la semana correspondiente al número introducido.

Combinación con operadores lógicos

Podemos crear condiciones más complejas combinando else if con operadores lógicos:

#include <stdio.h>

int main() {
    int temperatura;
    
    printf("Introduce la temperatura actual (°C): ");
    scanf("%d", &temperatura);
    
    if (temperatura < 0) {
        printf("Hace mucho frío. Abrígate bien.\n");
    } else if (temperatura >= 0 && temperatura < 10) {
        printf("Hace frío. Lleva un abrigo.\n");
    } else if (temperatura >= 10 && temperatura < 20) {
        printf("Está fresco. Una chaqueta ligera bastará.\n");
    } else if (temperatura >= 20 && temperatura < 30) {
        printf("La temperatura es agradable.\n");
    } else {
        printf("Hace calor. Viste ropa ligera.\n");
    }
    
    return 0;
}

Este programa recomienda qué ropa usar según la temperatura, utilizando operadores lógicos para definir rangos de temperatura.

Verificación de caracteres

Podemos usar else if para clasificar tipos de caracteres:

#include <stdio.h>

int main() {
    char caracter;
    
    printf("Introduce un carácter: ");
    scanf(" %c", &caracter);  // Espacio antes de %c para ignorar espacios en blanco
    
    if (caracter >= 'a' && caracter <= 'z') {
        printf("'%c' es una letra minúscula.\n", caracter);
    } else if (caracter >= 'A' && caracter <= 'Z') {
        printf("'%c' es una letra mayúscula.\n", caracter);
    } else if (caracter >= '0' && caracter <= '9') {
        printf("'%c' es un dígito.\n", caracter);
    } else {
        printf("'%c' es un carácter especial.\n", caracter);
    }
    
    return 0;
}

Este programa clasifica un carácter como letra minúscula, letra mayúscula, dígito o carácter especial.

Buenas prácticas con else if

Al trabajar con estructuras else if, considera estas recomendaciones:

  • Ordena las condiciones de forma lógica, generalmente de más específicas a más generales
  • Asegúrate de que las condiciones sean mutuamente excluyentes cuando sea posible
  • Usa un bloque else final como caso por defecto para manejar situaciones inesperadas
  • Mantén la indentación consistente para mejorar la legibilidad
  • Si tienes muchas condiciones (más de 5-6), considera usar otras estructuras como switch (que aprenderás más adelante)

La estructura else if es una herramienta poderosa que te permite manejar múltiples condiciones de forma clara y organizada, haciendo que tus programas sean más robustos y capaces de responder a diversas situaciones.

CONSTRUYE TU CARRERA EN IA Y PROGRAMACIÓN SOFTWARE

Accede a +1000 lecciones y cursos con certificado. Mejora tu portfolio con certificados de superación para tu CV.

30 % DE DESCUENTO

Plan mensual

19.00 /mes

13.30 € /mes

Precio normal mensual: 19 €
63 % DE DESCUENTO

Plan anual

10.00 /mes

7.00 € /mes

Ahorras 144 € al año
Precio normal anual: 120 €
Aprende C online

Todas las lecciones de C

Accede a todas las lecciones de C y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a C y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la sintaxis y funcionamiento básico de la sentencia if en C.
  • Aprender a utilizar operadores de comparación y lógicos para construir condiciones.
  • Saber implementar estructuras if-else para manejar alternativas en la ejecución del código.
  • Conocer la estructura else if para evaluar múltiples condiciones secuenciales.
  • Aplicar buenas prácticas en la escritura y anidación de sentencias condicionales para mejorar la legibilidad y evitar errores.