You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.4 KiB

#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 3
#define NAME_LEN 50
typedef struct {
int id;
int class;
char name[NAME_LEN];
float scores[3];
float total;
} Student;
// <20>ȽϺ<C8BD><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>qsort<72><74><EFBFBD><EFBFBD>
int compare(const void *a, const void *b) {
Student *studentA = (Student *)a;
Student *studentB = (Student *)b;
if (studentA->class != studentB->class) {
return studentA->class - studentB->class;
} else {
return studentB->total - studentA->total; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳɼ<DCB3>
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ܳɼ<DCB3>
void calculateTotal(Student *student) {
student->total = student->scores[0] + student->scores[1] + student->scores[2];
}
// <20><>ӡѧ<D3A1><D1A7><EFBFBD><EFBFBD>Ϣ
void printStudents(Student students[], int count) {
int prevClass = -1;
int i;
for (i = 0; i < count; i++) {
if (students[i].class != prevClass) {
printf("%d", students[i].class);
prevClass = students[i].class;
} else {
printf(" "); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
}
printf(" %d %s %.1f %.1f %.1f", students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2]);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ǹո<C7B8><D5B8>޸ĵ<DEB8>ѧ<EFBFBD><D1A7>
if (i == NUM_STUDENTS - 1 || students[i + 1].class != students[i].class ||
students[i + 1].id != students[i].id + 1) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ҵ<EFBFBD><D2B5>Ǹ<EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>
// ע<><EFBFBD><E2A3BA><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϿ<D0B6><CFBF>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ҵ<EFBFBD><D2B5>˲<EFBFBD><CBB2>޸<EFBFBD><DEB8><EFBFBD>ѧ<EFBFBD><D1A7>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿҪ<C4BF><D2AA>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ѧ<EFBFBD><D1A7>Ѱ<EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
// <20><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򻯴<EFBFBD><F2BBAFB4><EFBFBD>
printf(" modified\n");
} else {
printf("\n");
}
}
}
// <20>޸<EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ
void modifyStudent(Student students[], int count, int id, int class, const char *name, float scores[]) {
int i;
for (i = 0; i < count; i++) {
if (students[i].id == id) {
students[i].class = class;
strncpy(students[i].name, name, NAME_LEN);
students[i].scores[0] = scores[0];
students[i].scores[1] = scores[1];
students[i].scores[2] = scores[2];
calculateTotal(&students[i]);
// <20><><EFBFBD>޸ĺ<DEB8><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
qsort(students, count, sizeof(Student), compare);
return;
}
}
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>򲻽<EFBFBD><F2B2BBBD><EFBFBD><EFBFBD>κβ<CEBA><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B1A3>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
}
int main() {
// <20><>ʼ<EFBFBD><CABC>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ
Student students[NUM_STUDENTS] = {
{10001, 11, "Zhang", {99.5, 88.5, 89.5}, 0},
{10002, 12, "Yang", {77.9, 56.5, 87.5}, 0},
{10003, 11, "Liang", {92.5, 99.0, 60.5}, 0}
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ܳɼ<DCB3>
int i;
for (i = 0; i < NUM_STUDENTS; i++) {
calculateTotal(&students[i]);
}
// <20><>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
qsort(students, NUM_STUDENTS, sizeof(Student), compare);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ
int id, class;
char name[NAME_LEN];
float scores[3];
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD> <20><20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD>1 <20>ɼ<EFBFBD>2 <20>ɼ<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>\n");
scanf("%d %d %s %f %f %f", &id, &class, name, &scores[0], &scores[1], &scores[2]);
// <20>޸<EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
modifyStudent(students, NUM_STUDENTS, id, class, name, scores);
// <20><>ӡ<EFBFBD><D3A1><EFBFBD>º<EFBFBD><C2BA><EFBFBD>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>Ϣ
printStudents(students, NUM_STUDENTS);
return 0;
}