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.

Banner Pubblicitario

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

Strutture complesse in C

Esercizio sulle struct in C

Typedef struct C

Media per riga e per colonna

Banner pubblicitario

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C