Ejercicio 06 — Array de 4 Alumno {nombre, nota}, muestra lista, calcula media e…
Dificultad: amarillo · Módulo 08 (Structs)
Enunciado
Array de 4 Alumno {nombre, nota}, muestra lista, calcula media e indica el mejor.
Diagrama de flujo

Cómo se resuelve
Aquí combinamos structs con arrays: Alumno grupo[N] es un array de structs, una tabla donde cada fila tiene nombre y nota. Para acceder a un campo de un elemento se pone primero el índice y luego el punto: grupo[i].nota, grupo[i].nombre.
El programa hace dos recorridos con for:
- Leer los N alumnos. Dentro del bucle:
scanf("%49s %f", grupo[i].nombre, &grupo[i].nota). Fíjate en el patrón de siempre:nombrees array (sin&),notaesfloat(con&). - Mostrar y calcular a la vez. En la misma pasada se imprime cada alumno, se acumula la suma de notas y se guarda el índice del mejor:
suma += grupo[i].nota;
if (grupo[i].nota > grupo[mejor].nota) {
mejor = i;
}La técnica del “mejor” es un clásico: empiezas suponiendo que el mejor es el 0 y, cada vez que encuentras uno con nota más alta, actualizas el índice. Al final grupo[mejor] es el alumno con más nota. La media es suma / N. En el printf de la lista, %-8s alinea el nombre a la izquierda en 8 columnas para que la tabla quede ordenada.
Trampa habitual: guardar el struct entero del mejor en una variable aparte en vez de solo su índice. Guardar el índice mejor es más simple y evita copias; con él llegas a cualquier campo (grupo[mejor].nombre, grupo[mejor].nota).
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 08: Structs
* Ejercicio 06 — PRACTICA (rellena los TODO)
* Enunciado: Array de 4 Alumno {nombre, nota}, muestra lista, calcula media e indica el mejor.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej06_practica.c -o ej06 && ./ej06
*/
#include <stdio.h>
#define N 4
// TODO 1: Define typedef struct Alumno con char nombre[50] y float nota.
int main(void) {
// TODO 2: Declara un array grupo de N elementos de tipo Alumno.
// TODO 3: Bucle for de 0 a N-1.
// En cada iteracion, pide "Alumno i (nombre nota): " y lee con scanf.
// CUIDADO: nombre es array (sin &), nota es float (con &, usa %f).
// TODO 4: Imprime el encabezado "Lista de alumnos:\n".
// Bucle para mostrar cada alumno con formato " %-8s: %.2f\n".
// A la vez, acumula la suma de notas en una variable float.
// Y lleva un indice 'mejor' del alumno con nota mas alta (inicia en 0,
// actualiza si grupo[i].nota > grupo[mejor].nota).
// TODO 5: Imprime la media: suma / N (con formato "Media: %.2f\n").
// TODO 6: Imprime "Mejor nota: <nombre> (<nota>)\n" usando el indice 'mejor'.
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 08: Structs
* Ejercicio 06 — MODELO (resuelto)
* Enunciado: Array de 4 Alumno {nombre, nota}, muestra lista, calcula media e indica el mejor.
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej06_modelo.c -o ej06 && ./ej06
*/
#include <stdio.h>
#define N 4
typedef struct {
char nombre[50];
float nota;
} Alumno;
int main(void) {
Alumno grupo[N];
// Leer los N alumnos
for (int i = 0; i < N; i++) {
printf("Alumno %d (nombre nota): ", i + 1);
scanf("%49s %f", grupo[i].nombre, &grupo[i].nota);
}
// Mostrar lista y calcular media
printf("\nLista de alumnos:\n");
float suma = 0.0f;
int mejor = 0;
for (int i = 0; i < N; i++) {
printf(" %-8s: %.2f\n", grupo[i].nombre, grupo[i].nota);
suma += grupo[i].nota;
if (grupo[i].nota > grupo[mejor].nota) {
mejor = i;
}
}
printf("Media: %.2f\n", suma / N);
printf("Mejor nota: %s (%.2f)\n", grupo[mejor].nombre, grupo[mejor].nota);
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.