diff --git a/Task7.c b/Task7.c new file mode 100644 index 0000000..042e049 --- /dev/null +++ b/Task7.c @@ -0,0 +1,138 @@ +#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; +}