Ejercicio 03 — Encontrar el maximo y el minimo de un array de N enteros

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

Enunciado

Encontrar el maximo y el minimo de un array de N enteros.

Diagrama de flujo

Diagrama de flujo del ejercicio 03

Cómo se resuelve

Para encontrar el máximo y el mínimo recorremos el array una sola vez comparando cada elemento con los mejores candidatos que llevamos hasta el momento.

  1. El detalle importante está al inicializar: int max = a[0]; int min = a[0];. Arrancamos ambos con el primer elemento del array, no con 0. Esto es la trampa típica: si inicializaras max = 0 y todos los números fueran negativos (por ejemplo -5 -2 -8), el programa diría que el máximo es 0, un valor que nunca estuvo en los datos. Usar a[0] garantiza que empiezas con un valor real de la colección.
  2. El bucle empieza en i = 1, no en 0, porque a la posición 0 ya la hemos usado para inicializar. En cada vuelta: si a[i] supera a max, lo actualizamos; si es menor que min, actualizamos min.

Al terminar el recorrido, max y min contienen el mayor y el menor de todo el array. Este patrón “guardar el mejor hasta ahora” reaparece en muchísimos algoritmos.

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 03 — PRACTICA (rellena los TODO)
 * Enunciado: Encontrar el maximo y el minimo de un array de N enteros.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej03_practica.c -o ej03 && ./ej03
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
 
    // TODO 1: Pedir N y leerlo.
 
    // TODO 2: Declara el array y lee los N enteros.
 
    // TODO 3: Declara 'max' y 'min' e inicializalos con a[0].
    //         (Ojo: NO uses 0 como valor inicial si los datos pueden ser negativos.)
 
    // TODO 4: Recorre el array desde el indice 1. En cada iteracion:
    //         - Si a[i] > max, actualiza max.
    //         - Si a[i] < min, actualiza min.
 
    // TODO 5: Imprime max y min.
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 03 — MODELO (resuelto)
 * Enunciado: Encontrar el maximo y el minimo de un array de N enteros.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej03_modelo.c -o ej03 && ./ej03
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
    printf("Cuantos numeros (max 100)? ");
    scanf("%d", &n);
 
    if (n < 1 || n > 100) {
        printf("N debe estar entre 1 y 100.\n");
        return 1;
    }
 
    int a[100];
    for (int i = 0; i < n; i++) {
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
 
    // Inicializar max y min con el primer elemento.
    // NO inicialices con 0: si todos los valores son negativos, fallaria.
    int max = a[0];
    int min = a[0];
 
    for (int i = 1; i < n; i++) {   // empezamos en 1, ya tenemos a[0]
        if (a[i] > max) max = a[i];
        if (a[i] < min) min = a[i];
    }
 
    printf("Max: %d\n", max);
    printf("Min: %d\n", min);
 
    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.

Conexiones