repetir tareas sin repetir código.
Incluye 5 ejercicios con pistas y solución y un quiz de 5 preguntas. Tiempo estimado: 60 minutos.
1. for: cuando sabes cuántas veces
for (int i = 0; i < 5; i++) { // inicio ; condición ; paso
printf("%d ", i); // 0 1 2 3 4
}
Orden de ejecución: inicio (una vez) → condición → cuerpo → paso → condición → ...
Convención: empieza en 0 y usa < con el tamaño (i < n) → ejecuta exactamente n veces.
2. while: mientras se cumpla una condición
int n = 1;
while (n < 100) {
n *= 2;
}
Puede ejecutarse cero veces (si la condición ya es falsa al empezar).
3. do { } while: al menos una vez
int opcion;
do {
printf("Elige 1-3: ");
scanf("%d", &opcion);
} while (opcion < 1 || opcion > 3); // valida entrada
4. break y continue
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) continue; // salta los pares
if (i > 7) break; // sale del bucle
printf("%d ", i); // 1 3 5 7
}
5. Bucles anidados
Un bucle dentro de otro: el interior se ejecuta completo por cada vuelta del exterior.
for (int fila = 1; fila <= 3; fila++) {
for (int col = 1; col <= fila; col++)
printf("*");
printf("\n");
}
// *
// **
// ***
Total de iteraciones internas = filas × columnas: ¡los anidados se encarecen rápido!
6. Patrones que usarás cada día
| Patrón | Esqueleto |
|---|---|
| Acumulador | suma = 0; for (...) suma += x; |
| Máximo | max = v[0]; for (...) if (v[i] > max) max = v[i]; |
| Contador | n = 0; for (...) if (cond) n++; |
| Bandera | ok = 1; for (...) if (falla) { ok = 0; break; } |
| Leer hasta fin | while (scanf("%d", &x) == 1) { ... } |
7. Errores típicos
- Off-by-one:
i <= nen lugar dei < n(una vuelta de más). - Bucle infinito: olvidas actualizar la variable de la condición.
;tras elfor:for (...);→ el cuerpo queda vacío.- Modificar el contador dentro del cuerpo sin querer.
Prueba esto
- Imprime los números del 10 al 1 en orden descendente.
- Suma los dígitos de un número (
n % 10extrae el último,n /= 10lo quita). - Tabla de multiplicar completa (1..9 × 1..9) con dos
foranidados.
Ejercicios prácticos del módulo 4
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.
4.1 Tabla de multiplicar
Entrada de ejemplo
7
Salida esperada
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70
Tu punto de partida
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
// TODO: bucle for de 1 a 10
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
for (int i = 1; i <= 10; i++) { ... }
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
for (int i = 1; i <= 10; i++)
printf("%d x %d = %d\n", n, i, n * i);
return 0;
}4.2 Suma y factorial
Entrada de ejemplo
5
Salida esperada
suma=15 factorial=120
Tu punto de partida
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
long long suma = 0, fact = 1;
// 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
Un solo bucle de 1 a n basta para las dos cosas.
Pista 2
suma += i; fact *= i;
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
long long suma = 0, fact = 1;
for (int i = 1; i <= n; i++) {
suma += i;
fact *= i;
}
printf("suma=%lld factorial=%lld\n", suma, fact);
return 0;
}4.3 FizzBuzz
Entrada de ejemplo
15
Salida esperada
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
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
Comprueba PRIMERO el caso de 15 (o 3 y 5 a la vez); si no, Fizz se come a FizzBuzz.
Pista 2
if (i % 15 == 0) ... else if (i % 3 == 0) ... else if (i % 5 == 0) ... else ...
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
if (i % 15 == 0) printf("FizzBuzz\n");
else if (i % 3 == 0) printf("Fizz\n");
else if (i % 5 == 0) printf("Buzz\n");
else printf("%d\n", i);
}
return 0;
}4.4 Piramide de asteriscos
Entrada de ejemplo
4
Salida esperada
* *** ***** *******
Tu punto de partida
#include <stdio.h>
int main(void) {
int h;
scanf("%d", &h);
// TODO: for externo por filas, dos for internos (espacios y asteriscos)
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
Por cada fila: primero un bucle que pone espacios, luego otro que pone asteriscos, y un \n.
Pista 2
putchar('*') imprime un unico caracter.
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int h;
scanf("%d", &h);
for (int i = 1; i <= h; i++) {
for (int s = 0; s < h - i; s++) putchar(' ');
for (int k = 0; k < 2 * i - 1; k++) putchar('*');
putchar('\n');
}
return 0;
}4.5 Primos hasta n
Entrada de ejemplo
13
Salida esperada
2 3 5 7 11 13
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
Un bucle externo recorre candidatos; uno interno busca algun divisor.
Pista 2
Usa una bandera (int primo = 1) que pones a 0 si encuentras divisor, y sal con break.
Pista 3
Recuerda: 1 no es primo, por eso empiezas en 2.
Ver solución (inténtalo antes)
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
for (int i = 2; i <= n; i++) {
int primo = 1;
for (int d = 2; d * d <= i; d++) {
if (i % d == 0) { primo = 0; break; }
}
if (primo) printf("%d ", i);
}
printf("\n");
return 0;
}Quiz del módulo 4
5 preguntas para comprobar que has fijado los conceptos. Las opciones se barajan cada vez.