#include #include #include typedef struct super { char sname[35]; char fname[35]; char code[10]; char major[12]; float average; } sz; int compar(const void *a, const void *b) { sz *x = (sz *) a; sz *y = (sz *) b; if (x->average < y->average) return 1; if (x->average > y->average) return -1; return strcmp (x->code, y->code); } int main(int argc, char **argv) { struct super *data; data=(struct super*)malloc(sizeof(struct super)*1000); int i = 0, count = 0,ki=0; char akt[10]; scanf ("%s", akt); while (scanf("%s %s %s %s %f", data[i].sname, data[i].fname, data[i].code,data[i].major, &data[i].average) > -1) { i++; count++; } qsort (data, count, sizeof (struct super), compar); if (count<=3) { for (i = 0; i < count; i++) printf ("%s %s %s %.1f\n", data[i].sname, data[i].fname, data[i].code, data[i].average); } else for (i = 0; i < count; i++) { if (strcmp(akt, data[i].major)==0 && ki<3) { printf ("%s %s %s %.1f\n", data[i].sname, data[i].fname, data[i].code, data[i].average); ki++; } } free(data); return 0; }