oi, sei quase nada em c mais dei umas mexidas no seu código, ver se melhorou. aki tah compilando numa boa...    #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char nome[20];
float nota1[20],nota2[20],media[20];
int matricula[20],i,maior_media=0,num_alunos=0,indice_maior=0,j=0,vet_decrescente[20];
i=0;
scanf("%s",&nome[i]);
num_alunos++;
while(strcmp(&nome[i],"FIM")!=0) /* le nomes, notas e matriculas enquanto nome for diferente de "FIM" */
{
   scanf("%d",&matricula[i]);
   scanf("%f",¬a1[i]);
   scanf("%f",¬a2[i]);
   media[i]= (nota1[i]+nota2[i])/2;
   i++;
   
   scanf("%s",&nome[i]);
   num_alunos++;
}
for(i=0,j=0; i<(num_alunos-1); i++,j++) /* encontra a maior media das notas, e guarda o indice da maior media */
{
   for(i=0; i<(num_alunos-1); i++)
   {
      if(media[i]>maior_media)
      {
         maior_media = media[i];
         indice_maior = i;
      }
   
   }
i=j;
vet_decrescente[i] = matricula[indice_maior]; /* guarda a matricula correspondente a maior media no vetor */
media[indice_maior] = 0; /* e depois a maior media recebe 0 para que o programa encontre a nova maior media */
}
for(i=0; i<(num_alunos-1); i++) /* mostra as matriculas referentes as medias dos alunos que estao em ordem descrescente */
   printf("%d\n",vet_decrescente[i]);
system("pause");
}