que tus programas tomen decisiones.
Incluye 4 ejercicios con pistas y solución y un quiz de 5 preguntas. Tiempo estimado: 50 minutos.
1. Verdadero y falso en C
No existe el tipo booleano "clásico": 0 es falso y cualquier otro valor es verdadero. Las comparaciones devuelven 1 o 0.
(Con #include <stdbool.h> tienes bool, true y false, que son simples alias de eso.)
2. Operadores
| Tipo | Operadores |
|---|---|
| Comparación | == != < > <= >= |
| Lógicos | && (y) || (o) ! (no) |
| Asignación | = += -= *= /= %= |
🐛 El error clásico:
if (x = 5)asigna 5 y siempre es verdadero. Se compara con==.
&& y || hacen cortocircuito: if (p != NULL && p->x > 0) no evalúa lo segundo si lo primero es falso (esto te salvará de crashes).
3. if / else if / else
if (nota >= 9) printf("Sobresaliente\n");
else if (nota >= 7) printf("Notable\n");
else if (nota >= 5) printf("Aprobado\n");
else printf("Suspenso\n");
Usa siempre llaves { } aunque haya una sola sentencia; evita un clásico fallo al añadir líneas después:
if (x > 0) {
printf("positivo\n");
}
4. switch
Para comparar un entero o char con varios valores constantes:
switch (opcion) {
case 1: printf("Uno\n"); break;
case 2:
case 3: printf("Dos o tres\n"); break; // varios case juntos
default: printf("Otro\n");
}
Sin break, la ejecución cae al siguiente case (fall-through). No funciona con cadenas ni double.
5. Operador ternario
int mayor = (a > b) ? a : b;
6. Operadores de bits (avance)
& | ^ ~ << >>. Los verás más adelante; ahora solo ten presente que & (bits) no es && (lógico).
7. El resto de la división con negativos
En C99+ el resto toma el signo del dividendo: -7 % 2 vale -1. Por eso para "es impar" se usa n % 2 != 0, no n % 2 == 1.
Prueba esto
- Predice y comprueba:
printf("%d\n", 5 > 3 && 2 > 4); - Escribe un
switchsinbreaky observa el fall-through. - Haz
if (x = 0)y mira qué avisa el compilador con-Wall.
Resumen
- 0 = falso; todo lo demás = verdadero.
==compara,=asigna.switchnecesitabreaken cada rama (salvo que busques el fall-through).
Ejercicios prácticos del módulo 3
Programar se aprende programando: intenta cada ejercicio antes de mirar las pistas, y usa la solución solo para comparar. Marca los que resuelvas y tu progreso se guarda en este navegador.
3.1 Par o impar
Entrada de ejemplo
4
Salida esperada
par
Tu punto de partida
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
El resto de dividir entre 2 (n % 2) es 0 en los pares.
Pista 2
En C, -3 % 2 vale -1 (no 1): compara con 0, no con 1.
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
if (n % 2 == 0) printf("par\n");
else printf("impar\n");
return 0;
}3.2 El mayor de tres
Entrada de ejemplo
3 9 5
Salida esperada
El mayor es 9
Tu punto de partida
#include <stdio.h>
int main(void) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
Guarda en una variable 'm' el mayor visto hasta ahora y comparalo con cada numero.
Pista 2
int m = a; if (b > m) m = b; if (c > m) m = c;
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int m = a;
if (b > m) m = b;
if (c > m) m = c;
printf("El mayor es %d\n", m);
return 0;
}3.3 Anio bisiesto
Entrada de ejemplo
2024
Salida esperada
bisiesto
Tu punto de partida
#include <stdio.h>
int main(void) {
int anio;
scanf("%d", &anio);
// TODO
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
Son dos casos que se suman: (div por 4 Y no por 100) O (div por 400).
Pista 2
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int anio;
scanf("%d", &anio);
if ((anio % 4 == 0 && anio % 100 != 0) || anio % 400 == 0)
printf("bisiesto\n");
else
printf("no bisiesto\n");
return 0;
}3.4 Calculadora con switch
Entrada de ejemplo
6 * 7
Salida esperada
42.00
Tu punto de partida
#include <stdio.h>
int main(void) {
double a, b;
char op;
scanf("%lf %c %lf", &a, &op, &b);
// TODO: switch (op) { ... }
return 0;
}Cópialo en tu editor, complétalo, compílalo (gcc -Wall -Wextra programa.c -o programa) y prueba la entrada de ejemplo. Para que se corrija solo con varios casos de prueba, descarga el curso.
Pista 1
Cada case termina con break; si no, "cae" al siguiente (fall-through).
Pista 2
Dentro de case '/' comprueba b == 0 antes de dividir.
Pista 3
default: cubre cualquier otro operador.
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
double a, b;
char op;
scanf("%lf %c %lf", &a, &op, &b);
switch (op) {
case '+': printf("%.2f\n", a + b); break;
case '-': printf("%.2f\n", a - b); break;
case '*': printf("%.2f\n", a * b); break;
case '/':
if (b == 0) printf("Error: division por cero\n");
else printf("%.2f\n", a / b);
break;
default:
printf("Error: operador invalido\n");
}
return 0;
}Quiz del módulo 3
5 preguntas para comprobar que has fijado los conceptos. Las opciones se barajan cada vez.