Ejercicio 01 — Leer N enteros (N20) y mostrarlos en orden inverso

Dificultad: verde · Módulo 05 (Arrays y cadenas)

Enunciado

Leer N enteros (N20) y mostrarlos en orden inverso.

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 01

Diagrama de flujo (grafo) del ejercicio 01

Cómo se resuelve

Un array es un bloque de casillas numeradas del mismo tipo. Aquí declaramos int a[20]: 20 huecos con índices que van del 0 al 19. Reservamos 20 aunque el usuario pida menos; solo usaremos las primeras n posiciones.

  1. Antes de nada validamos que n está entre 1 y 20. Esto no es un capricho: el array solo tiene 20 casillas, así que si n fuera mayor escribiríamos fuera de sus límites.
  2. El primer bucle recorre de 0 a n-1 y llena el array leyendo con scanf("%d", &a[i]). Fíjate en el &: scanf necesita la dirección de la casilla donde guardar el número.
  3. El segundo bucle es el truco del ejercicio: en vez de ir hacia adelante, arranca en el último índice (i = n - 1) y baja hasta 0 con i--. Recorrer el array al revés es lo que produce el orden inverso, sin mover ni un solo dato de sitio.

Trampa habitual: el índice válido llega hasta n-1, nunca hasta n. Un bucle que empiece en i = n leería a[n], una casilla que no existe, y eso en C no da error de compilación: simplemente devuelve basura o rompe el programa.

Para practicar — cópialo y complétalo

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 01 — PRACTICA (rellena los TODO)
 * Enunciado: Leer N enteros (N<=20) y mostrarlos en orden inverso.
 * Dificultad: verde
 * Stdin: 5\n10\n20\n30\n40\n50
 * Compilar: gcc -std=c11 -Wall ej01_practica.c -o ej01 && ./ej01
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
 
    // TODO 1: Pedir al usuario cuantos numeros va a introducir (max 20)
    //         y leer el valor en 'n' con scanf.
 
    // TODO 2: Declara un array de enteros de tamano 20.
 
    // TODO 3: Con un bucle for de 0 a n-1, lee cada entero del usuario
    //         y guardalo en el array. Recuerda el & en scanf.
 
    // TODO 4: Con otro bucle for que vaya desde n-1 hasta 0 (inclusive),
    //         imprime cada elemento seguido de un espacio.
 
    printf("\n");
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 01 — MODELO (resuelto)
 * Enunciado: Leer N enteros (N<=20) y mostrarlos en orden inverso.
 * Dificultad: verde
 * Stdin: 5\n10\n20\n30\n40\n50
 * Compilar: gcc -std=c11 -Wall ej01_modelo.c -o ej01 && ./ej01
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
    printf("Cuantos numeros (max 20)? ");
    scanf("%d", &n);
 
    // Validacion basica del rango
    if (n < 1 || n > 20) {
        printf("N debe estar entre 1 y 20.\n");
        return 1;
    }
 
    int a[20];
 
    // Leer los N enteros
    for (int i = 0; i < n; i++) {
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
 
    // Mostrar en orden inverso: empezamos desde el ultimo indice (n-1)
    printf("Orden inverso: ");
    for (int i = n - 1; i >= 0; i--) {
        printf("%d ", a[i]);
    }
    printf("\n");
 
    return 0;
}

Ejecútalo en el navegador

▶ Abrir y ejecutar en Compiler Explorer

Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones