Arreglado, habia dos pequeños errores (mas que nada descuidos en el bucle que ordena los nombres):
1.strcpy(aux.nombre,alumno[i].nombre);
strcpy(aux.nombre,alumno[i].nombre);
deberia ser
strcpy(aux.nombre,alumno[i].nombre);
strcpy(aux.apellido,alumno[i].apellido);
por eso no salia el apellido, aux tenia el apellido en blanco!
2.alumno[i+1].prom=aux.prom;
alumno[i+1].legajo=aux.prom;
deberia ser:
alumno[i+1].prom=aux.prom;
alumno[i+1].legajo=aux.legajo;
Aca esta el codigo un poco mas pulido (legible):
Código:
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define cant 5
void main()
{
struct colegio
{
int legajo;
char apellido[30];
char nombre[30];
float prom;
} alumno[cant],aux;
int i;
//clrscr();
for (i = 0; i < cant; i++)
{
printf("ingrese el nro. de legajo del alumno\r\n");
scanf("%d", &alumno[i].legajo);
fflush(stdin);
printf("ingrese el apellido del alumno (maximo 30 carac.)\r\n");
gets(alumno[i].apellido);
fflush(stdin);
printf("ingrese el nombre del alumno (maximo 30 carac.)\r\n");
gets(alumno[i].nombre);
fflush(stdin);
printf("ingrese el promedio del alumno\r\n");
fflush(stdin);
scanf("%f",&alumno[i].prom);
fflush(stdin);
//clrscr();
}
for (i = 0; i < cant; i++)
{
if (alumno[i].prom > alumno[i+1].prom)
{
aux.prom = alumno[i].prom;
aux.legajo = alumno[i].legajo;
strcpy(aux.nombre, alumno[i].nombre);
strcpy(aux.apellido, alumno[i].apellido);
alumno[i].prom = alumno[i+1].prom;
alumno[i].legajo = alumno[i+1].legajo;
strcpy(alumno[i].nombre, alumno[i+1].nombre);
strcpy(alumno[i].apellido, alumno[i+1].apellido);
alumno[i+1].prom = aux.prom;
alumno[i+1].legajo = aux.legajo;
strcpy(alumno[i+1].apellido, aux.apellido);
strcpy(alumno[i+1].nombre, aux.nombre);
}
}
for (i = 0; i < cant; i++)
{
printf("%d\t%s,%s\t%.02f\r\n", alumno[i].legajo, alumno[i].apellido, alumno[i].nombre, alumno[i].prom);
}
getch();
}