Realizziamo un altro esempio sulle struct in C al fine di consolidare l’argomento.
Definire una struttura per memorizzare i dati degli studenti di una classe e dei voti nelle varie discipline: Italiano, Matematica e Informatica.
Si scriva una funzione in C che, a partire da un vettore di studenti fornito come argomento, determini la disciplina che ha la media più alta.
Procedimento dell’esempio sulle struct in C
Definiamo quindi una struttura studente con i campi nome, cognome, e i campi interi delle varie materie per permettere l’inserimento dei voti.
Realizziamo poi una funzione votiAlti che calcola in quale materia ci sono i voti più alti. Attenzione, il programma non fa il controllo se ci sono medie uguali quindi mi restituisce la prima media più alta che trova. Vi invito a fare tale modifica e di scriverla sotto nei commenti così da discuterne assieme.
Nel programma principale si inseriscono gli studenti, stabilendo come limite massimo 20. Provate anche a fare i controlli sull’input nell’inserimento dei dati.
Dopo l’inserimento si invoca la funzione media per poi visualizzare i risultati.
Ecco dunque il listato completo dell’esempio sulle struct in C.
#include <stdio.h>
#include <string.h>
#define MAX 20
typedef struct {
char cognome[20];
char nome[20];
int anno_nascita;
int italiano;
int matematica;
int informatica;
} studente;
int votiAlti(studente classe[], float mediaVoti[],int n){
int i,maxM;
for (i=0; i<n; i++){
mediaVoti[0]+=classe[i].italiano;
mediaVoti[1]+=classe[i].matematica;
mediaVoti[2]+=classe[i].informatica;
}
for (i=0; i<3; i++)
mediaVoti[i]/=n;
maxM=0;
for (i=1; i<3; i++)
if(mediaVoti[i]>mediaVoti[maxM])
maxM=i;
return maxM;
}
int main(){
int i,n,materia;
studente classe[20];
char materie[3][15]={"Italiano","Matematica","Informatica"};
float mediaVoti[3]={0.0};
printf("Quanti studenti?:");
scanf("%d", &n);
for (i=0; i<n; i++){
printf("\nStudente:%d", i+1);
printf("\nCognome:");
scanf("%s", classe[i].cognome);
printf("Nome:");
scanf("%s", classe[i].nome);
printf("Voto di Italiano:");
scanf("%d", &classe[i].italiano);
printf("Voto di Matematica:");
scanf("%d", &classe[i].matematica);
printf("Voto di Informatica:");
scanf("%d", &classe[i].informatica);
}
materia=votiAlti(classe,mediaVoti,n);
printf("\nMateria con media piu alta:%s", materie[materia]);
printf("\nMedia voti:%3.2f", mediaVoti[materia]);
return 0;
}
Chiaramente questa è solo una possibile risoluzione dell’esempio sulle struct in C.
Alcuni link utili
Realizzare un menù di scelta in C
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice