#include typedef struct aluno { int RA; char nome[50]; float notas[4]; } aluno; int main() { int i, j, q; aluno x, y; FILE *alunos; alunos = fopen("alunos.dat", "r+b"); if (alunos == NULL) { printf("Não foi possível abrir o arquivo alunos.dat.\n"); return 1; } // conta número de registros fseek(alunos, 0, SEEK_SET); q = 0; for(;;) { fread(&x, sizeof(aluno), 1, alunos); if (feof(alunos)) break; q++; } // bubble sort for (i = 0; i < q - 1; ++i) { for(j = 0; j < q - i - 1; ++j) { fseek(alunos, j*sizeof(aluno), SEEK_SET); fread(&x, sizeof(aluno), 1, alunos); fread(&y, sizeof(aluno), 1, alunos); if (x.RA > y.RA) { fseek(alunos, j*sizeof(aluno), SEEK_SET); fwrite(&y, sizeof(aluno), 1, alunos); fwrite(&x, sizeof(aluno), 1, alunos); } } } // mostra resultado fseek(alunos, 0, SEEK_SET); for(;;) { fread(&x, sizeof(aluno), 1, alunos); if (feof(alunos)) break; printf("\nDados do Aluno\nRA: %0.6d\n" "Nome: %s\nNotas: ", x.RA, x.nome); for (i = 0; i < 4; ++i) printf("%.1f ", x.notas[i]); printf("\n\n"); } printf("%d registros\n", q); fclose(alunos); return 0; }