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ícateif 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:
- Solicitamos al usuario que introduzca un número
- Usamos el operador módulo (
%
) para verificar si el número es divisible por 2 - 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 delif
- 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
yelse
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:
- Primero se verifica si la calificación es 90 o superior (A)
- Si no, se verifica si es 80 o superior (B)
- Si no, se verifica si es 70 o superior (C)
- Si no, se verifica si es 60 o superior (D)
- 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:
- Evaluamos qué operación quiere realizar el usuario
- Para cada operador, realizamos el cálculo correspondiente
- En el caso de la división, añadimos una verificación adicional para evitar la división por cero
- 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.
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.
Introducción A C
Introducción Y Entorno
Primer Programa En C
Introducción Y Entorno
Estructura Básica De Un Programa En C
Sintaxis
Operadores Y Expresiones
Sintaxis
Control De Flujo
Sintaxis
Arrays Y Manejo De Cadenas
Sintaxis
Arrays Unidimensionales
Sintaxis
Ámbito De Variables
Sintaxis
Paso De Parámetros
Sintaxis
Entrada Y Salida Básica
Sintaxis
Variables Y Tipos De Datos
Sintaxis
Recursividad
Sintaxis
Control Iterativo
Sintaxis
Control Condicional
Sintaxis
Funciones
Punteros
Punteros
Punteros
Gestión De Memoria Dinámica
Punteros
Aritmética De Punteros
Punteros
Punteros Y Arrays
Punteros
Punteros A Punteros
Punteros
Punteros Y Funciones
Punteros
Memoria Estática Vs Dinámica
Gestión De Memoria
Gestión Segura De Memoria
Gestión De Memoria
Arrays Dinámicos
Gestión De Memoria
Estructuras En C
Estructuras Y Uniones
Uniones Y Enumeraciones
Estructuras Y Uniones
Typedef Y Y Organización De Código
Estructuras Y Uniones
Uniones
Estructuras Y Uniones
Creación De Structs
Estructuras Y Uniones
Enumeraciones
Estructuras Y Uniones
Estructuras Anidadas
Estructuras Y Uniones
Archivos
Io Y Archivos
E/s Binaria Y Formateo
Io Y Archivos
Manipulación Avanzada De Cadenas
Io Y Archivos
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.