Update step7.c

main
pc9ha2xvl 3 months ago
parent 19e3f163d9
commit d982518a99

@ -1,122 +1,120 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#define MAX_STUDENTS 100 #define MAX_STUDENTS 100
typedef struct { typedef struct {
int id; int id;
int class; int class;
char name[20]; char name[20];
float scores[3]; float scores[3];
float total; float total;
} Student; } Student;
Student students[MAX_STUDENTS]; Student students[MAX_STUDENTS];
int studentCount = 0; int studentCount = 0;
// 函数声明 void inputAndSortStudents();
void inputAndSortStudents(); int compareStudents(const void *a, const void *b);
int compareStudents(const void *a, const void *b); void queryStudents();
void queryStudents(); void printStudents(Student *student);
void printStudents(Student *student);
int main() {
int main() { inputAndSortStudents();
inputAndSortStudents(); queryStudents();
queryStudents(); return 0;
return 0; }
}
void addStudent(int id, int class, char *name, float score1, float score2, float score3) {
void addStudent(int id, int class, char *name, float score1, float score2, float score3) { if (studentCount < MAX_STUDENTS) {
if (studentCount < MAX_STUDENTS) { students[studentCount].id = id;
students[studentCount].id = id; students[studentCount].class = class;
students[studentCount].class = class; strcpy(students[studentCount].name, name);
strcpy(students[studentCount].name, name); students[studentCount].scores[0] = score1;
students[studentCount].scores[0] = score1; students[studentCount].scores[1] = score2;
students[studentCount].scores[1] = score2; students[studentCount].scores[2] = score3;
students[studentCount].scores[2] = score3; students[studentCount].total = score1 + score2 + score3;
students[studentCount].total = score1 + score2 + score3; studentCount++;
studentCount++; }
} }
} void inputAndSortStudents() {
void inputAndSortStudents() {
// 这里应该有一个循环来输入学生信息
addStudent(10001, 11, "Zhang", 99.5, 88.5, 89.5);
addStudent(10001, 11, "Zhang", 99.5, 88.5, 89.5); addStudent(10002, 12, "Yang", 77.9, 56.5, 87.5);
addStudent(10002, 12, "Yang", 77.9, 56.5, 87.5); addStudent(10003, 11, "Liang", 92.5, 99.0, 60.5);
addStudent(10003, 11, "Liang", 92.5, 99.0, 60.5); addStudent(10004, 11,"Cai", 89.6, 56.9, 90.5);
addStudent(10004, 11,"Cai", 89.6, 56.9, 90.5); addStudent(10005, 14, "Fu", 55.6, 67.9, 98.9);
addStudent(10005, 14, "Fu", 55.6, 67.9, 98.9); addStudent(10006, 12, "Mao", 22.1, 45.9, 99.2);
addStudent(10006, 12, "Mao", 22.1, 45.9, 99.2); addStudent(10007, 13, "Zhan", 35.6, 67.9, 88.0);
addStudent(10007, 13, "Zhan", 35.6, 67.9, 88.0);
qsort(students, studentCount, sizeof(Student), compareStudents);
// 排序学生信息 }
qsort(students, studentCount, sizeof(Student), compareStudents);
} int compareStudents(const void *a, const void *b) {
Student *studentA = (Student *)a;
int compareStudents(const void *a, const void *b) { Student *studentB = (Student *)b;
Student *studentA = (Student *)a; if (studentA->class != studentB->class) {
Student *studentB = (Student *)b; return studentA->class - studentB->class;
if (studentA->class != studentB->class) { }
return studentA->class - studentB->class; return (studentB->total - studentA->total);
} }
return (studentB->total - studentA->total); // 降序排列
} void queryStudents() {
int queryType;
void queryStudents() { float minScore;
int queryType; char namePattern[20];
float minScore; int classStart, classEnd, idStart, idEnd;
char namePattern[20];
int classStart, classEnd, idStart, idEnd; printf("Enter query type (1: class range, 2: student ID range, 3: name pattern, 4: total score): ");
scanf("%d", &queryType);
printf("Enter query type (1: class range, 2: student ID range, 3: name pattern, 4: total score): ");
scanf("%d", &queryType); switch (queryType) {
case 1:
switch (queryType) { printf("Enter class range (e.g., 11-13): ");
case 1: scanf("%d-%d", &classStart, &classEnd);
printf("Enter class range (e.g., 11-13): "); int i;
scanf("%d-%d", &classStart, &classEnd); for (i = 0; i < studentCount; i++) {
int i; if (students[i].class >= classStart && students[i].class <= classEnd) {
for (i = 0; i < studentCount; i++) { printStudents(&students[i]);
if (students[i].class >= classStart && students[i].class <= classEnd) { }
printStudents(&students[i]); }
} break;
} case 2:
break; printf("Enter student ID range (e.g., 10001-10004): ");
case 2: scanf("%d-%d", &idStart, &idEnd);
printf("Enter student ID range (e.g., 10001-10004): "); for (i = 0; i < studentCount; i++) {
scanf("%d-%d", &idStart, &idEnd); if (students[i].id >= idStart && students[i].id <= idEnd) {
for (i = 0; i < studentCount; i++) { printStudents(&students[i]);
if (students[i].id >= idStart && students[i].id <= idEnd) { }
printStudents(&students[i]); }
} break;
} case 3:
break; printf("Enter name pattern (e.g., Zh*): ");
case 3: scanf("%s", namePattern);
printf("Enter name pattern (e.g., Zh*): "); for (i = 0; i < studentCount; i++) {
scanf("%s", namePattern); if (strstr(students[i].name, namePattern) != NULL) {
for (i = 0; i < studentCount; i++) { printStudents(&students[i]);
if (strstr(students[i].name, namePattern) != NULL) { }
printStudents(&students[i]); }
} break;
} case 4:
break; printf("Enter minimum total score: ");
case 4: scanf("%f", &minScore);
printf("Enter minimum total score: "); for (i = 0; i < studentCount; i++) {
scanf("%f", &minScore); if (students[i].total >= minScore) {
for (i = 0; i < studentCount; i++) { printStudents(&students[i]);
if (students[i].total >= minScore) { }
printStudents(&students[i]); }
} break;
} default:
break; printf("Invalid query type.\n");
default: break;
printf("Invalid query type.\n"); }
break; }
}
} void printStudents(Student *student) {
printf("%d %d %s %.1f %.1f %.1f\n", student->id, student->class, student->name,
void printStudents(Student *student) { student->scores[0], student->scores[1], student->scores[2]);
printf("%d %d %s %.1f %.1f %.1f\n", student->id, student->class, student->name, }
student->scores[0], student->scores[1], student->scores[2]);
}

Loading…
Cancel
Save