>>113 ソートのアルゴリズムは習ってないということで。
#include <stdio.h>
#include <stdlib.h>
struct seiseki {
char name[20];
int order[6];
} seito[] =
{{"太郎",80,90,75,70,70}, {"次郎",70,85,80,80,85}, {"三郎",75,95,65,90,95}, {"四郎",65,70,80,75,80},
{"春子",90,100,85,90,85},{"夏子",100,95,80,85,80}, {"秋子",60,75,90,70,85}, {"冬子",85,80,85,90,95}};
int kamoku;
int cmp(const struct seiseki *a, const struct seiseki *b) {
int t = a->order[kamoku] - b->order[kamoku];
return (t==0)?0:(t>0?1:-1);
}
int main() {
int i, array_size = sizeof(seito)/sizeof(*seito);
char s_kamoku[6][10] = {"国語","算数","理科","社会","英語","合計"};
for(i=0; i<array_size; i++) {
seito[i].order[5] = seito[i].order[0] + seito[i].order[1] +
seito[i].order[2] + seito[i].order[3] + seito[i].order[4];
printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
}
for(kamoku=5; kamoku>=0; kamoku--) {
printf("\n%sの点数で並び替え\n", s_kamoku[kamoku]);
qsort(seito, array_size, sizeof(*seito), (int (*)(const void*, const void*))cmp );
for(i=0; i<array_size; i++) {
printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
}
} return 0;
}