Ejercicio 04 — Invertir un array IN-PLACE (sin array auxiliar) y mostrarlo
Dificultad: amarillo · Módulo 05 (Arrays y cadenas)
Enunciado
Invertir un array IN-PLACE (sin array auxiliar) y mostrarlo.
Diagrama de flujo

Cómo se resuelve
Invertir in-place significa dar la vuelta al array sin crear otro array auxiliar: reordenamos las casillas del mismo a. La técnica es el patrón de dos índices que se acercan.
- Colocamos un índice
izq = 0al principio y otroder = n - 1al final. - Mientras
izq < der, intercambiamosa[izq]cona[der]y luego avanzamosizq++y retrocedemosder--. Los dos índices se van juntando hacia el centro; cuando se cruzan, el array ya está del revés.
El intercambio se hace con el swap de variable temporal, imprescindible en C:
int tmp = a[izq];
a[izq] = a[der];
a[der] = tmp;Trampa habitual: si intentas el swap sin tmp (a[izq] = a[der]; a[der] = a[izq];), la primera línea ya machacó a[izq], así que la segunda copia el valor equivocado y pierdes un dato. La variable temporal guarda una copia antes de sobrescribir. La condición izq < der (y no <=) es correcta: cuando ambos apuntan a la misma casilla central no hay nada que intercambiar.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 04 — PRACTICA (rellena los TODO)
* Enunciado: Invertir un array IN-PLACE (sin array auxiliar) y mostrarlo.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej04_practica.c -o ej04 && ./ej04
*/
#include <stdio.h>
int main(void) {
int n;
// TODO 1: Pedir N y leerlo. Declara el array y lee los N enteros.
// TODO 2: Declara dos indices: 'izq = 0' y 'der = n - 1'.
// TODO 3: Bucle while mientras izq < der:
// a) Guarda a[izq] en una variable temporal 'tmp'.
// b) Copia a[der] en a[izq].
// c) Copia 'tmp' en a[der].
// d) Incrementa izq y decrementa der.
// (Este es el patron "swap con variable temporal".)
// TODO 4: Imprime el array resultante.
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 04 — MODELO (resuelto)
* Enunciado: Invertir un array IN-PLACE (sin array auxiliar) y mostrarlo.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej04_modelo.c -o ej04 && ./ej04
*/
#include <stdio.h>
int main(void) {
int n;
printf("Cuantos numeros (max 50)? ");
scanf("%d", &n);
if (n < 1 || n > 50) {
printf("N debe estar entre 1 y 50.\n");
return 1;
}
int a[50];
for (int i = 0; i < n; i++) {
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
// Invertir con dos indices: uno desde el principio (izq) y otro desde el final (der).
// Intercambiamos los elementos y avanzamos hacia el centro.
int izq = 0;
int der = n - 1;
while (izq < der) {
// Swap clasico con variable temporal
int tmp = a[izq];
a[izq] = a[der];
a[der] = tmp;
izq++;
der--;
}
printf("Array invertido: ");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.