From ceacb55d7adff49c77a5a6697a920cf2dc87dab3 Mon Sep 17 00:00:00 2001 From: pc9ha2xvl <2119910569@qq.com> Date: Fri, 22 Nov 2024 17:29:43 +0800 Subject: [PATCH] ADD file via upload --- step4.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 step4.c diff --git a/step4.c b/step4.c new file mode 100644 index 0000000..a450776 --- /dev/null +++ b/step4.c @@ -0,0 +1,93 @@ +#include +#include +typedef struct { + int id; + int classNum; + float score1; + float score2; + float score3; +} Student; + +// 函数声明 +int compareStudents(const void *a, const void *b); +void insertStudent(Student students[], int *size, Student newStudent); +void printStudents(Student students[], int size); + +int main() { + Student students[4] = { + {10001, 11, 99.5, 88.5, 89.5}, + {10002, 12, 77.9, 56.5, 87.5}, + {10003, 11, 92.5, 99.0, 60.5} + }; + int size = 3; // 当前学生数量 + Student newStudent; + + // 输入新学生的信息 + printf(""); + scanf("%d",&newStudent.id); + printf(""); + scanf("%d",&newStudent.classNum); + printf(""); + scanf("%f",&newStudent.score1); + printf(""); + scanf("%f",&newStudent.score2); + printf(""); + scanf("%f",&newStudent.score3); + // 检查学号是否已存在 + int i; + for (i = 0; i < size; i++) { + if (students[i].id == newStudent.id) { + printf("学号 %d 已存在。\n", newStudent.id); + return 0; + } + } + + // 插入新学生 + insertStudent(students, &size, newStudent); + + // 打印所有学生信息 + printStudents(students, size); + + return 0; +} + +// 比较函数,用于qsort +int compareStudents(const void *a, const void *b) { + Student *studentA = (Student *)a; + Student *studentB = (Student *)b; + if (studentA->classNum != studentB->classNum) { + return studentA->classNum - studentB->classNum; + } else { + float totalA = studentA->score1 + studentA->score2 + studentA->score3; + float totalB = studentB->score1 + studentB->score2 + studentB->score3; + return (totalB > totalA) - (totalA > totalB); + } +} + +// 插入新学生 +void insertStudent(Student students[], int *size, Student newStudent) { + Student temp[*size + 1]; + int i; + for (i = 0; i < *size; i++) { + temp[i] = students[i]; + } + temp[*size] = newStudent; + qsort(temp, *size + 1, sizeof(Student), compareStudents); + for (i = 0; i < *size + 1; i++) { + students[i] = temp[i]; + } + (*size)++; +} + +// 打印学生信息 +void printStudents(Student students[], int size) { + int i; + for (i = 0; i < size; i++) { + printf("%d %d %.1f %.1f %.1f", students[i].id, students[i].classNum, students[i].score1, students[i].score2, students[i].score3); + if (i == size-2) { + printf(" inserted\n"); + } else { + printf("\n"); + } + } +}