题目详情
定义结构体struct stu,编写成绩排名函数:void sort(struct stu *ps,int n),对结构体数组按成绩排名。程序功能为读入整数N(N<100),再读入N个学生的学号(整型)和成绩(实数)。按样例输出排名。
文章目录
- 一、输入样例
- 二、输出样例
- 三、代码展示
- 四、难点记录
一、输入样例
首先输入n(n<100),其次输入n个学生的学号(整型)与成绩(实数)。
5
101 99
102 100
103 50
104 80
105 99
二、输出样例
第一列输出名字(注意并列情况),第二列是学号,第三列是成绩(保留两位小数)。
1 102 100.00
2 101 99.00
2 105 99.00
4 104 80.00
5 103 50.00
三、代码展示
#include<stdio.h>
struct student{
int num;
double score;
};
//定义结构体
int main()
{
int i,n,index,j,z;
//定义变量
scanf("%d",&n);
//输入需要记录的学生人数
struct student stu[n],max;
//定义结构体变量
for(i=0;i<n;i++){
scanf("%d %lf",&stu[i].num,&stu[i].score);
}//输入n个学生的学号与成绩
for(i=0;i<n-1;i++){
index=i;
for(j=i+1;j<n;j++){
if(stu[index].score<stu[j].score){
index=j;
}
}max=stu[index];
stu[index]=stu[i];
stu[i]=max;
}//对n个学生的成绩进行排名(由大到小)
for(i=0,z=0;i<n;i++){
if(stu[i].score==stu[i-1].score)printf("%d %d %.2lf",z,stu[i].num,stu[i].score);
else{
printf("%d %d %.2lf",i+1,stu[i].num,stu[i].score);
z=i+1;
}//输出n个学生的排名情况
if(i<n-1)printf("\n");
}
}
四、难点记录
本题难点在于当有相同的成绩时,要进行排名并列;
更多推荐
C语言-成绩排名(结构)
发布评论