Ejercicio 07 — Funciones maximo_array y minimo_array
Dificultad: rojo · Módulo 04 (Funciones)
Enunciado
Funciones maximo_array y minimo_array. Lee 8 enteros e imprime max y min.
Diagrama de flujo

Cómo se resuelve
Aquí pasas un array entero a una función. maximo_array(int arr[], int n) y minimo_array(int arr[], int n) reciben el array y su número de elementos, y devuelven el mayor y el menor.
El algoritmo es el mismo en las dos: se supone que el primer elemento (arr[0]) es el máximo (o el mínimo) provisional, se recorre el resto desde i = 1 y, cada vez que aparece uno mejor, se actualiza. Empezar en arr[0] y recorrer desde 1 evita comparar el elemento consigo mismo.
Lo importante de este ejercicio es cómo viaja el array:
- Un array no se copia al pasarlo a una función. Lo que recibe
arres un puntero al primer elemento, es decir, la función trabaja sobre el array original demain. - Por eso hay que pasar el tamaño
naparte: dentro de la función,arres en realidad un puntero, ysizeof(arr)te daría el tamaño de un puntero (8 bytes, no el número de elementos). El array “olvida” su longitud al cruzar la frontera de la función. - En
mainse lee conscanf("%d", &v[i])dentro de un bucle: cada elemento lleva&porquescanfnecesita su dirección.
Trampa típica: intentar averiguar el número de elementos dentro de la función con sizeof(arr) / sizeof(arr[0]). Fuera de la función (donde v sí es un array de verdad) eso funciona; dentro, arr es un puntero y el cálculo sale mal. Por eso el tamaño siempre se pasa como parámetro extra.
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 04: Funciones
* Ejercicio 07 — PRACTICA (rellena los TODO)
* Enunciado: Funciones maximo_array y minimo_array. Lee 8 enteros e imprime max y min.
* Dificultad: rojo
* Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
*/
#include <stdio.h>
#define TAM 8
/* TODO: escribe los prototipos de maximo_array y minimo_array
* - ambas reciben: int arr[], int n
* - ambas devuelven int
*/
int main(void) {
int v[TAM];
printf("Introduce %d enteros:\n", TAM);
/* TODO: bucle for para leer cada elemento con scanf
* recuerda: &v[i] (scanf necesita la direccion)
*/
/* TODO: imprime el maximo y el minimo llamando a tus funciones */
return 0;
}
/* TODO: define int maximo_array(int arr[], int n)
* - inicializa max = arr[0]
* - recorre desde i=1 hasta i<n
* - si arr[i] > max, actualiza max
* - devuelve max
* - CLAVE: no puedes usar sizeof(arr) aqui; usa n
*/
/* TODO: define int minimo_array(int arr[], int n)
* - igual que maximo_array pero buscando el menor
*/Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 04: Funciones
* Ejercicio 07 — MODELO (resuelto)
* Enunciado: Funciones maximo_array y minimo_array. Lee 8 enteros e imprime max y min.
* Dificultad: rojo
* Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
*/
#include <stdio.h>
#define TAM 8
/* Prototipos — reciben el array y su tamano por separado */
int maximo_array(int arr[], int n);
int minimo_array(int arr[], int n);
int main(void) {
int v[TAM];
printf("Introduce %d enteros:\n", TAM);
for (int i = 0; i < TAM; i++) {
printf(" v[%d]: ", i);
scanf("%d", &v[i]);
}
printf("\nMax: %d\n", maximo_array(v, TAM));
printf("Min: %d\n", minimo_array(v, TAM));
return 0;
}
/* Recorre el array y devuelve el mayor elemento.
* IMPORTANTE: dentro de la funcion NO podemos usar sizeof(arr)/sizeof(arr[0])
* porque arr es un puntero, no un array. Por eso pasamos n aparte. */
int maximo_array(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}
/* Igual que maximo_array pero buscando el menor */
int minimo_array(int arr[], int n) {
int min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < min) min = arr[i];
}
return min;
}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.