#include #include #define max 50 #define length 20 struct Student { int num; char name[length]; int age; }; int compareByName(const void *a, const void *b) { struct Student *studentA = (struct Student *)a; struct Student *studentB = (struct Student *)b; return strcmp(studentA->name, studentB->name); } int compareByAge(const void *a, const void *b) { struct Student *studentA = (struct Student *)a; struct Student *studentB = (struct Student *)b; if (studentA->age != studentB->age) { return studentA->age - studentB->age; } else { return strcmp(studentA->name, studentB->name); } } int main() { int n,i; scanf("%d", &n); struct Student students[max]; for (i = 0; i < n; i++) { scanf("%d%s%d", &students[i].num, students[i].name, &students[i].age); } qsort(students, n, sizeof(struct Student), compareByName); for (i = 0; i < n; i++) { printf("%3d %6s %3d\n", students[i].num, students[i].name, students[i].age); } printf("\n"); qsort(students, n, sizeof(struct Student), compareByAge); for (i = 0; i < n; i++) { printf("%3d %6s %3d\n", students[i].num, students[i].name, students[i].age); } return 0; }