#include #include #include // 定义学生结构体 struct Student { int student_id; int class_id; char name[20]; double score1; double score2; double score3; }; // 定义全局学生数组 struct Student student_data[] = { {10001, 11, "Zhang", 99.5, 88.5, 89.5}, {10002, 12, "Yang", 77.9, 56.5, 87.5}, {10003, 11, "Liang", 92.5, 99.0, 60.5}, {10004, 11, "Cai", 89.6, 56.9, 90.5}, {10005, 14, "Fu", 55.6, 67.9, 98.9}, {10006, 12, "Mao", 22.1, 45.9, 99.2}, {10007, 13, "Zhan", 35.6, 67.9, 88.0} }; // 定义学生数量 int student_count = sizeof(student_data) / sizeof(student_data[0]); // 比较函数用于按班级从小到大,同班级按总成绩从大到小排序 int compare_students(const void *a, const void *b) { struct Student *student1 = (struct Student *)a; struct Student *student2 = (struct Student *)b; if (student1->class_id != student2->class_id) { return student1->class_id - student2->class_id; } else { double total1 = student1->score1 + student1->score2 + student1->score3; double total2 = student2->score1 + student2->score2 + student2->score3; return (total2 - total1) > 0 ? 1 : -1; } } // 查询学生信息函数 void query_students(int query_type, char *query_value) { for (int i = 0; i < student_count; i++) { struct Student student = student_data[i]; double total = student.score1 + student.score2 + student.score3; if (query_type == 1 && student.class_id >= query_value[0] && student.class_id <= query_value[2]) { printf("%d %d %s %.1lf %.1lf %.1lf\n", student.student_id, student.class_id, student.name, student.score1, student.score2, student.score3); } else if (query_type == 2 && student.student_id >= query_value[0] && student.student_id <= query_value[2]) { printf("%d %d %s %.1lf %.1lf %.1lf\n", student.student_id, student.class_id, student.name, student.score1, student.score2, student.score3); } else if (query_type == 3 && strncmp(student.name, query_value, strlen(query_value)) == 0) { printf("%d %d %s %.1lf %.1lf %.1lf\n", student.student_id, student.class_id, student.name, student.score1, student.score2, student.score3); } else if (query_type == 4 && total >= atof(query_value)) { printf("%d %d %s %.1lf %.1lf %.1lf\n", student.student_id, student.class_id, student.name, student.score1, student.score2, student.score3); } else if (query_type == 5 && student.class_id == query_value[0] && student.student_id >= query_value[2] && student.student_id <= query_value[4]) { printf("%d %d %s %.1lf %.1lf %.1lf\n", student.student_id, student.class_id, student.name, student.score1, student.score2, student.score3); } } } int main() { int query_type; char query_value[20]; printf("请输入查询类型和值(格式:类型 值):"); scanf("%d %s", &query_type, query_value); // 排序学生信息 qsort(student_data, student_count, sizeof(struct Student), compare_students); // 查询学生信息 query_students(query_type, query_value); return 0; }