学生成绩排名C++ sort

mac2024-10-28  10

//2019-10-30 #include <iostream> #include <algorithm> using namespace std; struct student{ int id;//学号 char name[10];//姓名 int sx;//数学 int yw;//语文 int yy;//英语 int sum;//总成绩 }stu[10]; int main() { bool cmp(struct student stu1,struct student stu2); int n,i; int row=0; int k=-1;//表示当前位置的学生前一个学生的成绩 FILE *fp = fopen("e:\\data\\stu.dat","w"); printf("输入学生人数:\n"); scanf("%d\n",&n); for(i=0;i<n;i++){ scanf("%d %s %d %d %d",&stu[i].id,&stu[i].name,&stu[i].sx,&stu[i].yw,&stu[i].yy); stu[i].sum=stu[i].sx+stu[i].yw+stu[i].yy; } sort(stu,stu+n,cmp);//sort排序只能用bool类型 printf("按照成绩从高到低输出\n"); for(i=0;i<n;i++){ printf("学号%10d,姓名%10s,数学%10d,语文%10d,英语%10d,总分%10d\n",stu[i].id,stu[i].name,stu[i].sx,stu[i].yw,stu[i].yy,stu[i].sum); } printf("以下几位同学的成绩在前四:\n"); for(i=0;i<n;i++){ if(stu[i].sum>=stu[3].sum){ if(stu[i].sum!=k){ row=i+1; } k=stu[i].sum; printf("名次%10d 姓名%10s 分数%10d\n",row,stu[i].name,stu[i].sum); fprintf(fp,"名次%10d 姓名%10s 分数%10d\n",row,stu[i].name,stu[i].sum); } } return 0; } bool cmp(struct student stu1,struct student stu2) { if(stu1.sum>stu2.sum) return true; else return false; }

 

最新回复(0)