codice:
	#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM_STUDENTI 2
#define NUM_VOTI 4
typedef struct {
	int Matricola;
	char Nome [20];
	int Anno;}Studente;
typedef struct {
	int Matricola;
	char Provincia[20];
	int CodInsegnmento;
	int voto[NUM_VOTI];}Esame;
main()
{
	int I,J,somma=0;float media;
	FILE *fp1;
	FILE *fp2;
	Studente dati1;
	Esame dati2;
	fp1=fopen("studenti.dat", "wb");
	if(fp1==NULL){fprintf(stderr, "errore di apertura");exit(1);}
	printf("Acquisizione struttura Studente\n\n");
	for(I=0;I<NUM_STUDENTI;I++)
	{
		printf("Matricola:  ");scanf("%d",&dati1.Matricola);
		printf("Nome studente:  ");scanf("%s", dati1.Nome);
		printf("Anno corso:  ");scanf("%d", &dati1.Anno);
		fwrite(&dati1, sizeof(dati1), 1, fp1);}
	fclose(fp1);
	fp2=fopen("Esami.dat", "wb");
	if(fp2==NULL){fprintf(stderr, "Errore di apertura");exit(1);}
	printf("Acquisizione struttura Esame\n\n");
	for(J=0;J<NUM_STUDENTI;J++)
	{
		printf("Matricola:  ");scanf("%d",&dati2.Matricola);
		printf("Provincia:  ");scanf("%s",dati2.Provincia);
		printf("Codice insegnamento:  ");scanf("%d", &dati2.CodInsegnmento);
		for(I=0;I<NUM_VOTI;I++){
			printf("Voti studente:  ");scanf("%d", &dati2.voto);
			somma=somma+dati2.voto;}
		media=somma/NUM_VOTI;
		fwrite(&dati2, sizeof(dati2), 1, fp2);}
	fclose(fp2);
	fp1=fopen("studenti.dat", "rb");
	if(fp1==NULL){fprintf(stderr, "Errore di apertura");exit(1);}
	while(fread(&dati1, sizeof(dati1),1,fp1)!=0)
		if(strcmp(dati1.Matricola, dati2.Matricola)==0)
		{printf("Media= %f",media);}
	fclose(fp1);
	fp2=fopen("esami.dat", "rb");
	if(fp2==NULL) {fprintf(stderr, "Errore di apertura");exit(1);}
	while(fread(&dati2, sizeof(dati2), 1, fp2)!=0)
	{printf("Nome %s  media %f\n",dati1.Nome,media);}
	fclose(fp2);
}
 
ho provato a modificare il codice in questo modo...
sono sempre bloccato...EXC_BAD_ACCESS l'errore riscontrato!
qualche suggerimento per ottenere l'elenco degli studenti con media sup a 27?
saluti