#include #include #include struct Student{ int stunumber; int class; char name[10]; float grade1; float grade2; float grade3; float sum; }students[7]={ {10001,11,"Zhang",99.5,88.5,89.5,99.5+88.5+89.5}, {10002,12,"Yang",77.9,56.5,87.5,77.9+56.5+87.5}, {10003,11,"Liang",92.5,99.0,60.5,92.5+99.0+60.5}, {10004,11,"Cai",89.6,56.9,90.5,89.6+56.9+90.5}, {10005,14,"Fu",55.6,67.9,98.9,55.6+67.9+98.9}, {10006,12,"Mao",22.1,45.9,99.2,22.1+45.9+99.2}, {10007,13,"Zhan",35.6,67.9,88.0,35.6+67.9+88.60}}; //一系列索引变量 int class_idx,min_idx,max_idx,i,n,j; float sum_idx; char name_idx[10]; void selection_sort(struct Student arr[], int n) { int i, j, min_idx; //一一检索每个结构体中class的值 for (i = 0; i < n-1; i++) { // 找到最小值的位置 min_idx = i; for (j = i+1; j < n; j++) { if (arr[j].class < arr[min_idx].class) { min_idx = j; } else if(arr[j].class == arr[min_idx].class) { if(arr[j].sum > arr[min_idx].sum) { min_idx=j; } } } // 通过交换位置实现排序 struct Student temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; } } void print_student(struct Student *s) { printf("%d %d %s %.1f %.1f %.1f \n", s->stunumber, s->class, s->name, s->grade1, s->grade2, s->grade3); } int main(){ void selection_sort(struct Student arr[], int n); void print_student(struct Student *s); selection_sort(students,7); int Section_idx; printf("请输入类别\n"); scanf("%d",&Section_idx);//输入类别 switch(Section_idx) { case 1:goto section1;break; case 2:goto section2;break; case 3:goto section3;break; case 4:goto section4;break; case 5:goto section5;break; default:printf("输入错误"); } return 0; section1://查找指定班级范围内的学生 printf("请输入您要查找的信息(格式:班级-班级)\n"); //班级-班级 scanf("%d-%d",&min_idx,&max_idx); for(i=0;i < 7;i++) { if(students[i].class>=min_idx&&students[i].class<=max_idx) { printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3); } } return 0; section2://查找指定学号范围的学生 printf("请输入您要查找的信息(格式:学号-学号)\n"); //学号-学号 scanf("%d-%d",&min_idx,&max_idx); for(i=0;i < 7;i++) { if(students[i].stunumber >= min_idx&&students[i].stunumber <= max_idx) printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3); } return 0; section3://查找指定名字开头字母的学生 printf("请输入您要查找的信息(格式:开头字母+*)\n"); //字母* scanf("%s",name_idx); for(i=0;i<7;i++) { n=strlen(name_idx)-1; for(j=0;j=sum_idx) { printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3); } } return 0; section5://查找指定班级下指定学号范围内的学生 printf("请输入您要查找的信息(格式:班级+.+学号-学号)\n"); scanf("%d.%d-%d",&class_idx,&min_idx,&max_idx); for(i = 0;i < 7;i++) { if(students[i].class==class_idx&&students[i].stunumber>=min_idx&&students[i].stunumber<=max_idx) { printf("%d %d %s %.1f %.1f %.1f \n", students[i].stunumber, students[i].class, students[i].name, students[i].grade1, students[i].grade2, students[i].grade3); } } return 0; }