这个问题不是很菜
今天老师出了个问题,遇到一个瓶颈。问题是将学生的成绩排序,然后输出所有学生的名字。
排序很简单,我不能解决的是排序后会破坏以前的数组对应的值,感性些就是这样。
a[1]=4 a[2]=6 a[3]=1 a[4]=9
排序后角标对应的数字发生变化,在输出时学号与名次的对应不知道怎么算。
望各位指点一二
#include<stdio.h> #define M 500 //定义结构体 struct student {int student_num; int grade; }; //按学生的成绩对学生进行排序,由高分到低分 void bubblesort(struct student list[],int last) {struct student temp; for(int current=0;current<last;current++) {for(int walk=last-1;walk>current;walk--) { if(list[walk].grade>list[walk-1].grade) { temp=list[walk]; list[walk]=list[walk-1]; list[walk-1]=temp; } } } return; } //bubblesort int main() { //local declaration int num; int i; struct student student_arr[M]; //statements scanf("%d",&num); //学生的个数 for(i=0;i<num;i++) scanf("%d%d",&student_arr[i].student_num,&student_arr[i].grade); //输入学生的学号和学生的成绩 bubblesort(student_arr,num); //排序 for(i=0;i<num;i++) printf("%d\n",student_arr[i].student_num); return 0; } //main
#include<stdio.h> int main() { int a[50],n; printf("班级人数:\n"); scanf("%d",&n); printf("依次按学号输入成绩:\n"); int i; for(i=1;i<=n;i++) scanf("%d",&a[i]); int flag; while(1) { flag=-1; //<----flag保存最大值 int s=-1; //<----s保存最大值的下标 int j; for(j=1;j<=n;j++) { if(a[j]>flag) { flag = a[j]; s = j; } } if(flag == -1) break; a[s] = -1; //<-----当选出最大值后,将其置为-1 printf("%d号成绩%d.\n",s,flag); } system("pause"); return 0; }竟然Lz不会结构体,我弄了个数组