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.

79 lines
3.1 KiB

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义学生结构体
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;
}