Esercizio svolto sulle struct in C/C+

Esercizio

Realizzare un programma in C con l’uso delle function, che permetta di creare una tabella con record informativo, che contiene per ogni studente, il nome, il cognome, l’età, e la media che ha conseguito a fine anno. 
L’utente, inizialmente deve inserire i dati e poi attraverso un menù deve consentire le seguenti operazioni:

1- Stampa media dei voti con i dati degii alunni;

2- Visualizzazione della media di un alunno specifico

3- Visualizzazione dei dati degli alunni con voto massimo e minimo

4- Uscita dal programma

Realizzare una codifica in C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char nome[20];
char cognome[20];
int age;
float media;
}alunno;
float specifica(alunno n[], int na, alunno z);
void maxmin(alunno n[], int na);
void inserimento(alunno n[], int na);
void visualizza_medie(alunno n[], int na);
int main()
{
alunno elenco[20];
int numero_alunni;
int scelta;
float m;
alunno incognito;
printf("PROGRAMMA GESTIONE ALUNNI\n");
printf("quanti alunni vuoi inserire?\n");
scanf("%d", &numero_alunni);
inserimento(elenco, numero_alunni);
while(1)
{

do{
printf("\nquale operazione vuoi svolgere?\n");
printf("2- visualizza medie\n");
printf("3- stampa media alunno specifico\n");
printf("4- visualizzazione media massima e minima\n");
printf("5- uscita dal programma\n");
scanf("%d", &scelta);
if((scelta<2)||(scelta>5))
printf("scelta non corretta\n");
} while((scelta<2)||(scelta>5));
switch(scelta)
{

case 2:{visualizza_medie(elenco, numero_alunni);
break;}
case 3:{printf("inserire il nome e cognome dell'alunno de ricercare\n");
scanf("%s %s", incognito.nome, incognito.cognome);
incognito.media=specifica(elenco, numero_alunni, incognito);
if(incognito.media==-1)
printf("alunno non trovato\n");
else printf("la media e' %f", incognito.media);
break;
case 4:
{ maxmin(elenco, numero_alunni);
break;}
case 5:printf(" arrivederci e grazie\n");
return 0;
}

}
}
}
void inserimento(alunno n[], int na)
{
int k;
for(k=0;k<na;k++)
{
printf("inserire il nome e il cognome\n");
scanf("%s%s", n[k].nome,n[k].cognome);
printf("inserire l'eta'\n");
scanf("%d", &n[k].age);
printf("inserire la media voti\n");
scanf("%f", &n[k].media);
}

}
void visualizza_medie(alunno n[], int na)
{
int k;
for(k=0;k<na;k++)
{
printf("NOME:%s\n", n[k].nome);
printf("COGNOME:%s\n", n[k].cognome);
printf("ETA': %d\n", n[k].age);
printf("MEDIA VOTI:%f", n[k].media);
}
}
float specifica(alunno n[], int na, alunno z)
{
int flag=0;
int k=0;
float m=0;
while((flag==0)&&(k<na))
{
if(strcmp(n[k].cognome, z.cognome)==0)
if(strcmp(n[k].nome, z.nome)==0)
{
flag=1;
m=n[k].media;
}
k++;
}
if(flag==0)
m=-1;
return m;
}
void maxmin(alunno n[], int na)
{ //z massimo e y minimo
alunno massimo,minimo;
massimo.media=0;
minimo.media=10;
int k=0;
for(k=0;k<na;k++)
{
if(n[k].media>massimo.media)
massimo=n[k];
if(n[k].media<minimo.media)
minimo=n[k];
printf("l'alunno con la media piu' alta e':\n%s %s %f\n",massimo.nome, massimo.cognome, massimo.media );
printf("l'alunno con la media piu' bassa e': \n%s %s %f\n", minimo.nome, minimo.cognome, minimo.media);

}}

Video lezione sulle struct in C